在pe文件上添加执行代码

PE文件上添加代码所必须的几个步骤:

(1)将添加的代码写到目标PE文件中,这段代码既可以插入原代码所处的节空隙中(由于每个节保存在文件中时是按照FileAlignMenu的值对齐的,所以节的最后必然会有一引动空余的空间),也可以通过添加一个新的节来附在原文件的尾部。

(2)PE文件原来的入口指针必须保存在添加的代码中,这样,这段代码执行完毕以后可以转移到原始文件执行。

(3)PE文件中的入口指针需要被修改,指向新添加代码的入口地址。

(4)PE文件头中的一些值需要根据情况做相应的修正,以符合修改后的PE文件的情一口气。

另外,有一些操作是应该避免的,因为它们是无法实现的,或者实现它们的复杂性远远超过它们带来的好处,这些操作是:

(1)如果节的空隙不足以插入代码的话,应该在文件尾新建一个节而不是去扩大原来的代码节并将它后面的其节后移,因为程序无法得知整个PE文件中有多少个RVA值会指向这些被移动位置的节,修正所有这些所有RVA值几乎是不可能的。

(2)如果附加的代码中要用到API函数的话,不要尝试在原始目标文件的导入表中添加导入函数名称,因为这样将涉及在目标PE文件的导入表插入新的模块名和函数名。其结果同样是造成导入表的一些项目被 移动位置,修正指向这些项目的RVA同样的很难实现的。

猜你喜欢

转载自lqzit.iteye.com/blog/1009179