首页
社区
课程
招聘
[原创]脱壳步骤,修复IAT的原因及修复IAT的完整步骤
2018-5-23 16:01 22423

[原创]脱壳步骤,修复IAT的原因及修复IAT的完整步骤

2018-5-23 16:01
22423
我们已经知道如何定位到OEP了,下一步就是如何脱壳并修复啦。脱壳的步骤是简单的,固定的,而之后如何修复才是我们面临的真正挑战。本问将展示脱壳和修复的完整过程。
调试器:OllyDbg
环境:XP SP3 虚拟机

(一)如何使用LordPE脱壳

首先,修复和脱壳最好都在XP系统的虚拟机里进行。
如何使用LordPE脱壳呢?首先得找到OEP,先让EIP位于OEP。首先用ESP定律定位到OEP。

看上去一点都不像OEP是吧,但是这确实是,之所以会显示字节码,是因为OD误将真正的程序代码分析成数据了。所以显示成一个一个单独的数据
我们只要删除模块分析,就能得到正确的代码,如下图所示。

打开LordPE,打开我们选中目标进程,右键-修正镜像大小,接着右键,点击完整转存(完全脱壳),就脱壳完毕了。


(二)修复IAT的原因

但是这就结束了么?并没有。当我们再次打开它时,它弹出了错误并且退出。显然它无法直接运行。

转存后的程序是无法直接运行的,载入后,到达OEP之前的异常。如图所示。

载入dump后的程序然后F9运行,在执行到 OEP之前就产生了异常。
当异常发生后,手动定位到OEP,看看IAT是否已经填充完毕。下图中有一行
call 00401506 我们就来到401506.如图所示

看得出来,的确是能指向函数本身的。但是我们在数据窗口跟随一下函数首地址,右键,此时已经没有“ 查看可执行文件 ”这个选项了。

换言之没法查看文件偏移了。此时再用winhex定位到上次的文件偏移。很奇怪它指向的已经不是之前那个数了。
我们再看看字符串还在不在。如果手动定位到原来储存字符的地方(详情阅读上一篇文章),也不在了。因为原来的程序在获取完IAT后就把字符删掉了,文件偏移里的字符串指针没有了,就没法自动获取地址了。所以必须脱壳之后必须把IAT修复好 

(三)手动修复IAT

开始修复IAT。
第一步还是先找到OEP,到达OEP后,OD和进程本身不能关掉。脱壳过程中不能把程序关掉。
操作过程和之前相同,先选进程,右键,完整转存,脱壳完毕。
双击脱壳后的程序,无法打开。
第二步:使用importrec修复IAT。不是选择dump后的程序,而是到达OEP的加壳程序。为什么不选择脱壳后的程序呢?
因为我们需要提取源文件里的信息,放到脱壳后的文件里。然后放到脱壳后的程序 附件进程后,里面有个选项

如何使用填写这几个数字呢:
第一个选项是OEP栏:这里填写OEP的相对偏移地址就行
第二个选项是RVA:虚拟内存地址,这里填IAT的起始位置
大小:填写导入表大小,需要用IAT的末地址减去首地址。哪个是首地址,哪个是尾部地址?
有一个小技巧,能帮我们快速定位到IAT的开始和末尾。怎么做呢,在数据窗口右击-长型-地址,那么它的起始位置
就非常直观了;如图所示。所以得到

OEP:10000
RVA:3184
大小:尾部一定得是00000000才行。而且得是最后一个00000000。
点击获取导入表(get import),出现了如图所示的界面。

点击修正转存(fix dump),软件让选择一个程序,我们选脱完壳后的程序,之后会生产一个被修复后的程序。至此IAT修复完成。
注意:如果该程序打不开,就用PETools载入这个文件,选择PE重建,如图所示

也就是说经历了三个步骤:修复IAT,转存到脱壳后文件,修复PE头。
以上步骤是修复IAT的基本步骤。但这仅仅是最基本的步骤,如果都这么简单,脱壳就没什么意思了。

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2018-5-29 15:45 被r0Cat编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (18)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
PushAutism 2018-5-24 02:58
2
0
LL  有修复IAT这方面的教材吗?
雪    币: 2050
活跃值: (2805)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
xiaohang 3 2018-5-25 11:21
3
0
设置优秀以作鼓励
雪    币: 180
活跃值: (4804)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wsc 2018-5-25 14:43
4
0
感谢分享
雪    币: 8715
活跃值: (8619)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
r0Cat 7 2018-5-25 14:49
5
0
PushAutism LL 有修复IAT这方面的教材吗?[em_20]
我感觉还是得通过多实战积累经验呢
雪    币: 8715
活跃值: (8619)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
r0Cat 7 2018-5-25 14:49
6
0
xiaohang 设置优秀以作鼓励
感谢版主
雪    币: 8715
活跃值: (8619)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
r0Cat 7 2018-5-25 14:50
7
0
wsc 感谢分享
感谢感谢
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
聖blue 2018-5-25 21:26
8
0
雪    币: 2694
活跃值: (80)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
BlackJZero 2018-5-26 20:44
9
0
雪    币: 171
活跃值: (474)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
Lthis 1 2018-5-27 20:07
10
0
额,很基础,可以的。
遗漏的一点,楼主可以说一下修复镜像大小的意义,另外,可以脱一下dll程序的壳子,对比一下两者的区别。
雪    币: 8715
活跃值: (8619)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
r0Cat 7 2018-5-29 20:01
11
0
Lthis 额,很基础,可以的。 遗漏的一点,楼主可以说一下修复镜像大小的意义,另外,可以脱一下dll程序的壳子,对比一下两者的区别。
很好的建议啊
雪    币: 13935
活跃值: (1215)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
严启真 2018-6-2 21:53
12
0
写得很好
雪    币: 1014
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_fades 2018-6-3 00:24
13
0
突然想到IAT重定向。。。
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
喂 那谁 2018-6-6 02:43
14
0
求能破加密狗的老师。付费      Q:646716529
雪    币: 2694
活跃值: (80)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
BlackJZero 2018-6-15 09:08
15
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小伙的bug 2018-6-18 21:09
16
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yxfyjc 2018-8-6 18:28
17
0
感谢老师分享!
雪    币: 4065
活跃值: (5883)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
fjqisba 2018-10-28 00:19
18
0
脱壳到底是难还是简单呢
雪    币: 168
活跃值: (823)
能力值: ( LV10,RANK:173 )
在线值:
发帖
回帖
粉丝
kaoyange 1 2020-2-21 15:12
19
0
如果换成win7及以上系统,恐怕就没这么简单了
游客
登录 | 注册 方可回帖
返回