【逆向】AT Hook 与 Inline Hook 对比

一、核心原理

  1. IAT Hook(导入表 Hook)
  • 原理:不修改原函数代码,只修改 PE 文件的 IAT(导入地址表) 中记录的函数地址,将其指向自定义代理函数。
  • 本质:换地址,不改代码,通过"重定向调用"实现拦截。
  1. Inline Hook(内联 Hook)
  • 原理:直接在原函数入口 写入跳转指令(如 jmp),强行把执行流劫持到自定义函数。
  • 本质:改代码,劫持执行流,属于指令级篡改。

二、适用场景

  1. IAT Hook
  • 只拦截外部导入函数(系统 DLL、第三方库导出函数)。
  • 追求高稳定、低崩溃、兼容好的场景。
  • 反作弊/安全防护中更隐蔽、更安全。
  1. Inline Hook
  • 必须拦截无导出的内部函数、静态函数、内核函数
  • 无法通过 IAT 定位目标时使用。
  • 需要强干预、全流量拦截的场景。

三、稳定性对比

  1. IAT Hook
  • 稳定性极高,不破坏代码段。
  • 多线程安全、DLL 卸载安全,几乎不触发异常。
  1. Inline Hook
  • 稳定性较低,覆盖原函数前 5--7 字节指令。
  • 易出现多线程竞争、断点冲突、指令未对齐导致崩溃。

四、检测方法

  1. IAT Hook 检测
  • 遍历 IAT 表,检查函数地址是否落在正常模块范围内。
  • 对比原始导出表地址、校验导入表哈希。
  1. Inline Hook 检测
  • 检查函数入口是否为 jmp/call 等短跳转指令。
  • 校验代码段哈希、判断内存是否可写、检测指令合法性。

五、Windows 版本差异(Win7 / Win10 / Win11)

  1. IAT Hook
  • 全系统几乎无差异,兼容性一致,稳定可用。
  1. Inline Hook
  • Win7:无强制 CFG,DEP 宽松,极易实现。
  • Win10:开启 CFG、内核保护增强,Hook 非导出函数易失败。
  • Win11:严格 CFG + RFG + KVA Shadow + 内核隔离,用户态 Inline Hook 极易崩溃、被系统拦截。
  • 趋势:微软持续强化代码完整性,Inline Hook 成本与风险越来越高。

优先使用 IAT Hook,稳定兼容、不易崩溃;Inline Hook 仅在无导出函数时使用,必须处理 CFG/DEP/多线程与系统版本兼容问题。

相关推荐
tankeven1 小时前
C++ 算法类
c++
挨踢ren2 小时前
C++ std::function:万能函数包装器
c++
初願致夕霞2 小时前
Linux编程_应用层_HTTP与HTTPS协议
linux·c++·http·https
大都督会赢的2 小时前
数据结构(1)--顺序表
c语言·数据结构·学习·指针
水云桐程序员3 小时前
C++在游戏领域的项目案例有哪些?
jvm·c++·游戏
爱编码的小八嘎3 小时前
C语言完美演绎9-24
c语言
叼烟扛炮3 小时前
C++第五讲:内存管理
c++·算法·面试·内存管理
Ricky_Theseus3 小时前
vector 与 list 区别 + 使用场景
c++
小娄~~3 小时前
多线程函数
c语言·开发语言