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

相关推荐
蒸蒸yyyyzwd4 小时前
秋招学习笔记 day46
c++·八股
码匠许师傅7 小时前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http
无名猿8 小时前
new/delete 与 malloc/free:为什么绝对不能混用
c++·内存管理·现代c++·踩坑记录
AC赳赳老秦9 小时前
公开音频转写信息提取:OpenClaw 处理发布会与听证会文本并提取核心决策信息
大数据·开发语言·汇编·数据库·人工智能·deepseek·openclaw
@yanyu6669 小时前
C编译器安装与第一个C程序
c语言·开发语言
山下梅子酒2259 小时前
洛谷-入门-B2070
c语言
Logic10110 小时前
C语言/数据结构位运算题解:异或XOR找出多任务下载器中的“独特下载速度“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
2601_9622186110 小时前
C++中decltype关键字的实现
开发语言·c++
繁华的地方不一定留下你的脚印10 小时前
C++ std::variant 与 std::visit:安全保存多种类型,写清每个处理分支
开发语言·c++
程序员老陆10 小时前
WIN32_LEAN_AND_MEAN:Windows 头文件里的“精简编译开关”
c++·windows