Board logo

标题: 3ast破解教程--2 [打印本页]

作者: chowfaye    时间: 2008-9-29 10:05     标题: 3ast破解教程--2

自己做得语音教程,不是太好,还请见谅了。
以下是密码:
www.3ast.com.cn
希望大家多支持下我们的站。

                                                                    
                                                                                                                                                                        ★★★★★★★★★★★★★★★★
                                                                                  破 解 系 列
                                            3AST
                                                                                   WWW.3AST.COM.CN
                                                         ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
                                          
                       
   【文章标题】: 简单爆破与文件补丁
   【文章作者】: DoubleW
   【使用工具】: PEID,OD,Keymaker
   【软件信息】: 大小:33,818 字节   MD5:28808f0caf2b18dfe9f0f86d19df4f77
   【下载地址】: 已打包。
   【加壳方式】: PEDiminisher 0.1 -> Teraphy
   【保护方式】: 用户名+序列号
   【编写语言】: Microsoft Visual C++ 6.0
   【操作平台】: WinXP SP3
   【录制环境】:1280*800
   【作者声明】: 仅供技术交流,请勿用于非法目的!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   【详细过程】
    今天主要目标是一个CrackMe,是用户名+注册码的验证方式,我们的目的就是通过修改软件的代码,以达到破解的目的。
    然后是通过Keymaker来制作文件的破解补丁。
   
    首先看下我们的目标,很简单的一个CrackMe,下面我们正式开始,首先查壳。
    PEDiminisher 0.1 -> Teraphy
    是一款很好脱的壳,我们手动脱壳,用ESP定律足以搞定。
    OD载入后停在如下位置:

0040D000 >  53              push    ebx                              ; (初始 cpu 选择)
0040D001    51              push    ecx                              ; 这个位置,看左边的寄存器窗口
0040D002    52              push    edx                              ; ntdll.KiFastSystemCallRet
0040D003    56              push    esi
0040D004    57              push    edi                              ; ntdll.7C930208
0040D005    55              push    ebp
0040D006    E8 00000000     call    PEDimini.0040D00B
0040D00B    5D              pop     ebp                              ; 7FFD8000
0040D00C    8BD5            mov     edx, ebp
0040D00E    81ED A2304000   sub     ebp, PEDimini.004030A2
0040D014    2B95 91334000   sub     edx, ss:[ebp+403391]
0040D01A    81EA 0B000000   sub     edx, 0B
0040D020    8995 9A334000   mov     ss:[ebp+40339A], edx             ; ntdll.KiFastSystemCallRet


   以下是寄存器窗口:

EAX 00000000
ECX 0013FFB0
EDX 7C92E4F4 ntdll.KiFastSystemCallRet
EBX 7FFD8000
ESP 0013FFC0                                                          ;这里已经变红了,
EBP 0013FFF0
ESI FFFFFFFF
EDI 7C930208 ntdll.7C930208
EIP 0040D001 PEDimini.0040D001
C 1  ES 0023 32位 0(FFFFFFFF)
P 0  CS 001B 32位 0(FFFFFFFF)
A 0  SS 0023 32位 0(FFFFFFFF)
Z 0  DS 0023 32位 0(FFFFFFFF)
S 1  FS 003B 32位 7FFDF000(FFF)
T 0  GS 0000 NULL


   命令窗口下命令:

   hr 0013FFC0
   
   然后我们回车。
   
   紧接着F9运行,停在以下位置:

0040D093  - FFE0            jmp     near eax                         ; PEDimini.00403922             //停在这里。
0040D095    8B95 9A334000   mov     edx, ss:[ebp+40339A]
0040D09B    8BB5 F6334000   mov     esi, ss:[ebp+4033F6]
0040D0A1    33FF            xor     edi, edi                         ; ntdll.7C930208
0040D0A3    03F2            add     esi, edx                         ; ntdll.KiFastSystemCallRet
0040D0A5    03FA            add     edi, edx                         ; ntdll.KiFastSystemCallRet
0040D0A7    8B46 0C         mov     eax, ds:[esi+C]
0040D0AA    85C0            test    eax, eax                         ; PEDimini.00403922
0040D0AC    74 7F           je      short PEDimini.0040D12D
0040D0AE    03C2            add     eax, edx                         ; ntdll.KiFastSystemCallRet
0040D0B0    8BD8            mov     ebx, eax                         ; PEDimini.00403922
0040D0B2    50              push    eax                              ; PEDimini.00403922

其实以上的  jmp     near eax   就是要跳到OEP了,我们在一次 F8 就可以到达OEP了。

00403922    55              push    ebp                              ; 这里就是OEP了。
00403923    8BEC            mov     ebp, esp
00403925    6A FF           push    -1
00403927    68 38814000     push    PEDimini.00408138
0040392C    68 845C4000     push    PEDimini.00405C84
00403931    64:A1 00000000  mov     eax, fs:[0]
00403937    50              push    eax                              ; PEDimini.00403922
00403938    64:8925 0000000>mov     fs:[0], esp
0040393F    83EC 58         sub     esp, 58
00403942    53              push    ebx
00403943    56              push    esi
00403944    57              push    edi                              ; ntdll.7C930208
00403945    8965 E8         mov     ss:[ebp-18], esp
00403948    FF15 34804000   call    near ds:[408034]                 ; kernel32.GetVersion

   脱壳,
   这次用loadPE转储,但是无法运行,提示错误,我们用ImportREC修复。
   好了,可以运行了。
   查壳,Microsoft Visual C++ 6.0。



   脱完壳之后,我们来爆破。

   首先还是找软件的错误提示
   “注册码错误,继续加油。”

   OD载入,查找字符串。双击来到以下位置:


00402E80   .  68 00010000   push    100                              ; /Count = 100 (256.)
00402E85   .  51            push    ecx                              ; |Buffer = 0013FFB0
00402E86   .  68 E8030000   push    3E8                              ; |ControlID = 3E8 (1000.)
00402E8B   .  56            push    esi                              ; |hWnd = FFFFFFFF
00402E8C   .  FFD3          call    near ebx                         ; \GetDlgItemTextA
00402E8E   .  8DBD F0FEFFFF lea     edi, ss:[ebp-110]
00402E94   .  83C9 FF       or      ecx, FFFFFFFF
00402E97   .  33C0          xor     eax, eax
00402E99   .  F2:AE         repne   scas byte ptr es:[edi]
00402E9B   .  F7D1          not     ecx
00402E9D   .  49            dec     ecx
00402E9E   .  83F9 01       cmp     ecx, 1
00402EA1   .  73 26         jnb     short dumped_.00402EC9
00402EA3   .  6A 40         push    40                               ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00402EA5   .  68 D4904000   push    dumped_.004090D4                 ; |注册提示
00402EAA   .  68 BC904000   push    dumped_.004090BC                 ; |用户名不能为空请输入!
00402EAF   .  56            push    esi                              ; |hOwner = FFFFFFFF
00402EB0   .  FF15 B4804000 call    near ds:[<&user32.MessageBoxA>]  ; \MessageBoxA
00402EB6   .  33C0          xor     eax, eax
00402EB8   .  8B4D F4       mov     ecx, ss:[ebp-C]                  ;  kernel32.7C839AC0
00402EBB   .  64:890D 00000>mov     fs:[0], ecx
00402EC2   .  5F            pop     edi                              ;  kernel32.7C817067
00402EC3   .  5E            pop     esi                              ;  kernel32.7C817067
00402EC4   .  5B            pop     ebx                              ;  kernel32.7C817067
00402EC5   .  8BE5          mov     esp, ebp
00402EC7   .  5D            pop     ebp                              ;  kernel32.7C817067
00402EC8   .  C3            retn
00402EC9   >  8D95 ECF8FFFF lea     edx, ss:[ebp-714]
00402ECF   .  68 00040000   push    400
00402ED4   .  52            push    edx                              ;  ntdll.KiFastSystemCallRet
00402ED5   .  68 07040000   push    407
00402EDA   .  56            push    esi
00402EDB   .  FFD3          call    near ebx
00402EDD   .  8DBD ECF8FFFF lea     edi, ss:[ebp-714]
00402EE3   .  83C9 FF       or      ecx, FFFFFFFF
00402EE6   .  33C0          xor     eax, eax
00402EE8   .  F2:AE         repne   scas byte ptr es:[edi]
00402EEA   .  F7D1          not     ecx
00402EEC   .  49            dec     ecx
00402EED   .  83F9 01       cmp     ecx, 1
00402EF0   .  73 26         jnb     short dumped_.00402F18
00402EF2   .  6A 40         push    40                               ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00402EF4   .  68 D4904000   push    dumped_.004090D4                 ; |注册提示
00402EF9   .  68 A4904000   push    dumped_.004090A4                 ; |注册码不能为空请输入!
00402EFE   .  56            push    esi                              ; |hOwner = FFFFFFFF
00402EFF   .  FF15 B4804000 call    near ds:[<&user32.MessageBoxA>]  ; \MessageBoxA
00402F05   .  33C0          xor     eax, eax
00402F07   .  8B4D F4       mov     ecx, ss:[ebp-C]                  ;  kernel32.7C839AC0
00402F0A   .  64:890D 00000>mov     fs:[0], ecx
00402F11   .  5F            pop     edi                              ;  kernel32.7C817067
00402F12   .  5E            pop     esi                              ;  kernel32.7C817067
00402F13   .  5B            pop     ebx                              ;  kernel32.7C817067
00402F14   .  8BE5          mov     esp, ebp
00402F16   .  5D            pop     ebp                              ;  kernel32.7C817067
00402F17   .  C3            retn
00402F18   >  8D85 F0FDFFFF lea     eax, ss:[ebp-210]
00402F1E   .  8D8D ECFCFFFF lea     ecx, ss:[ebp-314]
00402F24   .  50            push    eax                              ; /Arg4 = 00000000
00402F25   .  51            push    ecx                              ; |Arg3 = 0013FFB0
00402F26   .  8D95 ECF8FFFF lea     edx, ss:[ebp-714]                ; |
00402F2C   .  68 9C904000   push    dumped_.0040909C                 ; |10001
00402F31   .  52            push    edx                              ; |Arg1 = 7C92E4F4
00402F32   .  C745 FC 00000>mov     dword ptr ss:[ebp-4], 0          ; |
00402F39   .  E8 82FCFFFF   call    dumped_.00402BC0                 ; \dumped_.00402BC0
00402F3E   .  85C0          test    eax, eax
00402F40   .  75 26         jnz     short dumped_.00402F68
00402F42   .  6A 40         push    40
00402F44   .  68 D4904000   push    dumped_.004090D4                 ;  注册提示
00402F49   >  68 84904000   push    dumped_.00409084                 ; |注册码错误,继续加油!
00402F4E   .  56            push    esi                              ; |hOwner = FFFFFFFF
00402F4F   .  FF15 B4804000 call    near ds:[<&user32.MessageBoxA>]  ; \MessageBoxA
00402F55   .  33C0          xor     eax, eax
00402F57   .  8B4D F4       mov     ecx, ss:[ebp-C]                  ;  kernel32.7C839AC0
00402F5A   .  64:890D 00000>mov     fs:[0], ecx
00402F61   .  5F            pop     edi                              ;  kernel32.7C817067
00402F62   .  5E            pop     esi                              ;  kernel32.7C817067
00402F63   .  5B            pop     ebx                              ;  kernel32.7C817067
00402F64   .  8BE5          mov     esp, ebp
00402F66   .  5D            pop     ebp                              ;  kernel32.7C817067
00402F67   .  C3            retn
00402F68   >  8D85 F0FDFFFF lea     eax, ss:[ebp-210]
00402F6E   .  8D8D F0FEFFFF lea     ecx, ss:[ebp-110]
00402F74   .  50            push    eax
00402F75   .  51            push    ecx
00402F76   .  E8 65FDFFFF   call    dumped_.00402CE0
00402F7B   .  83C4 08       add     esp, 8
00402F7E   .  83F8 01       cmp     eax, 1
00402F81   .  6A 40         push    40                               ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00402F83   .  68 D4904000   push    dumped_.004090D4                 ; |注册提示
00402F88   .^ 75 BF         jnz     short dumped_.00402F49           ; |我们只需将这里的jnz     short dumped_.00402F49改为jz     short dumped_.00402F49就可爆破
00402F8A   .  68 70904000   push    dumped_.00409070                 ; |恭喜你,注册码正确!
00402F8F   .  56            push    esi                              ; |hOwner = FFFFFFFF
00402F90   .  FF15 B4804000 call    near ds:[<&user32.MessageBoxA>]  ; \MessageBoxA
00402F96   .  33C0          xor     eax, eax
00402F98   .  8B4D F4       mov     ecx, ss:[ebp-C]                  ;  kernel32.7C839AC0
00402F9B   .  64:890D 00000>mov     fs:[0], ecx
00402FA2   .  5F            pop     edi                              ;  kernel32.7C817067
00402FA3   .  5E            pop     esi                              ;  kernel32.7C817067
00402FA4   .  5B            pop     ebx                              ;  kernel32.7C817067
00402FA5   .  8BE5          mov     esp, ebp
00402FA7   .  5D            pop     ebp                              ;  kernel32.7C817067
00402FA8   .  C3            retn
00402FA9   .  8B55 08       mov     edx, ss:[ebp+8]                  ;  dumped_.<模块入口点>
00402FAC   .  6A 40         push    40                               ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00402FAE   .  68 D4904000   push    dumped_.004090D4                 ; |注册提示
00402FB3   .  68 84904000   push    dumped_.00409084                 ; |注册码错误,继续加油!
00402FB8   .  52            push    edx                              ; |hOwner = 7C92E4F4
00402FB9   .  FF15 B4804000 call    near ds:[<&user32.MessageBoxA>]  ; \MessageBoxA
00402FBF   .  B8 C52F4000   mov     eax, dumped_.00402FC5
00402FC4   .  C3            retn

   我们将:


00402F81   .  6A 40         push    40                               ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00402F83   .  68 D4904000   push    dumped_.004090D4                 ; |注册提示
00402F88   .^ 75 BF         jnz     short dumped_.00402F49           ; |我们只需将这里的jnz     short dumped_.00402F49改为jz     short dumped_.00402F49就可爆破
00402F8A   .  68 70904000   push    dumped_.00409070                 ; |恭喜你,注册码正确!
00402F8F   .  56            push    esi                              ; |hOwner = FFFFFFFF
00402F90   .  FF15 B4804000 call    near ds:[<&user32.MessageBoxA>]  ; \MessageBoxA


   只要这么简单的修改就可用达到爆破的目的。

   下面我们开始制作文件破解补丁。一点技术含量都没有,就不细说了。


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   【经验总结】

   主要是能够看懂软件的注册流程。找准修改的地方,当然有些软件需要修改好几处。

   如果还有什么不太明白的地方,可以到

        http://www.3ast.com.cm

    来找我,我们一起探讨。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   【版权声明】: 转载请注明出处,并保证文章的完整性!
作者: chowfaye    时间: 2008-9-29 10:11

教程我就不上传了,又需要的我传给他
作者: chowfaye    时间: 2008-9-29 10:22

纳米盘
http下载地址:
http://www.namipan.com/d/%E7%A0% ... 6331a6366d64f408200




欢迎光临 【3.A.S.T】网络安全爱好者 (http://3ast.com/) Powered by Discuz! 7.2