手把手教你客户端脱壳,并跳验证说明!

[破解过程]

一.用PEID查看壳为:<实际不准的,大部分时候是准的!>
ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov [Overlay]
忘记了别忘了把客户端更新到最新版哦...

二.脱壳修复:

1.OD载入来到这里:

00401000 >  68 0190E007    push    07E09001
00401005    E8 01000000    call    0040100B
0040100A    C3              retn
0040100B    C3              retn
0040100C    AB              stos    dword ptr es:[edi]
0040100D    F5              cmc
0040100E    E5 5E          in      eax, 5E
00401010    8090 E577956D 7>adc    byte ptr [eax+6D9577E5], 70
00401017    1007            adc    byte ptr [edi], al
00401019    D0EB            shr    bl, 1
0040101B  - E3 A1          jecxz  short 00400FBE
0040101D    EA 87228177 A39>jmp    far 9AA3:77812287
00401024    2339            and    edi, dword ptr [ecx]
00401026    05 33C75734    add    eax, 3457C733
0040102B    CA 4497        retf    9744

看看对不对!
注:从OD选项-异常-保留内存以外其他都忽略

2.十多次SHIFT+F9以后到了这里

087839EC    3100            xor    dword ptr [eax], eax
087839EE    64:8F05 0000000>pop    dword ptr fs:[0]
087839F5    58              pop    eax
087839F6    833D B07E7808 0>cmp    dword ptr [8787EB0], 0
087839FD    74 14          je      short 08783A13
087839FF    6A 0C          push    0C
08783A01    B9 B07E7808    mov    ecx, 8787EB0
08783A06    8D45 F8        lea    eax, dword ptr [ebp-8]
08783A09    BA 04000000    mov    edx, 4
08783A0E    E8 2DD1FFFF    call    08780B40
08783A13    FF75 FC        push    dword ptr [ebp-4]
08783A16    FF75 F8        push    dword ptr [ebp-8]
08783A19    8B45 F4        mov    eax, dword ptr [ebp-C]
08783A1C    8338 00        cmp    dword ptr [eax], 0
08783A1F    74 02          je      short 08783A23
08783A21    FF30            push    dword ptr [eax]
08783A23    FF75 F0        push    dword ptr [ebp-10]
08783A26    FF75 EC        push    dword ptr [ebp-14]
08783A29    C3              retn

看堆载:
0013FF68  0013FFA4  这个是根据ESP定律记得好像是..哈哈!

也许不是..现在身体有点不好,所以头老是晕晕...
记不大清楚别怪哈哈!

在命令里输入:hr 13ff68

一次F9或几次F8到:

08795B1A  /EB 44          jmp    short 08795B60
08795B1C  |EB 01          jmp    short 08795B1F
08795B1E  |9A 51579CFC BF0>call    far 00BF:FC9C5751
08795B25  |0000            add    byte ptr [eax], al
08795B27  |00B9 00000000  add    byte ptr [ecx], bh
08795B2D  |F3:AA          rep    stos byte ptr es:[edi]
08795B2F  |9D              popfd
08795B30  |5F              pop    edi
08795B31  |59              pop    ecx
08795B32  |C3              retn

再F8到这里:

08795B60    03C3            add    eax, ebx                        ; main.00400000
08795B62    BB 2A010000    mov    ebx, 12A
08795B67    0BDB            or      ebx, ebx
08795B69    75 07          jnz    short 08795B72
08795B6B    894424 1C      mov    dword ptr [esp+1C], eax
08795B6F    61              popad
08795B70    50              push    eax
08795B71    C3              retn

看到这个就8成是对了

哈哈忘记了中间没跟进去直接来到了MAIN的代码了
选择查找-所有模块调用,可以看到API函数都出来了..别急了..
006E2E69    50              push    eax
006E2E6A    FF15 10916F00  call    dword ptr [6F9110]
006E2E70    E8 78720000    call    006EA0ED

3.OEP往上到了

006E2DDF    FF15 14916F00  call    dword ptr [6F9114]
006E2DE5    33D2            xor    edx, edx
006E2DE7    8AD4            mov    dl, ah
006E2DE9    8915 F842E007  mov    dword ptr [7E042F8], edx
006E2DEF    8BC8            mov    ecx, eax
006E2DF1    81E1 FF000000  and    ecx, 0FF
006E2DF7    890D F442E007  mov    dword ptr [7E042F4], ecx
006E2DFD    C1E1 08        shl    ecx, 8
006E2E00    03CA            add    ecx, edx
006E2E02    890D F042E007  mov    dword ptr [7E042F0], ecx
006E2E08    C1E8 10        shr    eax, 10
006E2E0B    A3 EC42E007    mov    dword ptr [7E042EC], eax

如果反汇编多了就知道这个就快到OEP了

006E2DB9    0000            add    byte ptr [eax], al //真OEP
006E2DBB    0000            add    byte ptr [eax], al
006E2DBD    0000            add    byte ptr [eax], al
006E2DBF    0000            add    byte ptr [eax], al
006E2DC1    0000            add    byte ptr [eax], al
006E2DC3    0000            add    byte ptr [eax], al
006E2DC5    0000            add    byte ptr [eax], al
006E2DC7    0000            add    byte ptr [eax], al
006E2DC9    0000            add    byte ptr [eax], al
006E2DCB    0000            add    byte ptr [eax], al
006E2DCD    0000            add    byte ptr [eax], al
006E2DCF    0000            add    byte ptr [eax], al
006E2DD1    0000            add    byte ptr [eax], al
006E2DD3    0000            add    byte ptr [eax], al
006E2DD5    0000            add    byte ptr [eax], al
006E2DD7    0000            add    byte ptr [eax], al
006E2DD9    0000            add    byte ptr [eax], al
006E2DDB    0000            add    byte ptr [eax], al
006E2DDD    0000            add    byte ptr [eax], al
006E2DDF    FF15 14916F00  call    dword ptr [6F9114] //伪OEP

记下:006E2DB9

4.看到代码全不见了别急我们去找了

重新载入
再来到这里按前面的步骤:
重新来的时候把硬件断点取掉


再次到:

087839EC    3100            xor    dword ptr [eax], eax
087839EE    64:8F05 0000000>pop    dword ptr fs:[0]
087839F5    58              pop    eax
087839F6    833D B07E7808 0>cmp    dword ptr [8787EB0], 0
087839FD    74 14          je      short 08783A13
087839FF    6A 0C          push    0C
08783A01    B9 B07E7808    mov    ecx, 8787EB0
08783A06    8D45 F8        lea    eax, dword ptr [ebp-8]
08783A09    BA 04000000    mov    edx, 4
08783A0E    E8 2DD1FFFF    call    08780B40
08783A13    FF75 FC        push    dword ptr [ebp-4]
08783A16    FF75 F8        push    dword ptr [ebp-8]
08783A19    8B45 F4        mov    eax, dword ptr [ebp-C]
08783A1C    8338 00        cmp    dword ptr [eax], 0
08783A1F    74 02          je      short 08783A23
08783A21    FF30            push    dword ptr [eax]
08783A23    FF75 F0        push    dword ptr [ebp-10]
08783A26    FF75 EC        push    dword ptr [ebp-14]
08783A29    C3              retn

转到-表达式 填00401000,我是怎么知道的哈哈

实际很简单的,菜单的查看-内存.就会看到:

Memory map, 条目 27
地址=00401000  //这个就是地址
大小=002F8000 (3112960.)
属主=main    00400000
区段=
包含=代码  //看到这里了吗代码段
类型=Imag 01001002
访问=R
初始访问=RWE

现在明白了吧

忽然记得我好像写过脱文,就在论坛,第二遍了...倒!!!!
希望这次大家都学会...

别再到处问人看脸色,做到不求人

5.DUMP程序
同样:查找-所有模块间调用
看到API都好了..那就用LORD把壳脱出来,也就是DUMP

文件为120MB左右,看看有错没!

重建PE就在LORD里..
别说找不到,安心等会.比较费劲的哦!
提示完成文件缩小到2%就对了,要不然重DUMP,重建!

6.找代码
按上面的说的输入这个 hr 13ff68,前面说过了

一路F7就找到了:
087957BD    55              push    ebp
087957C6    8BEC            mov    ebp, esp
087957C8    6A FF          push    -1
087957CA    68 80E86F00    push    6FE880
087957CF    68 FC6E6E00    push    6E6EFC  //找到这个就可以F8到入口了
087957D4    64:A1 00000000  mov    eax, dword ptr fs:[0]


                            PUSH EBP *
                            MOV EBP,ESP
                            PUSH -1
                            push    6FE880
                            push    6E6EFC
                            MOV EAX,DWORD PTR FS:[0] *
                            PUSH EAX  *
                            MOV DWORD PTR FS:[0],ESP *
                            SUB ESP,58 *
                            PUSH EBX *
                            PUSH ESI *
                            push edi*
                            MOV DWORD PTR SS:[EBP-18],ESP  *

整理为上面的代码.先放这里一会用.

7.修复IAT

打开IMPORTREC,不好意思,我的是英文版的实际有中文版的,前面工具里列错了.
先择程序MAIN.EXE
OEP里填:006E2DB9-00400000=002E2DB9
00400000可以看到在LOG里有IMAGE:00400000
点自动搜索提示正确
再点GET IMPORTS可以看到找到了.点show invalid(显示无效)好多吧,没关系点TRACE LEVEL1(汇编修复),

有插件的,选右键插件就可一看到里面有个1.22那个版本的再用插件修复,没了吧!没无效的了.实际还有怀

疑的.不管了.先放放!
再点修复DUMP文件,修复完成.可以用OD载入DUMP程序看看!

8.补充代码

006E2DB9 >/$  0000          add    byte ptr [eax], al
006E2DBB  |.  0000          add    byte ptr [eax], al
006E2DBD  |.  0000          add    byte ptr [eax], al
006E2DBF  |.  0000          add    byte ptr [eax], al
006E2DC1  |.  0000          add    byte ptr [eax], al
006E2DC3  |.  0000          add    byte ptr [eax], al
006E2DC5  |.  0000          add    byte ptr [eax], al
006E2DC7  |.  0000          add    byte ptr [eax], al
006E2DC9  |.  0000          add    byte ptr [eax], al
006E2DCB  |.  0000          add    byte ptr [eax], al
006E2DCD  |.  0000          add    byte ptr [eax], al
006E2DCF  |.  0000          add    byte ptr [eax], al
006E2DD1  |.  0000          add    byte ptr [eax], al
006E2DD3  |.  0000          add    byte ptr [eax], al
006E2DD5  |.  0000          add    byte ptr [eax], al
006E2DD7  |.  0000          add    byte ptr [eax], al
006E2DD9  |.  0000          add    byte ptr [eax], al
006E2DDB  |.  0000          add    byte ptr [eax], al
006E2DDD  |.  0000          add    byte ptr [eax], al
006E2DDF  |.  FF15 14916F00 call    dword ptr [<&kernel32.GetVersion>;  kernel32.GetVersion

看看是不是这里啊.往上看看,往下看看都对了吧.把上面列的那个代码加进去:
就是第6步里的
然后用右键的复制可执行文件-全部
就完成了脱壳.复制的时候注意了,6步了的代码刚够,多了或少了就是不对了.

三.去广告

把脱壳修复好的文件重命名为MAIN.EXE,进游戏看看都对了吧!哈哈!

好了,什么进去就掉了..没关系!等等先解决广告!

点查找-文本字符串,找到:
文本字串参考位于 main:, 条目 6604
地址=006F1920
反汇编=mov    edi, 00723744
文本字串=ASCII "HTTP\shell\open\command"



找到006F1920,再往上到:
006F18E0  /$  55            push    ebp //右键转到-最下面那个CALL XXXXXXX的
006F18E1  |.  8BEC          mov    ebp, esp
006F18E3  |.  6A FF        push    -1



004D20CA  |.  50            push    eax                              ; /Arg2
004D20CB  |.  68 F0C47000  push    0070C4F0                        ; |Arg1 = 0070C4F0

ASCII "www.muchina.com/pop.html"
004D20D0  |.  8D8D 60E7FFFF lea    ecx, dword ptr [ebp-18A0]        ; |
004D20D6  |.  E8 5583F5FF  call    0042A430                        ; \main.0042A430
004D20DB  |.  C745 FC 01000>mov    dword ptr [ebp-4], 1
004D20E2  |.  6A 01        push    1                                ; /Arg2 = 00000001
004D20E4  |.  8D8D 60E7FFFF lea    ecx, dword ptr [ebp-18A0]        ; |
004D20EA  |.  51            push    ecx                              ; |Arg1
004D20EB  |.  E8 F0F72100  call    006F18E0                        ; \main.006F18E0 

\\CALL到这里往上看,看到网站了吧!

没广告了不用跳了.这个版本这里取掉了.不用了实际就是JNZ,JZ,JMP的事
方法说一下,以后有广告就用这个办法

右键-查找-所有模块间调用,慢慢找了:
找到这个了
006E2EFE  |.  68 FF000000  push    0FF                              ; /ExitCode = FF
006E2F03  \.  FF15 18916F00 call    dword ptr [<&kernel32.ExitProces>; \ExitProcess
把这里
004D20D6  |.  E8 5583F5FF  call    0042A430                        ; \main.0042A430
改CALL 006E2EFE

试试
到登陆的窗口了
填jxm%^&#%^&
我的账号密码...错了多了!!
没出错吧..实际也没广告了..哈哈

四.跳验证

这个要做的是进去不掉线..哈哈现在到关键了哦.

点查找-文本字符串
填ResourceGuard
找到:

004B21BC  |.  83C4 04      add    esp, 4
004B21BF  |>  8A45 0F      mov    al, byte ptr [ebp+F]
004B21C2  |.  897D E8      mov    dword ptr [ebp-18], edi
004B21C5  |.  84C0          test    al, al
004B21C7  |.  897D EC      mov    dword ptr [ebp-14], edi
004B21CA  |.  897D F0      mov    dword ptr [ebp-10], edi
004B21CD  |.  74 37        je      short 004B2206                  //这里改JMP就可以跳过了
004B21CF  |.  B9 D0416F05  mov    ecx, 056F41D0
004B21D4  |.  E8 E7100200  call    004D32C0
004B21D9  |.  8BCE          mov    ecx, esi
004B21DB  |.  E8 B0381900  call    00645A90
004B21E0  |.  8B40 04      mov    eax, dword ptr [eax+4]
004B21E3  |.  3BC7          cmp    eax, edi
004B21E5  |.  75 05        jnz    short 004B21EC
004B21E7  |.  B8 2C156600  mov    eax, 0066152C
004B21EC  |>  8D95 C8F5FFFF lea    edx, dword ptr [ebp-A38]
004B21F2  |.  50            push    eax                              ; /Arg4
004B21F3  |.  52            push    edx                              ; |Arg3
004B21F4  |.  68 20006700  push    00670020                        ; |Arg2 = 00670020

ASCII "> ResourceGuard Error!!(%s-%s)",CR,LF,""
004B21F9  |.  68 D83B6F05  push    056F3BD8                        ; |Arg1 = 056F3BD8
004B21FE  |.  E8 0DADF6FF  call    0041CF10                        ; \dumped_.0041CF10
004B2203  |.  83C4 10      add    esp, 10
004B2206  |>  3BF7          cmp    esi, edi
004B2208  |.  74 10        je      short 004B221A

//这样进去就不掉了哦....

文章说完..大家学习...

本文出自 7j45 > 奇迹一条龙