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

相关推荐
cany100029 分钟前
C++ -- 队列std::queue
开发语言·c++
是星辰吖~40 分钟前
X86反汇编:破茧成蝶 —— 赤裸逻辑与机械之心(1-1)
汇编
周末也要写八哥42 分钟前
C++中单线程方式之无脑上锁
java·开发语言·c++
東隅已逝,桑榆非晚1 小时前
新手入门指南:认识 C 语言文件操作(上)
c语言·开发语言·笔记
cany10001 小时前
C++ -- 动态内存分配和释放(new/delete)
开发语言·c++
xcyxiner1 小时前
ubuntu下 cmake初始化脚本 以及 qt依赖
c++·qt
周末也要写八哥1 小时前
Visual C++6.0下载安装流程及PDF学习手册资源
c++·学习·pdf
社交怪人2 小时前
【A×B】信息学奥赛一本通C语言解法(题号1036)
c语言
熬夜敲代码的猫2 小时前
AVL树(C++详解版)
数据结构·c++·算法
思麟呀2 小时前
C++工业级日志项目(七)日志器核心
linux·开发语言·c++·windows