【逆向】AT Hook 与 Inline Hook 对比
一、核心原理IAT Hook导入表 Hook原理不修改原函数代码只修改 PE 文件的IAT导入地址表中记录的函数地址将其指向自定义代理函数。本质换地址不改代码通过“重定向调用”实现拦截。Inline Hook内联 Hook原理直接在原函数入口写入跳转指令如jmp强行把执行流劫持到自定义函数。本质改代码劫持执行流属于指令级篡改。二、适用场景IAT Hook只拦截外部导入函数系统 DLL、第三方库导出函数。追求高稳定、低崩溃、兼容好的场景。反作弊/安全防护中更隐蔽、更安全。Inline Hook必须拦截无导出的内部函数、静态函数、内核函数。无法通过 IAT 定位目标时使用。需要强干预、全流量拦截的场景。三、稳定性对比IAT Hook稳定性极高不破坏代码段。多线程安全、DLL 卸载安全几乎不触发异常。Inline Hook稳定性较低覆盖原函数前 5–7 字节指令。易出现多线程竞争、断点冲突、指令未对齐导致崩溃。四、检测方法IAT Hook 检测遍历 IAT 表检查函数地址是否落在正常模块范围内。对比原始导出表地址、校验导入表哈希。Inline Hook 检测检查函数入口是否为jmp/call等短跳转指令。校验代码段哈希、判断内存是否可写、检测指令合法性。五、Windows 版本差异Win7 / Win10 / Win11IAT Hook全系统几乎无差异兼容性一致稳定可用。Inline HookWin7无强制 CFGDEP 宽松极易实现。Win10开启 CFG、内核保护增强Hook 非导出函数易失败。Win11严格 CFG RFG KVA Shadow 内核隔离用户态 Inline Hook 极易崩溃、被系统拦截。趋势微软持续强化代码完整性Inline Hook 成本与风险越来越高。优先使用 IAT Hook稳定兼容、不易崩溃Inline Hook 仅在无导出函数时使用必须处理 CFG/DEP/多线程与系统版本兼容问题。