黑狼人 发表于 2009-5-25 15:44:53

请教下浮点型算法分析

0047F638    55                   push ebp
0047F639    8BEC               mov ebp,esp
0047F63B    83C4 E4            add esp,-1C
0047F63E    53                   push ebx
0047F63F    33C9               xor ecx,ecx
0047F641    894D E4            mov dword ptr ss:,ecx
0047F644    894D E8            mov dword ptr ss:,ecx
0047F647    894D EC            mov dword ptr ss:,ecx
0047F64A    8BD8               mov ebx,eax
0047F64C    33C0               xor eax,eax
0047F64E    55                   push ebp
0047F64F    68 02F74700          push Delphi.0047F702
0047F654    64:FF30            push dword ptr fs:
0047F657    64:8920            mov dword ptr fs:,esp
0047F65A    8D55 EC            lea edx,dword ptr ss:
0047F65D    8B83 04030000      mov eax,dword ptr ds:
0047F663    E8 EC53FBFF          call Delphi.00434A54
0047F668    837D EC 00         cmp dword ptr ss:,0   ; 计算假码的长度
0047F66C    74 79                je short Delphi.0047F6E7      ; 没输入注册码就跳
0047F66E    8D55 E8            lea edx,dword ptr ss:
0047F671    8B83 04030000      mov eax,dword ptr ds:
0047F677    E8 D853FBFF          call Delphi.00434A54
0047F67C    8B45 E8            mov eax,dword ptr ss:   ; 假码
0047F67F    E8 A89EF8FF          call Delphi.0040952C
0047F684    DD5D F8            fstp qword ptr ss:
0047F687    9B                   wait
0047F688    DD45 F8            fld qword ptr ss:      ; 把假码转浮点型
0047F68B    D805 10F74700      fadd dword ptr ds:      ; 把假码加 51042.00
0047F691    DD5D F8            fstp qword ptr ss:       ; 123456.0000000000+51042.00=174498.00000000000000
0047F694    9B                   wait
0047F695    8D55 E4            lea edx,dword ptr ss:
0047F698    8B83 FC020000      mov eax,dword ptr ds:
0047F69E    E8 B153FBFF          call Delphi.00434A54
0047F6A3    8B45 E4            mov eax,dword ptr ss:   ; 读机器码 ASCII "95517768"
0047F6A6    E8 819EF8FF          call Delphi.0040952C
0047F6AB    DD5D F0            fstp qword ptr ss:      ; 把机器码转浮点型
0047F6AE    9B                   wait
0047F6AF    DD45 F0            fld qword ptr ss:
0047F6B2    D805 14F74700      fadd dword ptr ds:      ; 把机器码加 20417.00
0047F6B8    DD5D F0            fstp qword ptr ss:      ; 结果为 95538185.000000000000
0047F6BB    9B                   wait
0047F6BC    DD45 F8            fld qword ptr ss:      ; 读取加后的假码 174498.000000000000
0047F6BF    DC4D F0            fmul qword ptr ss:      ; 请问这里是相乘吗? 把174498.00000000000000*95538185.00000000????
0047F6C2    DB2D 18F74700      fld tbyte ptr ds:       ; 这里出现的是真的注册码浮点行 1.9860317891198000000e+14
0047F6C8    DED9               fcompp                        ; 请问这里是 1.9860317891198000000e+14 和1.6671222206130000000e+13比较吗?
0047F6CA    DFE0               fstsw ax
0047F6CC    9E                   sahf
0047F6CD    75 18                jnz short Delphi.0047F6E7       ; 这里是关键跳,跳了就错误.这里可以爆破.
0047F6CF    6A 00                push 0
0047F6D1    B9 24F74700          mov ecx,Delphi.0047F724
0047F6D6    BA 2CF74700          mov edx,Delphi.0047F72C
0047F6DB    A1 F8124800          mov eax,dword ptr ds:
0047F6E0    8B00               mov eax,dword ptr ds:
0047F6E2    E8 394EFDFF          call Delphi.00454520
0047F6E7    33C0               xor eax,eax
0047F6E9    5A                   pop edx
0047F6EA    59                   pop ecx
0047F6EB    59                   pop ecx
0047F6EC    64:8910            mov dword ptr fs:,edx
0047F6EF    68 09F74700          push Delphi.0047F709
0047F6F4    8D45 E4            lea eax,dword ptr ss:
0047F6F7    BA 03000000          mov edx,3
0047F6FC    E8 D347F8FF          call Delphi.00403ED4
0047F701    C3                   retn
请问下注册码怎么算?
本人菜鸟一只,请高手指点!!

[ 本帖最后由 黑狼人 于 2009-5-25 16:27 编辑 ]
页: [1]
查看完整版本: 请教下浮点型算法分析