首页
社区
课程
招聘
[求助]手工脱穿山甲的壳
发表于: 2013-11-22 19:18 10834

[求助]手工脱穿山甲的壳

2013-11-22 19:18
10834
手工打造穿山甲脱壳适合初学者 闲话不多说!!
IDA,">目标程序:  gua8.0.0423.545.2
下载页面:  d22K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4q4I4K9s2S2%4k6#2)9J5k6h3y4G2L8b7`.`.
软件大小:  25 MB
软件类别:  国产软件 / 收费 /游戏外挂
应用平台:  Windows2000/XP/2000

软件介绍:华夏猎手
为避免杀毒软件误杀,在下载前最好先将杀软关闭,下载后将软件解压缩,要记住软件所在的目录,然后将gua.exe和gua.dll放入杀软的白名单;
使用时先打开游戏,在出现人物选择时再开外挂,即gua.exe,如果要开多个游戏就再这样执行一次操作,开一个游戏,开一个外挂;
猎手是绑定游戏帐号的,也就是只认游戏帐号,同一帐号在不同区都可以使用猎手;
人物进入游戏后会出现以下资料,游戏界面上也会有状态显示

【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教

一、先用PEID查壳

很清楚Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks

二、开始脱壳
       首先用OD载入  设置OllyDbg忽略所有异常选项。用IsDebug插件去掉OllyDBG的调试器标志。
00732379 >/$  55            push ebp    //载入OllyDBG后暂停在这
0073237A  |.  8BEC          mov ebp,esp
0073237C  |.  6A FF         push -0x1
0073237E  |.  68 78727500   push Gua.00757278
00732383  |.  68 601D7300   push Gua.00731D60                        ;  SE 处理程序安装
00732388  |.  64:A1 0000000>mov eax,dword ptr fs:[0]
0073238E  |.  50            push eax
0073238F  |.  64:8925 00000>mov dword ptr fs:[0],esp
00732396  |.  83EC 58       sub esp,0x58
00732399  |.  53            push ebx
0073239A  |.  56            push esi
0073239B  |.  57            push edi                                 ;  ntdll.7C930228
0073239C  |.  8965 E8       mov [local.6],esp
0073239F  |.  FF15 4C417500 call dword ptr ds:[<&KERNEL32.GetVersion>;  kernel32.GetVersion
007323A5  |.  33D2          xor edx,edx                              ;  ntdll.KiFastSystemCallRet
007323A7  |.  8AD4          mov dl,ah
007323A9  |.  8915 447C7500 mov dword ptr ds:[0x757C44],edx          ;  ntdll.KiFastSystemCallRet
007323AF  |.  8BC8          mov ecx,eax
007323B1  |.  81E1 FF000000 and ecx,0xFF
007323B7  |.  890D 407C7500 mov dword ptr ds:[0x757C40],ecx

下断:HE GetModuleHandleA+5
Shift+F9,注意观察中断时的堆栈

7C80B746    837D 08 00      cmp dword ptr ss:[ebp+0x8],0x0    //Shift+F9,断在这里
7C80B74A    74 18           je short kernel32.7C80B764
7C80B74C    FF75 08         push dword ptr ss:[ebp+0x8]
7C80B74F    E8 C0290000     call kernel32.7C80E114
7C80B754    85C0            test eax,eax
7C80B756    74 08           je short kernel32.7C80B760
7C80B758    FF70 04         push dword ptr ds:[eax+0x4]
7C80B75B    E8 7D2D0000     call kernel32.GetModuleHandleW
7C80B760    5D              pop ebp                                  ; 0012FFC0
7C80B761    C2 0400         retn 0x4
7C80B764    64:A1 18000000  mov eax,dword ptr fs:[0x18]
7C80B76A    8B40 30         mov eax,dword ptr ds:[eax+0x30]
7C80B76D    8B40 08         mov eax,dword ptr ds:[eax+0x8]
7C80B770  ^ EB EE           jmp short kernel32.7C80B760
7C80B772    90              nop

0012C27C  /0012C508               //N次F9后堆栈显示(我的是6次以后到了这里)
0012C280  |00F05331  返回到 00F05331 来自 kernel32.GetModuleHandleA
0012C284  |0012C3BC  ASCII "kernel32.dll"
0012C288  |00000002
0012C28C  |00F91A28
0012C290  |00000000
0012C294  |80000000

是时候该ALT+F9返回了
F2取消断点 ALT+F9返回 程序到这来:

00F0534A    50              push eax                                 ; kernel32.7C800000
00F0534B    FF15 B850F200   call dword ptr ds:[0xF250B8]             ; kernel32.LoadLibraryA
00F05351    8B0D 60D8F200   mov ecx,dword ptr ds:[0xF2D860]
00F05357    89040E          mov dword ptr ds:[esi+ecx],eax           ; kernel32.7C800000
00F0535A    A1 60D8F200     mov eax,dword ptr ds:[0xF2D860]
00F0535F    393C06          cmp dword ptr ds:[esi+eax],edi
00F05362    0F84 AD000000   je 00F05415                    //这就是我们要找的Magic Jump跳了
00F05368    33C9            xor ecx,ecx                              ; kernel32.7C80E6CB
00F0536A    8B03            mov eax,dword ptr ds:[ebx]
00F0536C    3938            cmp dword ptr ds:[eax],edi
00F0536E    74 06           je short 00F05376
00F05370    41              inc ecx                                  ; kernel32.7C80E6CB
00F05371    83C0 0C         add eax,0xC
00F05374  ^ EB F6           jmp short 00F0536C

00F05362    0F84 AD000000   je 00F05415  把JE改成JMP

下断:BP GetCurrentThreadId
也可以使用Second段内存断点大法走至OEP啦。  
Shift+F9 运行 继续N次(本人的3次)后堆栈显示:

0012F5A8   00F1CF2D  /CALL 到 GetCurrentThreadId 来自 00F1CF27
0012F5AC   0012FF2C
0012F5B0   00000000
0012F5B4   7FFD4000
0012F5B8   007294E9  返回到 Gua.007294E9 来自 00F1CEBA
0012F5BC   00757718  Gua.00757718

按ALT+F9返回 来到:
00F1CF2D    A3 F018F300     mov dword ptr ds:[0xF318F0],eax
00F1CF32    E8 2487FEFF     call 00F0565B
00F1CF37    6A 00           push 0x0
00F1CF39    E8 4BD9FEFF     call 00F0A889
00F1CF3E    59              pop ecx                                  ; 0012FF2C
00F1CF3F    E8 7D39FFFF     call 00F108C1
00F1CF44    8BF8            mov edi,eax
00F1CF46    A1 E018F300     mov eax,dword ptr ds:[0xF318E0]
00F1CF4B    8B48 74         mov ecx,dword ptr ds:[eax+0x74]
00F1CF4E    3348 5C         xor ecx,dword ptr ds:[eax+0x5C]
00F1CF51    3308            xor ecx,dword ptr ds:[eax]
00F1CF53    03F9            add edi,ecx
00F1CF55    8B0E            mov ecx,dword ptr ds:[esi]
00F1CF57    85C9            test ecx,ecx
00F1CF59    75 2E           jnz short 00F1CF89

接着我们就F8慢慢跟踪吧!!!!
当看到:
0F1CFAC    FFD7            call edi    //这里按F7进入 哈哈就是OEP了 接下来就可以脱壳了(*^__^*) 嘻嘻……
00F1CFAE    8BD8            mov ebx,eax

004018B8   /EB 10           jmp short Gua.004018CA     //传说中的OEP了 (哈哈终于找到你了,心中暗喜…………)
004018BA   |66:623A         bound di,dword ptr ds:[edx]
004018BD   |43              inc ebx
004018BE   |2B2B            sub ebp,dword ptr ds:[ebx]
004018C0   |48              dec eax                                  ; Gua.00754258
004018C1   |4F              dec edi                                  ; Gua.004018B8
004018C2   |4F              dec edi                                  ; Gua.004018B8
004018C3   |4B              dec ebx
004018C4   |90              nop
004018C5  -|E9 98006300     jmp 00A31962
004018CA   \A1 8B006300     mov eax,dword ptr ds:[0x63008B]
004018CF    C1E0 02         shl eax,0x2
004018D2    A3 8F006300     mov dword ptr ds:[0x63008F],eax          ; Gua.00754258
004018D7    52              push edx
004018D8    6A 00           push 0x0
004018DA    E8 BDCB2200     call Gua.0062E49C
004018DF    8BD0            mov edx,eax                              ; Gua.00754258

脱壳修复一系列的动作完成之后 最令人期待的时刻 确实失望 程序没反应 请大神们指点

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 47
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
可以给精华了,顺便问一下这是哪款游戏的挂
2013-11-22 20:51
0
雪    币: 145
活跃值: (717)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
今天看了一下天草的脱穿山甲的壳。好像有对输入表有处理,不知道您那是不是没有处理好。!
2013-12-28 17:51
0
雪    币: 172
活跃值: (172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
没有启动的原因有很多,壳没有脱净,有暗装,没有添加附加数据 等等,具体问题需要具体对待.
2013-12-28 19:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
哈哈 我可不敢奢求加精 只是来膜拜大大们的 期待大大们的指点
2014-1-8 09:00
0
雪    币: 340
活跃值: (207)
能力值: ( LV3,RANK:36 )
在线值:
发帖
回帖
粉丝
6
手工分析  分享就顶  感谢楼主
2014-1-30 14:40
0
雪    币: 98
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
大概有自校验
2014-2-17 21:33
0
游客
登录 | 注册 方可回帖
返回