这一节对应 10.1 - 10.5,从 Hook 概念进入 IAT Hook。Hook 可以用于调试、监控和兼容,也可能被滥用。这里重点复盘 PE 导入表、函数指针替换和检测一致性。
1、内容范围
| 小节 |
主题 |
| 10.1 |
Hook 基本概念及分类 |
| 10.2 |
IAT Hook 构建思路及 PE 关联 |
| 10.3 |
API 调用拦截测试及安装卸载 |
| 10.4 |
IAT Hook 检测手法 |
| 10.5 |
拦截 IAT 修改事件与双向监听 |
1.1、逐节复盘
| 小节 |
主要内容 |
复盘点 |
| 10.1 |
认识 Hook 的分类和共同目标 |
重点分清 IAT、Inline、VTable、VEH、断点类 Hook 的痕迹位置 |
| 10.2 |
从 PE 导入表理解 IAT Hook 的作用点 |
复盘导入描述符、IAT 表项、目标模块和函数地址 |
| 10.3 |
观察 API 拦截测试和安装卸载状态变化 |
记录原表项、新表项、恢复状态和调用结果 |
| 10.4 |
设计 IAT Hook 检测手法 |
检查 IAT 地址是否落在合法模块导出范围内 |
| 10.5 |
监听 IAT 修改行为和 API 调用路径 |
结合内存保护变化、表项变化和调用栈分析 |
2、核心理解
| 概念 |
复盘重点 |
| Hook 本质 |
改变调用路径,让原本目标转向观察、替换或包装逻辑 |
| IAT |
导入地址表保存外部 API 的实际调用地址 |
| 安装卸载 |
状态变更必须可恢复,实验要记录原值和新值 |
| 检测 |
IAT 地址是否指向可信模块和合法范围 |
| 双向监听 |
既观察调用,也观察 IAT 被修改的行为 |
3、防护观察点
| 观察点 |
说明 |
| IAT 地址范围 |
是否指向预期 DLL 导出地址 |
| 模块可信度 |
替换目标是否来自未知模块或私有内存 |
| 表项变化 |
IAT 表项是否在运行期间被修改 |
| 页属性变化 |
修改 IAT 常伴随内存保护属性调整 |
| 调用行为 |
API 调用路径、返回值和副作用是否异常 |
4、复盘建议
| 项目 |
内容 |
| 原始表项 |
记录原 API 地址和所属模块 |
| 修改记录 |
记录何时修改、修改为哪里、是否恢复 |
| 调用验证 |
观察调用栈和结果是否符合预期 |
| 检测结果 |
比较 PE 文件导入表与内存 IAT |
5、学习检查清单
| 检查项 |
状态 |
| 能解释 IAT 与 PE 导入表的关系 |
待复盘 |
| 能说明 IAT Hook 为什么会留下表项变化 |
待复盘 |
| 能设计 IAT 完整性检查思路 |
待复盘 |
| 能记录 Hook 安装与卸载前后的差异 |
待复盘 |
Hook 内容只用于授权调试和检测复盘,不整理对真实软件的未授权拦截流程。