首页
社区
课程
招聘
[原创]一个 crackme 的脱壳 破解
发表于: 2009-12-8 04:21 4645

[原创]一个 crackme 的脱壳 破解

2009-12-8 04:21
4645
为了多作贡献,我每天写一篇破文,尽量多写。
人生短暂啊。进入正题

这个crackme是 论坛上过去的一个crackme ,虽然有前辈写过,但是我的是独立完成的,我本想找最新

的crackme,但是进入crackme竟然分哪个版面能下载到,所以就作罢。这个有壳不知道什么壳。od载入

00405001 >  E8 03000000     call    00405009                                     ; 进入
00405006  - E9 EB045D45     jmp     459D54F6
0040500B    55              push    ebp
0040500C    C3              retn
0040500D    90              nop
0040500E    E8 01000000     call    00405014                                     ; 进去

来到这里 00405001这里,单步跑飞,就进入call,下面没有特殊情况,就是单步,不做赘述。

0040500E    E8 01000000     call    00405014                                     ; 进去
00405013    EB 5D           jmp     short 00405072
00405015    BB EDFFFFFF     mov     ebx, -13
0040501A    03DD            add     ebx, ebp
0040501C    81EB 00500000   sub     ebx, 5000
00405022    83BD 22040000 0>cmp     dword ptr [ebp+422], 0

0040500e 这里call 跑飞。进入call。

00405140  ^\EB EB           jmp     short 0040512D
00405142    8B06            mov     eax, dword ptr [esi]
00405144    EB 00           jmp     short 00405146
00405146    803E 00         cmp     byte ptr [esi], 0

405140这里 向后跳。

在405142  f4

0040515D  ^\EB CE           jmp     short 0040512D
0040515F    5B              pop     ebx
00405160    5E              pop     esi
00405161    59              pop     ecx

0040515d 向后跳

40515f   f4

004051A3  ^\0F85 1EFFFFFF   jnz     004050C7
004051A9    68 00800000     push    8000
004051AE    6A 00           push    0
004051B0    FFB5 56010000   push    dword ptr [ebp+156]

4051a3    向后跳
4051a9    f4

0040537F  ^\E9 32FFFFFF     jmp     004052B6
00405384    8906            mov     dword ptr [esi], eax                         ;

crackme6.004030B0
00405386    8946 0C         mov     dword ptr [esi+C], eax
00405389    8946 10         mov     dword ptr [esi+10], eax
0040538C    83C6 14         add     esi, 14

0040537F 向后跳
405384    f4

00405395  ^\E9 EBFEFFFF     jmp     00405285
0040539A    B8 CB110000     mov     eax, 11CB
0040539F    50              push    eax
004053A0    0385 22040000   add     eax, dword ptr [ebp+422]

40539a   f4

004053AF    61              popad
004053B0    75 08           jnz     short 004053BA
004053B2    B8 01000000     mov     eax, 1
004053B7    C2 0C00         retn    0C
004053BA    68 CB114000     push    004011CB

4053af   看到popad,有点像压缩壳的特征,4053b7 是不是会跳到oep呢? 我们看看

004011CB      64            db      64                                           ;  CHAR

'd'
004011CC      A1            db      A1
004011CD      01            db      01
004011CE      00            db      00
004011CF      00            db      00
004011D0      00            db      00
004011D1   >  55            push    ebp
004011D2   ?  89E5          mov     ebp, esp
004011D4   ?  6A FF         push    -1
004011D6   ?  68 1C204000   push    0040201C
004011DB      68            db      68                                           ;  CHAR

'h'
004011DC      9A            db      9A
004011DD      10            db      10
004011DE      40            db      40                                           ;  CHAR

'@'
004011DF      00            db      00
004011E0      50            db      50                                           ;  CHAR

'P'
004011E1      64            db      64                                           ;  CHAR

'd'
004011E2      89            db      89

看到一堆像屎的东西?我们右键 -》分析-》从模块删除分析。变成下面的样子

004011CB    64:A1 01000000  mov     eax, dword ptr fs:[1]
004011D1    55              push    ebp
004011D2    89E5            mov     ebp, esp
004011D4    6A FF           push    -1
004011D6    68 1C204000     push    0040201C
004011DB    68 9A104000     push    0040109A
004011E0    50              push    eax
004011E1    64:8925 0000000>mov     dword ptr fs:[0], esp
004011E8    83EC 10         sub     esp, 10
004011EB    53              push    ebx
004011EC    56              push    esi

dump出来
可以运行
peid查壳是LCC Win32 1.x -> Jacob Navia 这个语言。

发现运行注册无法显示错误提示,字符串查找也查不到什么,相关字符串查找也查不到什么。怎么办呢



看看GetDlgItemTextA 这个得到输入框字符的api可不可以。
运行 填写  wfwfwfwf  12345678
bp GetDlgItemTextA   回车

断在这里

77D6B05E >  8BFF            mov     edi, edi
77D6B060    55              push    ebp
77D6B061    8BEC            mov     ebp, esp
77D6B063    FF75 0C         push    dword ptr [ebp+C]
77D6B066    FF75 08         push    dword ptr [ebp+8]
77D6B069    E8 0093FBFF     call    GetDlgItem

这时点K这个按钮,就是堆栈按钮。
看到这里

Call stack of main thread
Address    Stack      Procedure / arguments                 Called from                  

Frame
0012F8F4   0040153E   <jmp.&user32.GetDlgItemTextA>         11CB.00401539                 

0012FA14
0012F8F8   00410BD4     hWnd = 00410BD4 ('TheBigMan's Crac
0012F8FC   00000065     ControlID = 65 (101.)
0012F900   0012F914     Buffer = 0012F914
0012F904   00000100     Count = 100 (256.)
0012FA18   0040162A   ? 11CB.00401509                       11CB.00401625
0012FA6C   77D18734   Maybe 11CB.004015A1                   user32.77D18731               

0012FA68
0012FA98   77D23CE4   ? user32.77D1870C                     user32.77D23CDF               

0012FA94
0012FB04   77D23B30   ? user32.77D23C2F                     user32.77D23B2B               

0012FB00
0012FB4C   77D3E599   user32.77D23AB1                       user32.77D3E594               

0012FB48
0012FB68   77D18734   Includes user32.77D3E599              user32.77D18731               

0012FB64
0012FB94   77D18816   ? user32.77D1870C                     user32.77D18811               

0012FB90
0012FB98   77D3E577   Includes user32.77D18816              user32.77D3E571               

0012FBF8

00401539是调用GetDlgItemTextA的,那么下面的00401625是不是一个检测的主程序部分呢?

我们双击 0012FA18   0040162A   ? 11CB.00401509                       11CB.00401625

这一行

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
00401641  |.  EB 3D         jmp     short 00401680
00401643  |>  8D05 0E264000 lea     eax, dword ptr [40260E]                      ;  Case 3

of switch 004015F1

看到这里然后断点于401602这里,因为这里是从上面跳下来的,先尝试一下,看看最近的这段程序是不

是可以爆破,当然如果不行就要再向上断点了。

经过几次测试,发现40162d跳入错误提示,那么不跳怎么样呢?
呵呵
  "SHiT ... you entered the correct serial!"
嗯就是这里,由于时间和精力,我就不分析算法了。感兴趣的可以跟入 401625这个call看看算法。
这个crackme是 论坛精华9上crackme文章的一个 ,报毒,我不知道怎么回事了。反正不是我放的,自己斟酌
完成

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 190
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
凡是看过熬夜的朋友,加我QQ190037386
2009-12-8 04:44
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不知道我还算不啊??
2009-12-8 10:17
0
雪    币: 190
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
呵呵。。。。。。。。。。
2009-12-8 10:34
0
游客
登录 | 注册 方可回帖
返回
//