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

相关推荐
小七在进步7 小时前
C++入门(2)
java·jvm·c++
en.en..7 小时前
C语言核心解析:#define与typedef本质区别
开发语言·c++·算法
码匠许师傅7 小时前
【设计模式精讲】26.策略模式(Strategy)
c++·设计模式·策略模式·uml
果果燕8 小时前
实习笔记(六)主机按钮状态上报完整流程
开发语言·c++·php
是个西兰花9 小时前
网络基础1
linux·网络·c++·智能路由器
老赵的博客9 小时前
c++QT之动态库加载常见报错
c++·qt
wabs66610 小时前
关于二叉树【429.N叉树的层序遍历的思考】
数据结构·c++·算法·leetcode·二叉树
hetao173383710 小时前
2026-09-08 hetao1733837 的刷题记录
c++·算法
码匠许师傅10 小时前
【设计模式精讲】25.状态模式(State)
c++·ui·设计模式·状态模式·uml
C++ 老炮儿的技术栈10 小时前
MFC CPtrArray的用法
开发语言·数据结构·c++·算法·mfc·c