首页
社区
课程
招聘
[求助]请教引入表增加DLL和函数的原理
发表于: 2007-12-6 14:43 4321

[求助]请教引入表增加DLL和函数的原理

2007-12-6 14:43
4321
最近做了一PE 编辑的简单工具,想实现引入表的任意编辑,包括增加DLL和增加函数。
目前的做法:
  1.新增加一个section, 将新组建的引入表保存到这个section中。
  2.修改目录表中的关于引入表的目录项的VirtualAddress和Size,以指向新section.

  这有一个问题,如何让这些引入函数的调用者都知道IAT已经挪地方了呢?

  现在的想法有2种方法:
  方法A:  将原引入表所在section增加Execute属性, 然后将其IAT部分该为JMP XXXXXXX,从而实现新旧IAT的关联。  然而FirstThunk数组每个元素只有4个字节, 而有些JMP需要5个字节。
又考虑用IAT附近的原引入表中已无用的空间做一个中间跳板。
   
  方法B: 增加一个TLS Callback函数, 并且放在Callback数组的第一个位置。用这个函数去修改原引入表的IAT部分,使其值变为新引入表中的值。

  方法A可能在一些特殊情况下因空闲空间不足而无法达成目标。
方法B基本上适用于所有程序,但是让人产生一种不地道的感觉,因为不是静态的修改,而且保存时需额外保存原IAT中元素与新IAT的对应关系。

  Stud_PE可以增加新的DLL和函数,不知道是怎么个做法。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
老前辈的PE格式译文1.9版以前看过了。
Microsoft的那个V8.0的文档前几天也打印出来放我枕头边上了。
真是对不住这两份资料, 看了这么多天还是一直没有找到理想的解决方案。
难怪看雪论坛里到处都讲引入表是关键。
2007-12-6 14:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
还望有人指引一下思考方向。
2007-12-6 23:42
0
雪    币: 47147
活跃值: (20470)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
原来的IAT所在位置你可以不要变动。如果要变动,我个人猜是扫描整个代码段,将调用IAT处的指令修改成新的指令。ImportREC有这功能,不过一般不常用它。
2007-12-7 09:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我的看法是这样的,首先是搜索原引入表所对应的section,比如说.rdata里面,然后看看这个,rdata里面是否有足够的0,如果没有的话,那么就要添加一个新的section了,并且要改写OriginalFirstThunk和FirstThunk
2007-12-7 10:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
>>我个人猜是扫描整个代码段,将调用IAT处的指令修改成新的指令

老大几句话就把我想表达而没表达出来的内容给挑明了,谢谢。
看来下一个重点阅读目标应该是Intel指令集(卷二 ?  ) 。
2007-12-7 21:33
0
游客
登录 | 注册 方可回帖
返回
//