流水账笔记:PE文件格式(导入表注入---手动)

时间:2024-03-13 11:43:41

简单记录一下手动的导入表注入方法,先挖个坑,以后有空再写代码,工具依然用的 010 Editor,以简单的“Hello, PE”程序为例。

先准备一个 DLL,名称为 mydll.dll,导出函数为 fun

#1

修改数据目录下的导入表偏移和大小,我们将偏移修正为 0x2100,即根据转换公式(RVA To FOA),新的导入表在文件 0x700 位置

流水账笔记:PE文件格式(导入表注入---手动)

#2

找到新导入表的位置,将旧的导入表数据移动到新的位置

流水账笔记:PE文件格式(导入表注入---手动)

#3

添加导入表,第一个成员指向 INT,可以理解为指向需要导入函数的字符串的指针(INT 在 IAT 中已阐述)。那么我们需要自己填写一个 INT,我们将 INT 的地址设定为 0x760,结果转换公式(FOA To RVA),RVA = 0x2160。于是修改后的结果如下图:

流水账笔记:PE文件格式(导入表注入---手动)

由于字符串的位置为 0x768,经过转换公式(FOA To RVA),RVA = 0x2168

#4

第二第三个成员可以忽视,第四个成员是指向 Dll 名称的字符串,我们将需要载入的 Dll 名称的字符串接在的字符串 fun 的后面,如图:

流水账笔记:PE文件格式(导入表注入---手动)

#5

第 5 个成员表示该表的 IAT 的首地址,因为上一张表的IAT 地址以 0x200F结尾,所以该表 IAT 的首地址为 0x2010

于是运行程序,DLL 注入成功了!