-
-
[原创]对EXE文件导入表添加一个新的dll和对应的函数名
-
-
[原创]对EXE文件导入表添加一个新的dll和对应的函数名
闲来无事,最近项目中要求对某个进程文件进行静态导入表的hook,于是想到采用对原有EXE文件的PE格式进行改写,将要被EXE调用的dll和导出函数直接写入EXE的导入表中。
代码只是demo,不足之处请见谅~
1.PE文件导入表的结构简单介绍

实际来看一下我们EXE的导入表,如下图,0x100c就是我们导入表的虚拟地址,其大小是0x38

使用PE工具,将0x100c的虚拟地址转换为文件偏移地址后为FOV:0x20C

通过文件偏移定位到0x20c处,查看文件内容如下:

根据_IMAGE_IMPORT_DESCRIPTOR结构体的内容,可知:一个导入表描述符占:5*sizeof(DWORD)的大小,末尾是一个全零的导入表描述符。
FirstThunk的RVA=0x00001044,Name的RVA=0x00001034
2.下面说一下如何添加新的导入表到EXE中
1)将旧文件读到内存中
2)添加新section的表头
3)将旧导入表拷贝到新的section中
4)在新的section中,接着旧的导入表描述符写入新的导入表描述符
5)修正新PE的imagesize
6)修正新PE的导入表虚拟地址和FOV地址
7)写入新文件中
代码地址:2c6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6E0j5h3!0E0K9h3&6Y4P5s2g2Q4x3V1k6b7c8g2)9#2k6X3W2E0M7r3!0J5N6q4)9J5k6q4)9#2k6X3q4V1k6r3g2J5
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课