【软件名称】Bigman's Crackme6
【下载地址】
http://bbs.pediy.com/showthread.php?t=11222
【应用平台】XP
【软件大小】未知
【破解声明】学习用暴破
【破解工具】OllyICE
【软件简介】一个crackme程序
学习《加密与解密》5.1.2如何攻击序列号保护 做的一个序列号习题。
【破解过程】
下载的程序,已经脱过壳了,正好我还没学到脱壳。
用OllyICE打开,看到第一个DialogBoxParamA,估计这个就是主程序的窗口了。
004012AC |. 6A 00 push 0 ; /lParam = NULL
004012AE |. 68 A1154000 push 004015A1 ; |DlgProc = unpacked.004015A1
004012B3 |. 6A 00 push 0 ; |hOwner = NULL
004012B5 |. 6A 64 push 64 ; |pTemplate = 64
004012B7 |. 57 push edi ; |hInst
004012B8 |. E8 57040000 call <jmp.&USER32.DialogBoxParamA> ; \DialogBoxParamA
DialogBoxParam原形如下:
int DialogBoxParam(
HINSTANCE hInstance,
LPCTSTR lpTemplateName,
HWND hWndParent,
DLGPROC lpDialogFunc,
PARAM dwInitParam
);
我们最关心就是那个窗口回调(lpDialogFunc)了。
004012AE |. 68 A1154000 push 004015A1 ; |DlgProc = unpacked.004015A1
OllyICE注释得很清楚,该窗口回调的地址就是004015A1!
直接转到004015A1地址。
004015A1 /. 55 push ebp
004015A2 |. 89E5 mov ebp, esp
004015A4 |. 83EC 3C sub esp, 3C
004015A7 |. 53 push ebx
004015A8 |. 56 push esi
004015A9 |. 57 push edi
004015AA |. 8B45 0C mov eax, dword ptr [ebp+C]
004015AD |. 83F8 10 cmp eax, 10 ; Switch (cases 10..111)
004015B0 |. 0F84 BB000000 je 00401671
004015B6 |. 0F8C C4000000 jl 00401680
004015BC |. 3D 10010000 cmp eax, 110
004015C1 |. 74 0C je short 004015CF
004015C3 |. 3D 11010000 cmp eax, 111
004015C8 |. 74 1E je short 004015E8
004015CA |. E9 B1000000 jmp 00401680
004015CF |> FF75 14 push dword ptr [ebp+14] ; Case 110 (WM_INITDIALOG) of switch 004015AD
004015D2 |. FF75 10 push dword ptr [ebp+10]
004015D5 |. FF75 08 push dword ptr [ebp+8]
004015D8 |. E8 C0FFFFFF call 0040159D
004015DD |. 83C4 0C add esp, 0C
004015E0 |. 31C0 xor eax, eax
004015E2 |. 40 inc eax
004015E3 |. E9 9A000000 jmp 00401682
004015E8 |> 0FB745 10 movzx eax, word ptr [ebp+10] ; Case 111 (WM_COMMAND) of switch 004015AD
看OllyICE注释,是一个switch结构。WM_INITDIALOG就不看了,直接看WM_COMMAND。
004015E8 |> \0FB745 10 movzx eax, word ptr [ebp+10] ; Case 111 (WM_COMMAND) of switch 004015AD
004015EC |. 25 FFFF0000 and eax, 0FFFF
004015F1 |. 83F8 01 cmp eax, 1 ; Switch (cases 1..3)
004015F4 |. 74 0C je short 00401602
004015F6 |. 83F8 02 cmp eax, 2
004015F9 |. 74 6A je short 00401665
004015FB |. 83F8 03 cmp eax, 3
004015FE |. 74 43 je short 00401643 ; 跳转成立,弹出working keygen的对话框
00401600 |. EB 7E jmp short 00401680
00401602 |> 8D7D D3 lea edi, dword ptr [ebp-2D] ; Case 1 of switch 004015F1
00401605 |. 8D35 5E254000 lea esi, dword ptr [40255E]
0040160B |. B9 29000000 mov ecx, 29
00401610 |. F3:A4 rep movs byte ptr es:[edi], byte ptr>
00401612 |. 8D7D C7 lea edi, dword ptr [ebp-39]
00401615 |. 8D35 87254000 lea esi, dword ptr [402587]
0040161B |. B9 03000000 mov ecx, 3
00401620 |. F3:A5 rep movs dword ptr es:[edi], dword p>
00401622 |. FF75 08 push dword ptr [ebp+8]
00401625 |. E8 DFFEFFFF call 00401509
0040162A |. 59 pop ecx
0040162B |. 09C0 or eax, eax
0040162D |. 74 53 je short 00401682 ; 跳转不成立,弹出输入的序列号正确的对话框
0040162F |. 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00401631 |. 8D45 C7 lea eax, dword ptr [ebp-39] ; |
00401634 |. 50 push eax ; |Title
00401635 |. 8D45 D3 lea eax, dword ptr [ebp-2D] ; |
00401638 |. 50 push eax ; |Text
00401639 |. FF75 08 push dword ptr [ebp+8] ; |hOwner
0040163C |. E8 1B010000 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA
直接看里面的几个跳转语句,发现0040162D这一行如果跳转不成立,就会弹出输入注册码正确的,因此call 00401509就是在验证序列号,并且返回值是放在eax中的,如果eax不为0,则验证成功。
第一次练习,就直接把0040162D |. 74 53 je short 00401682改成2个NOP。
但是发现改成2个NOP会引起杀毒软件的拦截,只好改成je short 0040162F!不知道这是为什么?请知道的大牛们说说。
至此暴破完毕。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!