目录
Java Hook
- 1.静态修改apk中的函数调用,插入语句(droidbox)
- 2.用反射获取java函数Method类型对应c层结构Method*,修改insns域的dex字节码(Andfix)
- 3.修改method->nativeFunc域,自己实现dvmResolveNativeMethod以重新映射(xposed/substrate)
Epic
Epic 是 一个虚拟机层面,以 Java 方法为粒度的运行时 Hook 框架。简单来说,它就是 ART 上的 Dexposed,并且它目前 支持 Android 4.0~10.0。
Epic github 地址:https://github.com/tiann/epic/blob/master/README_cn.md
继承XC_MethodHook 监听
class ThreadHook extends XC_MethodHook{
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
Thread t = (Thread) param.thisObject;
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
Thread t = (Thread) param.thisObject;
}
}
注入监听
DexposedBridge.findAndHookMethod(Thread.class, "run", new ThreadHook());
SandHook
SandHook 是作用在 Android ART 虚拟机上的 Java 层 Hook 框架,作用于进程内是不需要 Root 的
https://github.com/ganyao114/SandHook
AndFix
通过nativie开发实现Method struct替换
Legend框架
通过java实现AndFix框架中的方法替换;暂不维护了
Android中免root的hook框架Legend原理解析_qq_44906504的博客-CSDN博客_android hook框架
Whale Hook
Whale是一个跨平台的Hook Framework,同时支持Android、IOS、Linux、MacOS。 Whale 支持ARM/THUMB、ARM64、X86、X86_64 (AMD64),这几乎覆盖了目前所有主流的设备。
[原创]Whale -- ART Hook的最方案与实践-Android安全-看雪论坛-安全社区|安全招聘|bbs.pediy.com
https://github.com/asLody/whale
Native Hook
- GOT/PLT Hook 是一个比较中庸的方案,有较好的性能,中等的实现难度,但其只能 Hook 动态库之间的调用的函数,并且无法Hook 未导出的私有函数,而且只存在安装与卸载 2 种状态,一旦安装就会 Hook 所有函数调用。一句话:读取内存地址,通过读取/proc/self/maps节点获取so的中内存基址+got表中offset地址
- Trap Hook 最为稳定,但由于需要切换运行模式(R0/R3),且依赖内核的信号机制,导致性能很差。
- Inline Hook 是一个非常激进的方案,有很好的性能,并且也没有 PLT 作用域的限制,可以说是一个非常灵活、完美的方案。但其实现难度极高,我至今也没有看到可以部署在生产环境的 Inline Hook 方案,因为涉及指令修复,需要编译器的各种优化。
但是需要注意,无论是哪一种 Hook 都只能 Hook 到应用自身的进程,我们无法替换系统或其他应用进程的函数执行。
4.调用 RegisterNatives
就能注册函数,通过再次调用 RegisterNatives
重新注册函数覆盖之前的,从而达到 Hook
的效果
https://www.52pojie.cn/thread-1381225-1-1.html
Hook知识普及
Android Native Hook技术你知道多少? - 知乎
BHook
PLT hook 字节出版,在xhook基础上升级改造稳定和系统版本的兼容性
https://github.com/bytedance/bhook/blob/main/doc/overview.zh-CN.md
GitHub - bytedance/bhook: ? ByteHook(aka bhook) is a PLT hook framework for Android app.
Xhook
爱奇艺的xhook框架
采用 PLT/GOT Hook + “导出表” Hook 的方式来拦截相关的系统函数
xposed
inline hook方案
参考文献: