得联系到在吾爱的第一篇新手帖
传送门:http://www.52pojie.cn/thread-236655-1-1.html
之前是采用的笨方法,把所有提示注册前的条件跳改成JMP来绕过
#14楼大大的一句话提醒了我,如果有很多个提示的话,那工作量是很大的
所以有了这篇帖子
直接到关键CALL处下断,来到关键CALL
直接出现真码,但此行的目的是爆破
进入关键CALL,由于不懂算法,所以通过输入 真码和假码 看关键CALL里跳转的不同来分析
[AppleScript] 纯文本查看 复制代码 00404788 53 push ebx
00404789 56 push esi
0040478A 57 push edi
0040478B 89C6 mov esi,eax
0040478D 89D7 mov edi,edx
0040478F 39D0 cmp eax,edx
00404791 0F84 8F000000 je ExamNew.00404826 ; 假码未跳 / 真码未跳
00404797 85F6 test esi,esi
00404799 74 68 je short ExamNew.00404803 ; 假码未跳 / 真码未跳
0040479B 85FF test edi,edi
0040479D 74 6B je short ExamNew.0040480A ; 假码未跳 / 真码未跳
0040479F 8B46 FC mov eax,dword ptr ds:[esi-0x4]
004047A2 8B57 FC mov edx,dword ptr ds:[edi-0x4]
004047A5 29D0 sub eax,edx
004047A7 77 02 ja short ExamNew.004047AB ; 假码跳 / 真码未跳
004047A9 01C2 add edx,eax
004047AB 52 push edx
004047AC C1EA 02 shr edx,0x2
004047AF 74 26 je short ExamNew.004047D7 ; 假码未跳 / 真码未跳
004047B1 8B0E mov ecx,dword ptr ds:[esi]
004047B3 8B1F mov ebx,dword ptr ds:[edi]
004047B5 39D9 cmp ecx,ebx
004047B7 75 58 jnz short ExamNew.00404811 ; 假码跳 / 真码未跳
004047B9 4A dec edx
004047BA 74 15 je short ExamNew.004047D1 ; 真码未跳
004047BC 8B4E 04 mov ecx,dword ptr ds:[esi+0x4]
004047BF 8B5F 04 mov ebx,dword ptr ds:[edi+0x4]
004047C2 39D9 cmp ecx,ebx
004047C4 75 4B jnz short ExamNew.00404811 ; 真码未跳
004047C6 83C6 08 add esi,0x8
004047C9 83C7 08 add edi,0x8
004047CC 4A dec edx
004047CD ^ 75 E2 jnz short ExamNew.004047B1 ; 真码跳三次
004047CF EB 06 jmp short ExamNew.004047D7
004047D1 83C6 04 add esi,0x4
004047D4 83C7 04 add edi,0x4
004047D7 5A pop edx
004047D8 83E2 03 and edx,0x3
004047DB 74 22 je short ExamNew.004047FF ; 真码跳
004047DD 8B0E mov ecx,dword ptr ds:[esi]
004047DF 8B1F mov ebx,dword ptr ds:[edi]
004047E1 38D9 cmp cl,bl
004047E3 75 41 jnz short ExamNew.00404826
004047E5 4A dec edx
004047E6 74 17 je short ExamNew.004047FF
004047E8 38FD cmp ch,bh
004047EA 75 3A jnz short ExamNew.00404826
004047EC 4A dec edx
004047ED 74 10 je short ExamNew.004047FF
004047EF 81E3 0000FF00 and ebx,0xFF0000
004047F5 81E1 0000FF00 and ecx,0xFF0000
004047FB 39D9 cmp ecx,ebx
004047FD 75 27 jnz short ExamNew.00404826
004047FF 01C0 add eax,eax
00404801 EB 23 jmp short ExamNew.00404826
00404803 8B57 FC mov edx,dword ptr ds:[edi-0x4]
00404806 29D0 sub eax,edx
00404808 EB 1C jmp short ExamNew.00404826
0040480A 8B46 FC mov eax,dword ptr ds:[esi-0x4]
0040480D 29D0 sub eax,edx
0040480F EB 15 jmp short ExamNew.00404826
00404811 5A pop edx
00404812 38D9 cmp cl,bl
00404814 75 10 jnz short ExamNew.00404826 ; 假码跳
00404816 38FD cmp ch,bh
00404818 75 0C jnz short ExamNew.00404826
0040481A C1E9 10 shr ecx,0x10
0040481D C1EB 10 shr ebx,0x10
00404820 38D9 cmp cl,bl
00404822 75 02 jnz short ExamNew.00404826
00404824 38FD cmp ch,bh
00404826 5F pop edi
00404827 5E pop esi
00404828 5B pop ebx
00404829 C3 retn
取我的机器对应的真码 D41D8CD98F00B204E9800998ECF8427E
共32位(感觉有点像MD5)
这一句
[AppleScript] 纯文本查看 复制代码 004047A5 29D0 sub eax,edx
会通过真假码长度对比判断下面这个跳是否跳
[AppleScript] 纯文本查看 复制代码 004047A7 /77 02 ja short ExamNew.004047AB ; 假码跳 / 真码未跳
而这一句
[AppleScript] 纯文本查看 复制代码 004047CD ^ 75 E2 jnz short ExamNew.004047B1 ; 真码跳三次
会分三次把我们输入的注册码与真码做对比
那改跳的地方就都出来了
[AppleScript] 纯文本查看 复制代码 004047A7 /77 02 ja short ExamNew.004047AB ; ja改为je
[AppleScript] 纯文本查看 复制代码 004047B7 /75 58 jnz short ExamNew.00404811 ; jnz改为je
[AppleScript] 纯文本查看 复制代码 004047C4 /75 4B jnz short ExamNew.00404811 ; jnz改为je
这样,无论我们输入的注册码长度为多少,都可以注册成功
|