【逆向】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/多线程与系统版本兼容问题。

相关推荐
clint4562 天前
C++进阶(1)——前景提要
c++
夜悊2 天前
C++代码示例:进制数简单生成工具
c++
郝学胜_神的一滴2 天前
CMake 021: IF 条件判据详诠
c++·cmake
_wyt0013 天前
洛谷 B3930 [GESP202312 五级] 烹饪问题 题解
c++·gesp
LDR0063 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
Luminous.3 天前
C语言--day30
c语言·开发语言
玖玥拾3 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
謓泽3 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
один but you3 天前
constexpr函数
c++