-
-
[求助]请教引入表增加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期)