首页
社区
课程
招聘
[求助]问个很平常的问题--ImportPEC的脱壳原理
发表于: 2009-11-5 21:28 5501

[求助]问个很平常的问题--ImportPEC的脱壳原理

2009-11-5 21:28
5501
Import REConstructor可以从杂乱的IAT中重建一个新的Import表(例如加壳软件等),它可以重建Import表的描述符、IAT和所有的ASCII函数名。
在运行Import REConstructor之前,必须满足如下条件:
1) 目标文件己完全被Dump到另一文件;
2) 目标文件必须正在运行中;
3) 事先要找到真正的入口点(OEP);
4) 最好加载IceDump,这样建立的输入表较少存在跨平台的问题。

(5)在左下角填上应用程序的真正入口点偏移(OEP);
关于这个OEP,我真是百思不得其解,为了重新得到一个Import表要这个OEP信息干吗?
Import表不是只与PE头相关么,仔细想了一下,OEP只可能是提示要对code段进行反汇编,也就是说ImpREC从OEP的代码段开始依次扫描碰到了哪些指令,一旦发现有call指令并没有call本代码段中的地址,而是其他段的地址,便可以得出这是在call一个API函数,一旦发现代码段中有很多call指令都在call一个地方,这是我们可以猜测这个地方可能是IAT,但是因为没有Import表的信息指向这里,系统不承认这里是IAT,我们只有重建一个import表,让其引出指针指向这块IAT,系统在装载的时候才会往这里填充从dll中引入的函数地址。但是现在问题是,如何确定某次对这里的call究竟是对哪个API的调用,从而构建相应函数的import表?这么做起来也未免太复杂了吧
    不晓得我的猜测是否有一定道理还是dump的文件中提示了更多可用的信息,可以更快捷地构建该Import表。希望哪位懂得该ImportREC建表原理的同志跟我介绍一下,表示感谢!
    另外,若能给我提示一下哪儿有ImportREC源代码的下载地址更好。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 440
活跃值: (87)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
2
我也想知道:IAT  auto search 的原理。
这个原理肯定跟程序的入口点有关系。。。
2009-11-5 22:32
0
雪    币: 334
活跃值: (78)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
原理就是oep一般都有api的调用, 如果没有, call进去的代码也会有, 所以事实上是一个反汇编与分析的过程

只要把 call 进去的地址与 现有加载的模块的 export 地址比较就可以知道他是不是api调用了
2009-11-5 22:50
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼上说得不是很清楚,还是没搞懂。
当应用程序调用API时,实际上时在call IAT上的地址,因为系统初始化时并没有在这块IAT上填写API真正的地址,所以我们一call下去就会call到错误的地址,此时就弹出了一个报错警告,此时IAT上都是空白的,我们把空白的表项跟导出表中的函数地址比较吗?
2009-11-5 23:35
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
估计是我忘记了dump之前的程序是可运行的,也就是此时的IAT表中的函数地址已经被恢复到一个正确的状态,dump出来的IAT是直接可用的。这里我又有问题,既然是正确的状态,程序为什么又不能运行。那个出错警告到底是怎么产生的呢?
2009-11-5 23:46
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
搞明白啦, ImportPEC是从一个功能正常的程序中提取出一个完整的import表(在这里要想得到一切想要的东西都非难事), 然后用这块数据去修复任何一个有被破坏的文件. 多谢各位了.
2010-5-3 09:23
0
游客
登录 | 注册 方可回帖
返回
//