静态修改PE输入表

通常情况下,程序加载DLL的时机主要有以下三个:

  • 在进程创建阶段加载输入表中的DLL,即俗称的静态输入
  • 通过调用`LoadLibrary (Ex) 主动加载,称为动态加载
  • 由于系统机制的要求,必须加载系统预设的一些基础服务模块

此文仅记录修改静态输入表注入

找到输入表

https://blog.csdn.net/billvsme/article/details/39735823

输入表结构

typedef DWORD ULONG
typedef struct IMAGE_IMPORT_DESCRIPTOR {
	union {
		ULONG Characteristics;	
		ULONG OriginalFirstThunk;			
	};
	ULONG TimeDateStamp;
	ULONG ForwarderChain;
	ULONG Name;
	ULONG FirstThunk;
} IMAGE_IMPORT_DESCRIPTOR;
typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR
  • OriginalFirstThunk : 包含指向输入名称表 ( INT ) 的RVA
  • Name : DLL名字的指针
  • FirstThunk : 包含输入地址表 ( IAT ) 的RVA

注入

  1. 获取输入表的Size,并加上0x14,这就是加入自定的dll以后输入表的大小
  2. 寻找合适的空隙,或者直接扩展最后一个节,或者增加一个节
  3. 备份原IID数组,放到找到的空间
  4. 构造新IID的结构
  5. 填充新输入表项的IID结构
  6. 修正PE文件头的信息
手动修改太麻烦了,这里可以直接使用工具

先使用LordPE打开文件
静态修改PE输入表_第1张图片
然后点击目录
静态修改PE输入表_第2张图片
然后点击输入表右侧的三个点
静态修改PE输入表_第3张图片
然后鼠标右键,添加导入表
静态修改PE输入表_第4张图片
然后在DLL框输入dll的绝对地址,API填上要导入的函数名,点加号,然后点确定,若没有警告弹出,则添加成功

你可能感兴趣的:(学习日记)