Hunter inline hook & GOT 表检测 - 关键函数跳转被改道了吗
这项在查什么
inline hook 和 GOT 表是 Android 进程 hook 的两种主流技术。Hunter 的这项检测同时覆盖两者,用来判断系统内部有没有被注入 hook 代码。
Inline Hook
Inline hook 的原理是:在目标函数的机器码开头插入一条跳转指令(通常是 5 字节的无条件跳转),让函数调用先跳到 hook 者的代码里,hook 逻辑跑完再跳回原函数。Hunter 通过对比关键函数开头的机器码与原版二进制来发现差异。
GOT 表 Hook
GOT(Global Offset Table,全局偏移表)是 ELF 二进制文件里的一个数据结构,存储了外部函数的实际地址。GOT hook 的原理是:修改 GOT 表里的函数指针,让它指向 hook 者的代码。函数调用时直接跳到 hook 代码,不需要改机器码。
为什么这两项重要
Inline hook 和 GOT hook 是几乎所有框架注入和逆向工具的底层技术——Magisk、Zygisk、LSPosed、Frida 都在某个层面依赖其中一种。所以这两项的检测结果能从最底层告诉你:
- 系统里到底有没有被注入过 hook
- hook 是什么层面的(机器码层面还是地址表层面)
和其他检测项的关系
| 检测项 | 关联关系 |
|---|---|
| libc 内存检测 | libc 是 hook 最常用的目标,libc 内存报红 → inline hook / GOT 大概率也报 |
| Frida & IDA | Frida 通过这两种技术实现 hook |
| 反调试 / Unidbg | 反调试也常用 inline hook 实现 |
谁会被触发
| 场景 | 触发概率 | 说明 |
|---|---|---|
| Magisk + Zygisk | 可能触发 | Zygote 注入会改机器码 |
| LSPosed | 大概率触发 | Zygote + inline hook 实现模块加载 |
| Frida | 必然触发 | 用 inline hook 和 GOT hook 注入 agent |
| 完全没装过框架 / 逆向工具 | 正常不触发 | 报红需要排查 |
报红时怎么定位来源
Hunter 的 inline hook / GOT 表检测会在详情里给出被 hook 的具体函数名——比如如果报 malloc 被 hook 了,你就能锁定是哪个注入工具在做这件事。对照已安装应用列表里的 Magisk 模块、逆向工具等,基本能定位来源。