http://files.cnblogs.com/tk091/SMS.zip
首先查壳
ASPack 2.12 -> Alexey Solodovnikov
很简单,用esp搞定
1 00401408 /EB 10 jmp short 0040141A ; oep 2 0040140A |66:623A bound di, dword ptr [edx] 3 0040140D |43 inc ebx 4 0040140E |2B2B sub ebp, dword ptr [ebx] 5 00401410 |48 dec eax 6 00401411 |4F dec edi 7 00401412 |4F dec edi 8 00401413 |4B dec ebx 9 00401414 |90 nop 10 00401415 -|E9 98F04900 jmp 008A04B2 11 0040141A \A1 8BF04900 mov eax, dword ptr [49F08B] 12 0040141F C1E0 02 shl eax, 2 13 00401422 A3 8FF04900 mov dword ptr [49F08F], eax
我们注册试试,发现会出现下面的提示:
我们用OD载入,查找字符串
1 Ultra String Reference, 条目 40 2 Address=00402DE9 3 Disassembly=mov edx, 0049F421 4 Text String=注册码不正确! 5 6 Ultra String Reference, 条目 41 7 Address=00402E37 8 Disassembly=mov edx, 0049F42F 9 Text String=注册成功!\n 感谢您的支持!
跟进错误提示
1 00402DDE |. /74 4E je short 00402E2E 2 00402DE0 |. |66:C785 14FFF>mov word ptr [ebp-EC], 158 3 00402DE9 |. |BA 21F44900 mov edx, 0049F421 ; 注册码不正确! 4 00402DEE |. |8D85 44FFFFFF lea eax, dword ptr [ebp-BC] 5 00402DF4 |. |E8 B3AD0900 call 0049DBAC 6 00402DF9 |. |FF85 20FFFFFF inc dword ptr [ebp-E0] 7 00402DFF |. |8B00 mov eax, dword ptr [eax] 8 00402E01 |. |E8 F69C0600 call 0046CAFC 9 00402E06 |. |FF8D 20FFFFFF dec dword ptr [ebp-E0] 10 00402E0C |. |8D85 44FFFFFF lea eax, dword ptr [ebp-BC] 11 00402E12 |. |BA 02000000 mov edx, 2 12 00402E17 |. |E8 8CAE0900 call 0049DCA8 13 00402E1C |. |8B0D C09C4A00 mov ecx, dword ptr [4A9CC0] ; dump.004AB1E4 14 00402E22 |. |8B01 mov eax, dword ptr [ecx] 15 00402E24 |. |E8 A7570600 call 004685D0 16 00402E29 |. |E9 F2000000 jmp 00402F20 17 00402E2E |> \66:C785 14FFF>mov word ptr [ebp-EC], 164 18 00402E37 |. BA 2FF44900 mov edx, 0049F42F ; 注册成功!\n 感谢您的支持!
错误提示上面的提示即是关键跳,但是通过实验发现,仅修改这个跳转是不成功的,也就是不完美爆破。
因为程序还有个问题,就是使用次数的问题,即是破解了这里,还是会显示nag框。
总的来说,程序验证注册码是否成功,如果成功,则跳过次数限制以及注册失败。
我们往上看
1 0040261F |. /0F84 41090000 je 00402F66 2 00402625 |. |66:C785 14FFF>mov word ptr [ebp-EC], 8C 3 0040262E |. |BA 11F34900 mov edx, 0049F311 ; count 4 00402633 |. |8D45 C8 lea eax, dword ptr [ebp-38] 5 00402636 |. |E8 71B50900 call 0049DBAC 6 0040263B |. |FF85 20FFFFFF inc dword ptr [ebp-E0] 7 00402641 |. |8B10 mov edx, dword ptr [eax] 8 00402643 |. |8B85 FCFEFFFF mov eax, dword ptr [ebp-104] 9 00402649 |. |E8 1E200200 call 0042466C 10 0040264E |. |83F8 03 cmp eax, 3 11 00402651 |. |0F9CC1 setl cl 12 00402654 |. |83E1 01 and ecx, 1 13 00402657 |. |51 push ecx 14 00402658 |. |FF8D 20FFFFFF dec dword ptr [ebp-E0] 15 0040265E |. |8D45 C8 lea eax, dword ptr [ebp-38] 16 00402661 |. |BA 02000000 mov edx, 2 17 00402666 |. |E8 3DB60900 call 0049DCA8 18 0040266B |. |59 pop ecx 19 0040266C |. |84C9 test cl, cl 20 0040266E |. |0F84 4D020000 je 004028C1
有两个跳转,可以跳过次数限制,我们只需要修改第一个即可。