首页
社区
课程
招聘
[原创]炒冷饭之穿山甲的传说1
发表于: 2019-3-14 23:21 19679

[原创]炒冷饭之穿山甲的传说1

2019-3-14 23:21
19679
【文章标题】: 炒冷饭之穿山甲的传说1
【文章作者】: eJamse
【目标程序】: GameJack5042
【加壳方式】: Armadillo
【下载地址】: 见附件
【使用工具】: OD PEID ExeinfoPE LordPE ImportRec ArmInline0.96
【操作平台】: Win7 sp1实环境(Win7下函数前记得要加库名,譬如kernel32.)
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
    这一篇是学习chasgone大侠《armadillo中code splicing的几种处理方法》的心得,所不同的是我这里是“一鱼三吃”。对穿山甲采用爆菊法不利的时候,就要拿出集武功之大成的玄门正宗功夫来对付它,以便双杀锁定胜局。谨以此文献给那些跟我一样摸爬滚打、颠簸在路上的新手们,并在此向chasgone大侠致敬!
    下面开始:
1、用PEID查壳为:
Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks
用ExeinfoPE查壳,显示为:
Armadillo 4.4x ~ 4.62..5.0~7.0  32bit  -  www.siliconrealms.com (60e8)
2、试运行,显示为单进程,有试用提示窗体;
3、OD载入目标GameJack.exe,忽略所有异常,隐藏OD,下HE kernel32.GetModuleHandleA硬件断点,并Shift+F9运行,两次弹窗点OK,断下来后看堆栈:
00129270   00916AFD  /CALL 到 GetModuleHandleA 来自 00916AF7
00129274   0092BD6C  \pModule = "kernel32.dll"
00129278   0092DDAC  ASCII "VirtualAlloc"
继续F9看堆栈:
00129270   00916B1A  /CALL 到 GetModuleHandleA 来自 00916B14
00129274   0092BD6C  \pModule = "kernel32.dll"
00129278   0092DDA0  ASCII "VirtualFree"
继续F9看堆栈:
00128FD4   00905A49  /CALL 到 GetModuleHandleA 来自 00905A43
00128FD8   00129124  \pModule = "kernel32.dll"
4、此时到达最佳返回时机,删除断点alt+f9返回,找到魔法跳
......
00905A63     FF15 B8629200         call dword ptr ds:[9262B8] ; kernel32.LoadLibraryA
......
00905A7A     0F84 2F010000         je 00905BAF;魔法跳
5、改魔法跳为jmp:
00905A7A    /E9 30010000           jmp 00905BAF
00905A7F    |90                    nop
跟随jmp往下找到:
00905BBE   ^\0F85 49FEFFFF         jnz 00905A0D
00905BC4     EB 03                 jmp short 00905BC9
点00905BC4这一行F4,再回头撤销魔法跳的更改;

方法一:先发制人----移花接木法
6、下断HE kernel32.VirtualAlloc并F9运行,断下后alt+f9返回,注意观察EAX的值,若为0则继续F9并alt+f9返回,当第一次出现EAX=03460000(不是定值),打开M镜像观察还没有03460000段,表示壳要开辟新空间03460000了,此时继续F9并alt+f9返回,马上观察M镜像已经有了03460000段,双击它显示全为0,说明火候到了,此时将EAX的值改为.adata段的起始值004F8000,删除断点
7、下断HE kernel32.SetProcessWorkingSetSize并F9运行,4次弹窗都点OK,先不取消断点,再下断点:HE kernel32.GetCurrentThreadId并F9运行,断下后alt+f9返回,
00325E54     50                    push eax
00325E55     FF75 FC               push dword ptr ss:[ebp-4]
00325E58     E8 05000000           call 00325E62
00325E5D     83C4 0C               add esp,0C
00325E60     C9                    leave
00325E61     C3                    retn
8、删除两个断点,单步F8直到返回在
003402C1     6A 00                 push 0
向下找到
0034039B     FFD1                  call ecx;段尾最近的CALL
0034039D     8945 FC               mov dword ptr ss:[ebp-4],eax
003403A0     8B45 FC               mov eax,dword ptr ss:[ebp-4]
003403A3     5F                    pop edi
003403A4     5E                    pop esi
003403A5     C9                    leave
003403A6     C3                    retn
9、点0034039B这一行F4,再F7跟入到达OEP=0046F114,此时用LordPE(修正大小)来Dump为dumped.exe,填入OEP:6F114,ImportREC自动方式获取API,剪切多余项,转存为dumped_.exe;
10、运行dumped_.exe提示不是有效的WIN32程序,用LordPE重建验证一下就OK了。

方法二:后发制人----女娲补天法
6、下断HE kernel32.SetProcessWorkingSetSize并F9运行,4次弹窗都点OK,先不取消断点,再下断点:HE kernel32.GetCurrentThreadId并F9运行,断下后alt+f9返回,
00325E54     50                    push eax
00325E55     FF75 FC               push dword ptr ss:[ebp-4]
00325E58     E8 05000000           call 00325E62
00325E5D     83C4 0C               add esp,0C
00325E60     C9                    leave
00325E61     C3                    retn
7、删除两个断点,单步F8直到返回在
003402C1     6A 00                 push 0
向下找到
0034039B     FFD1                  call ecx;段尾最近的CALL
0034039D     8945 FC               mov dword ptr ss:[ebp-4],eax
003403A0     8B45 FC               mov eax,dword ptr ss:[ebp-4]
003403A3     5F                    pop edi
003403A4     5E                    pop esi
003403A5     C9                    leave
003403A6     C3                    retn
8、点0034039B这一行F4,再F7跟入到达OEP=0046F114,现在对付code splicing:
查找GameJack.exe的进程为1C38,打开M镜像
a、找到GameJack.text段:
内存映射,项目 25
 地址=00402000
 大小=00078000 (491520.)
 宿主=GameJack 00400000
 区段=.text
 类型=Imag 01001002
 访问=R
 初始访问=RWE
b、找到code splicing段:(点类型排序,第一个类型为priv 访问=RWE的项目)
内存映射,项目 30
 地址=02C70000
 大小=00020000 (131072.)
 宿主=         02C70000 (自身)
 区段=
 类型=Priv 00021020
 访问=R E
 初始访问=RWE
打开ArmInline,填入相应数值(软件可以自动填,但要手动修正),点remove splicing,修补成功
9、此时用LordPE(修正大小)来Dump为dumped.exe,填入OEP:6F114,ImportREC自动方式获取API,剪切多余项,转存为dumped_.exe;
10、运行dumped_.exe提示不是有效的WIN32程序,用LordPE重建验证一下就OK了。

方法三:腹黑疗法----宗吾补锅法
重启OD一路狂奔,接方法二的8(注:9修复输入表、10重建PE的顺序可以交换。)
8、点0034039B这一行F4,再F7跟入到达OEP=0046F114,用LordPE(修正大小)来Dump为dumped.exe;
查找GameJack.exe的进程为1E24(重启OD进程已变),打开M镜像找到code splicing段:
(点类型排序,第一个类型为priv 访问=RWE的项目)
内存映射,项目 30
 地址=02EF0000(重启OD地址已变)
 大小=00020000 (131072.)
 宿主=         02EF0000 (自身)
 区段=
 类型=Priv 00021020
 访问=R E
 初始访问=RWE
用LordPE区域脱壳code splicing段(大小=00020000)为Region02EF0000-02F10000.dmp,再用PE编辑器(LordPE自带)打开dumped.exe,选区段,右键从磁盘载入Region02EF0000-02F10000.dmp添加了新段Region02,在该段右键编辑区段,虚拟地址改为02EF0000-00400000=2AF0000,确定退出记得保存;
9、填入OEP:6F114,ImportREC自动方式获取API,剪切多余项,转存为dumped_.exe;
10、运行dumped_.exe提示不是有效的WIN32程序,用LordPE重建验证一下就OK了。

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 2
支持
分享
最新回复 (22)
雪    币: 21449
活跃值: (62288)
能力值: (RANK:125 )
在线值:
发帖
回帖
粉丝
2
感谢分享!
2019-3-15 09:36
0
雪    币: 8635
活跃值: (4825)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jgs
3
穿山甲又热了
2019-3-15 10:06
0
雪    币: 1535
活跃值: (695)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
 顶一下
2019-3-15 13:51
0
雪    币: 576
活跃值: (1163)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
炒穿山甲
2019-3-15 14:20
0
雪    币: 13913
活跃值: (17022)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
6
所以说穿山甲到底说了什么??
2019-3-15 15:07
0
雪    币: 88
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
能否录制视频,谢谢
2019-3-15 20:13
0
雪    币: 88
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
Win7下函数前记得要加库名,譬如kernel32,是什么意思,不明白
2019-3-15 20:14
0
雪    币: 2545
活跃值: (208)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
9
fawcgzmg 能否录制视频,谢谢
 明天有空给你录一个。
2019-3-16 00:04
0
雪    币: 2545
活跃值: (208)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
10
fawcgzmg Win7下函数前记得要加库名,譬如kernel32,是什么意思,不明白
这个你先不管,等你碰到这个问题的时候,多试几次,绕不过时,再回想起这句话,就如同漆黑的夜空中一道闪电,你就明白了!毕竟成长也是一种快乐,我不能剥夺你的快乐!
2019-3-16 00:09
0
雪    币: 88
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢了
2019-3-16 05:56
0
雪    币: 2545
活跃值: (208)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
fawcgzmg 谢谢了
脱壳视频在这: https://pan.baidu.com/s/134O7yxaJ8wZfH0dnq7UqFQ 提取码: nkiw 状态不佳,将就看吧,壳还没开辟新空间时没指示正确,在最后又重复Dump,唉!
2019-3-16 23:53
0
雪    币: 88
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
非常感谢,辛苦了。我正好有个穿山甲壳的软件,一直未脱壳,我试一下
2019-3-17 13:56
0
雪    币: 88
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
为什么我下断点,shift+f9断不下来,程序直接运行了
上传的附件:
2019-3-17 20:59
0
雪    币: 2545
活跃值: (208)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
16
fawcgzmg 为什么我下断点,shift+f9断不下来,程序直接运行了
换个OD吧,你那个OD可能是改造过的,专门针对强壳的,具体原因需要大牛才能解释,我也是社会主义初级阶段。
2019-3-18 00:29
0
雪    币: 2545
活跃值: (208)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
17
重新录制视频,链接: https://pan.baidu.com/s/1tYIZ19LxY0fiCuNRWsofvg 提取码: u8gj 
2019-3-18 19:15
1
雪    币: 88
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢,辛苦了
2019-3-18 19:35
0
雪    币: 8084
活跃值: (1515)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
19
学习了,感谢
2019-3-25 09:42
0
雪    币: 498
活跃值: (2234)
能力值: ( LV12,RANK:356 )
在线值:
发帖
回帖
粉丝
20
谢谢楼主分享,可否能讲一下原理?干看着还是不理解
2019-4-23 23:03
0
雪    币: 498
活跃值: (2234)
能力值: ( LV12,RANK:356 )
在线值:
发帖
回帖
粉丝
21
谢谢楼主分享,可否能讲一下原理?干看着还是不理解
2019-4-23 23:04
0
雪    币: 1470
活跃值: (74)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
22
脱壳以后显示External exception 80000003
2021-7-6 22:29
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23
谢谢
2021-10-3 12:44
0
游客
登录 | 注册 方可回帖
返回
//