小弟对破解很感兴趣,前几天亲手找了个软件按自己看到的知识去破解,暴破是暴破了(破解低级阶段),但我想看看软件注册的算发,但在追踪的过程中,遇到不懂的地方。
(这个论坛都说不要在这里公开国内软件,我找的偏偏是国内的,所以不方面公开说软件名称)
我想朋友们帮我看看判断序列号对错的这段代码:
1. 用OD载入软件,下断后,运行,输入假的:
产品序号:111111111111122
注册码: eyu
2. 断在下面这里:
004960F8 |. 8B45 E0 mov eax, dword ptr [ebp-20]
004960FB |. E8 38DEFFFF call 00493F38 (跟进去,看看)
00496100 |. 84C0 test al, al
00496102 74 29 je short 0049612D
00496104 |. 8D55 D4 lea edx, dword ptr [ebp-2C]
00496107 |. 8B45 FC mov eax, dword ptr [ebp-4]
0049610A |. 8B80 00030000 mov eax, dword ptr [eax+300]
00496110 |. E8 5397FAFF call 0043F868
00496115 |. 8B45 D4 mov eax, dword ptr [ebp-2C]
00496118 |. 8D55 D8 lea edx, dword ptr [ebp-28]
0049611B |. E8 C424F7FF call 004085E4
00496120 |. 8B45 D8 mov eax, dword ptr [ebp-28]
00496123 |. E8 38E3F6FF call 00404460
00496128 |. 83F8 0F cmp eax, 0F
0049612B 74 0F je short 0049613C
0049612D |> B8 0C684900 mov eax, 0049680C ; 产品序号输入错误!
00496132 |. E8 51ADF9FF call 00430E88
00496137 |. E9 83050000 jmp 004966BF
1. “产品序号输入错误”提示是从00496102跳过来的,所以决定跟进去004960FB的call
4.下面是跟进后的代码,有些看不懂想请教各位朋友。
00493F38 /$ 55 push ebp
00493F39 |. 8BEC mov ebp, esp
00493F3B |. 33C9 xor ecx, ecx
00493F3D |. 51 push ecx
00493F3E |. 51 push ecx
00493F3F |. 51 push ecx
00493F40 |. 51 push ecx
00493F41 |. 51 push ecx
00493F42 |. 8945 FC mov dword ptr [ebp-4], eax
00493F45 |. 33C0 xor eax, eax
00493F47 |. 55 push ebp
00493F48 |. 68 CA3F4900 push 00493FCA
00493F4D |. 64:FF30 push dword ptr fs:[eax]
00493F50 |. 64:8920 mov dword ptr fs:[eax], esp
00493F53 |. 8D45 F4 lea eax, dword ptr [ebp-C]
00493F56 |. 50 push eax
00493F57 |. 8B45 FC mov eax, dword ptr [ebp-4] (把序列号放进eax)
00493F5A |. E8 0105F7FF call 00404460 (通过此call算出序列号的位数)
00493F5F |. 8BC8 mov ecx, eax
00493F61 |. 83E9 02 sub ecx, 2 (下面的计算需要去掉序列号最后两位)
00493F64 |. BA 01000000 mov edx, 1
00493F69 |. 8B45 FC mov eax, dword ptr [ebp-4]
2. 00493F6C |. E8 4F07F7FF call 004046C0 (通过此call序列号去掉序列号最后两位,如我输入的111111111111122到了这里就是1111111111111)
00493F71 |. 8D45 F0 lea eax, dword ptr [ebp-10]
00493F74 |. 50 push eax
00493F75 |. 8B45 FC mov eax, dword ptr [ebp-4]
00493F78 |. E8 E304F7FF call 00404460
00493F7D |. 8BD0 mov edx, eax
00493F7F |. 4A dec edx
00493F80 |. B9 02000000 mov ecx, 2
00493F85 |. 8B45 FC mov eax, dword ptr [ebp-4]
00493F88 |. E8 3307F7FF call 004046C0 (此call是取系列号的最后两位)
00493F8D |. 8D55 EC lea edx, dword ptr [ebp-14]
00493F90 |. 8B45 F4 mov eax, dword ptr [ebp-C]
00493F93 |. E8 80FEFFFF call 00493E18
00493F98 |. 8B45 F0 mov eax, dword ptr [ebp-10]
00493F9B |. 8B55 EC mov edx, dword ptr [ebp-14]
(到了这里时候,EAX是22,ECX是1,EDX是25,我弄不明白这个25是怎样得来的?)
00493F9E |. E8 0906F7FF call 004045AC
00493FA3 |. 75 06 jnz short 00493FAB
00493FA5 |. C645 FB 01 mov byte ptr [ebp-5], 1
00493FA9 |. EB 04 jmp short 00493FAF
00493FAB |> C645 FB 00 mov byte ptr [ebp-5], 0
00493FAF |> 33C0 xor eax, eax
00493FB1 |. 5A pop edx
00493FB2 |. 59 pop ecx
00493FB3 |. 59 pop ecx
小弟现在只能破解皮毛,所以恳请教朋友们指点:
问题1:
00496100 |. 84C0 test al, al
00496102 74 29 je short 0049612D
上面反汇编中, test al, al 这里的al是指哪个寄存器?
问题2:
上面判断序列号的对错中,我弄不明白这个25是怎样得来的?
问题3:
这断代码只是判断系列号是否正确,好象只使用系列号后面两位与去掉最后两位的前面部分,这到底什么意思?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课