手把手教你客户端脱壳,并跳验证说明!
[破解过程]
一.用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
//这样进去就不掉了哦....
文章说完..大家学习...