《穷和麻将》共享版2.03说明 算法分析

时间:2005-12-20 来源: 作者: 点击:
破解人:fnila 下面是trw跟出的算法核心 016F:00405BDA 8BC1 MOV EAX,ECX----ecx是c:的序列号(机器码)to eax 016F:00405BDC 33D2 XOR EDX,EDX 016F:00405BDE BD1A000000 MOV EBP,1A 016F:00405BE3 F7F5 DIV EBP-----除以1A 016F:00405BE5 0FBE07 MOVSX EAX,BYTE [EDI]---
  破解人:fnila
下面是trw跟出的算法核心
016F:00405BDA 8BC1             MOV      EAX,ECX---->ecx是c:的序列号(机器码)to eax
016F:00405BDC 33D2             XOR      EDX,EDX
016F:00405BDE BD1A000000       MOV      EBP,1A
016F:00405BE3 F7F5             DIV      EBP----->除以1A
016F:00405BE5 0FBE07           MOVSX    EAX,BYTE [EDI]--->取假注册码的ascii码(1,2,3...)
016F:00405BE8 8B1495F8904200   MOV      EDX,[EDX*4+004290F8]---->根据ecx div 1a的余数查表(表长104位)
016F:00405BEF 83C241           ADD      EDX,BYTE +41---->表值+$41
016F:00405BF2 47               INC      EDI---->假注册码后移一位
016F:00405BF3 3BD0             CMP      EDX,EAX--->比较
016F:00405BF5 7560             JNZ      00405C57--->不等game over
016F:00405BF7 B84FECC44E       MOV      EAX,4EC4EC4F---->$4EC4EC4F to eax
016F:00405BFC F7E1             MUL      ECX ----->无符号数乘法第一次为机器码  ECX*EAX
016F:00405BFE C1EA03           SHR      EDX,03---->结果的高位右移3位
016F:00405C01 8BCA             MOV      ECX,EDX---->右移3位的结果TO ECX为下次ECX*EAX准备!
016F:00405C03 894C2410         MOV      [ESP+10],ECX
..............................>ECX不为0时TO 016F:00405BDA 形成循环
以下是delphi的算法源代码
var
f:dword;
d:dword;
u:integer;
bb:dword;
n:dword;
vv:boolean;
t:tresourcestream;
  g:byte;
begin
//application.Instance;
//application.
//hinstance
//ReadComponentRes('mjs',instance);
t:=tresourcestream.Create(HInstance ,'mjsj','bin');


 n:=strtoint(edit1.text);
f:=$4EC4EC4F;

      f:=( n mod $1a )*4 ;
t.Seek(f,soFromBeginning);
t.Read(g,1);
edit2.text:=char(g+$41);
//edit1.text:='';
vv:=true;
while   vv=true do
begin
 f:=$4EC4EC4F;


                ASM
                MOV EAX,$4EC4EC4F
                MOV ECX,n
                MUL ECX
                MOV BB,EDX

                END;

 d:= bb  shr 3 ;
 if d=0  then vv:=false;
   f:=( d mod $1a )*4 ;
t.Seek(f,soFromBeginning);
t.Read(g,1);
//edit1.text:=inttostr(BB);
Edit2.text:=edit2.text+chr(g+$41);
   n:=d;
end;

t.Free;
end;
注册机和表略!有要的跟贴

------分隔线----------------------------
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容