这一节对应 11.5 - 12.4。x64 Hook 比 x86 更强调调用约定、寄存器参数、跳转距离、栈对齐和指令解码。复盘重点不是写 Hook,而是理解为什么 x64 环境下更容易因为上下文破坏而崩溃。
1、内容范围
| 小节 |
主题 |
| 11.5 |
x64 万能跳转方案及环境保护 |
| 11.6 |
x64 通用模板框架 |
| 11.7 |
x64 Stub 环境保存 |
| 11.8 |
寄存器参数获取与堆栈定位 |
| 11.9 - 12.0 |
汇编中转与模板化框架完结 |
| 12.1 |
MinHook |
| 12.2 |
自旋锁与多线程兼容 |
| 12.3 |
HDE 反汇编 |
| 12.4 |
SIB Base/Index/Scale |
1.1、逐节复盘
| 小节 |
主要内容 |
复盘点 |
| 11.5 |
理解 x64 长跳转、寄存器保存和栈对齐问题 |
重点观察跳转距离、入口覆盖长度和上下文破坏风险 |
| 11.6 |
将 x64 Hook 抽象成通用模板 |
记录参数、目标函数、中转区、恢复逻辑和错误处理 |
| 11.7 |
使用 Stub 保存执行环境 |
复盘保存了哪些寄存器、标志位和栈状态 |
| 11.8 |
从寄存器和堆栈定位函数参数 |
结合 x64 调用约定记录 RCX/RDX/R8/R9 与栈参数 |
| 11.9 - 12.0 |
汇编中转函数与模板化框架收尾 |
关注默认返回、继续执行和异常分支 |
| 12.1 |
了解 MinHook 这类成熟库的工程价值 |
比较自己学习框架和成熟库在稳定性、兼容性上的差异 |
| 12.2 |
处理多线程下安装卸载 Hook 的竞态 |
复盘锁、线程状态、半修改窗口和崩溃风险 |
| 12.3 |
用 HDE 反汇编识别指令长度 |
关注指令边界、前缀、RIP 相对寻址和解析失败 |
| 12.4 |
理解 SIB Base/Index/Scale 寻址形式 |
复盘复杂内存操作数如何被解析和重定位 |
2、核心理解
| 概念 |
复盘重点 |
| x64 调用约定 |
前几个参数走寄存器,栈空间和对齐很重要 |
| 长跳转 |
x64 地址空间大,跳转编码和中转区选择需要理解 |
| 环境保存 |
寄存器、标志位、栈状态破坏会导致隐蔽错误 |
| 多线程 |
Hook 安装卸载时要考虑竞态和线程安全 |
| 指令解析 |
HDE/SIB 等用于识别指令长度和寻址方式 |
3、防护观察点
| 观察点 |
说明 |
| 异常跳转 |
函数入口跳转到远地址或私有可执行区 |
| 上下文异常 |
寄存器、栈对齐、返回地址异常导致崩溃 |
| 多线程竞态 |
安装卸载过程中其他线程执行到半修改状态 |
| 指令解码 |
检测工具需要正确处理 RIP 相对寻址和 SIB |
| 第三方库 |
MinHook 等库也可能被合法工具或恶意样本使用,要结合上下文 |
4、复盘模板
| 项目 |
内容 |
| 架构 |
x64、调用约定、目标函数参数 |
| 入口字节 |
原始指令长度、是否涉及 RIP 相对寻址 |
| 环境保存 |
哪些寄存器和栈空间需要保持 |
| 线程安全 |
安装卸载期间如何观察竞态风险 |
| 检测结论 |
函数入口、跳转目标、内存页和调用栈 |
5、学习检查清单
| 检查项 |
状态 |
| 能说明 x64 Hook 与 x86 Hook 的主要差异 |
待复盘 |
| 能解释寄存器参数和栈对齐为什么重要 |
待复盘 |
| 能理解指令长度解析和 SIB/RIP 相对寻址的检测价值 |
待复盘 |
| 能从崩溃或异常调用栈中定位上下文破坏问题 |
待复盘 |
本节只做 x64 Hook 稳定性和检测复盘,不提供可直接部署的 Hook 框架。