首页
社区
课程
招聘
[邀请码已发]暴破Bigman's Crackme6
发表于: 2010-11-3 14:11 3277

[邀请码已发]暴破Bigman's Crackme6

2010-11-3 14:11
3277
【软件名称】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!不知道这是为什么?请知道的大牛们说说。
至此暴破完毕。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习一下!预祝楼主转正!
2010-11-4 09:49
0
游客
登录 | 注册 方可回帖
返回
//