这一节对应 08.6 - 09.1。反射式加载的核心不是“神秘技巧”,而是在正常加载器之外,部分模拟 PE 映射、导入修复、重定位修复和入口执行过程。复盘时必须回到 PE 结构本身。
1、内容范围
| 小节 |
主题 |
| 08.6 |
ReflectiveDLL |
| 08.7 |
注入主框架与导出函数执行 |
| 08.8 |
定位执行地址并回溯模块头 |
| 08.9 |
哈希计算、匹配和导出表数据对接 |
| 09.0 |
映像动态拉伸、拷贝和导入表修复 |
| 09.1 |
重定位修正和入口点执行 |
1.1、逐节复盘
| 小节 |
主要内容 |
复盘点 |
| 08.6 |
理解 ReflectiveDLL 的核心:模块自己完成加载准备 |
只记录 PE 加载关系、修复对象和检测痕迹 |
| 08.7 |
观察注入主框架和导出函数执行的职责划分 |
关注入口、导出函数、参数和日志 |
| 08.8 |
从当前执行地址回溯模块头部 |
复盘内存中 PE 头、节表和地址范围是否可信 |
| 08.9 |
使用哈希匹配导出函数并对接导出表数据 |
记录哈希规则、名称表、序号表和函数地址表关系 |
| 09.0 |
理解映像从文件状态到内存状态的拉伸和导入修复 |
重点看节区拷贝、导入表、依赖模块和函数地址 |
| 09.1 |
复盘重定位修正和入口点执行前置条件 |
记录基址差值、重定位块、入口点和异常结果 |
2、PE 关系
| PE 部分 |
复盘重点 |
| DOS/NT 头 |
从内存位置回溯模块头部,确认 PE 结构有效 |
| 节表 |
文件状态和内存状态的映射关系 |
| 导出表 |
通过导出函数定位入口或辅助函数 |
| 导入表 |
手动加载时需要解析依赖模块和函数地址 |
| 重定位表 |
映像不在首选基址时需要理解地址修正 |
3、防护观察点
| 观察点 |
说明 |
| 未登记模块 |
内存中存在 PE 映像,但不在正常模块列表中 |
| 私有映像 |
映像区域不是常规文件映射 |
| 手动导入 |
运行时频繁解析导入和导出表 |
| 重定位行为 |
对内存中的地址批量修正 |
| 入口执行 |
线程入口或调用目标落在未登记映像中 |
4、复盘模板
| 项目 |
内容 |
| 映像来源 |
文件、内存缓冲区或实验样本 |
| PE 结构 |
DOS、NT、节表、导入、重定位是否完整 |
| 加载状态 |
是否登记模块、是否有文件路径、权限属性如何 |
| 观察结果 |
模块列表、内存映像、调用栈和异常记录 |
| 防护结论 |
哪些规则或日志可以发现异常加载 |
5、学习检查清单
| 检查项 |
状态 |
| 能说明反射式加载与正常加载器之间的关系 |
待复盘 |
| 能解释导入表和重定位表为什么是关键 |
待复盘 |
| 能列出未登记内存映像的检测线索 |
待复盘 |
| 能把反射式加载复盘限定在 PE 机制和防护观察上 |
待复盘 |
本节不记录反射式加载的可执行实现,只保留 PE 结构、加载痕迹和检测思路。