这一节对应 10.6 - 11.4。Inline Hook 直接影响函数开头指令,比 IAT Hook 更接近代码执行路径,因此复盘重点是指令完整性、跳转覆盖范围、中转函数和恢复机制。
1、内容范围
| 小节 |
主题 |
| 10.6 |
Inline Hook 底层逻辑 |
| 10.7 |
函数参数拦截与传统钩子 |
| 10.8 |
标准模板化钩子框架 |
| 10.9 |
转发函数判断与指令完整性 |
| 11.0 |
指令边界对齐及破坏修复 |
| 11.1 |
中转函数与通用拦截 |
| 11.2 |
任意函数拦截测试 |
| 11.3 |
常规 API 转发 |
| 11.4 |
框架优化与卸载处理 |
1.1、逐节复盘
| 小节 |
主要内容 |
复盘点 |
| 10.6 |
理解 Inline Hook 直接修改函数入口的底层逻辑 |
关注入口字节、页属性、跳转目标和原始字节备份 |
| 10.7 |
从参数拦截理解中转函数的观察价值 |
复盘调用约定、参数位置、返回值和副作用 |
| 10.8 |
将 Inline Hook 整理成模板化框架 |
记录初始化、安装、转发、恢复、卸载等状态 |
| 10.9 |
判断转发函数和被覆盖指令是否完整 |
重点检查指令长度、边界和相对寻址 |
| 11.0 |
修复指令边界破坏和跳转偏移问题 |
使用反汇编确认没有截断指令或破坏 RIP 相对寻址 |
| 11.1 |
通过中转函数理解通用拦截路径 |
关注上下文保存、继续原逻辑和返回路径 |
| 11.2 |
在授权环境测试任意函数拦截的稳定性 |
记录崩溃、异常、调用栈和恢复结果 |
| 11.3 |
复盘常规 API 转发场景 |
观察转发前后参数、返回值和模块来源 |
| 11.4 |
优化框架并确保卸载可恢复 |
重点看原始字节、页保护、线程安全和资源释放 |
2、核心理解
| 概念 |
复盘重点 |
| 指令边界 |
覆盖字节不能截断一条完整指令 |
| 跳转转发 |
原函数开头被改写后,需要理解跳转和返回路径 |
| 中转函数 |
用于保存上下文、观察参数、决定是否继续原逻辑 |
| 卸载恢复 |
必须恢复原始字节和页属性 |
| 检测 |
函数入口字节、内存属性、跳转目标都是关键线索 |
3、防护观察点
| 观察点 |
说明 |
| 函数入口 |
与磁盘原始字节或可信基线对比 |
| 跳转指令 |
函数开头异常跳转到未知区域 |
| 页保护 |
代码段被临时改写时可能出现保护属性变化 |
| 中转区域 |
私有可执行内存、未知模块或异常地址 |
| 稳定性异常 |
指令截断会导致崩溃、异常和不可预期返回 |
4、复盘模板
| 项目 |
内容 |
| 原始字节 |
函数开头原始机器码和长度 |
| 覆盖范围 |
覆盖了哪些完整指令 |
| 跳转目标 |
转发区域、中转函数、返回位置 |
| 恢复动作 |
是否恢复原字节和权限 |
| 检测结果 |
入口完整性、调用栈和内存页状态 |
5、学习检查清单
| 检查项 |
状态 |
| 能解释 Inline Hook 为什么必须关心指令边界 |
待复盘 |
| 能说明中转函数和原函数恢复路径 |
待复盘 |
| 能设计函数入口完整性检查 |
待复盘 |
| 能从崩溃现场推测指令截断或上下文破坏 |
待复盘 |
本节只记录 Inline Hook 原理、稳定性问题和检测点,不提供可直接套用的拦截代码。