35 | Native Hook 技术,天使还是魔鬼?
张绍文

该思维导图由 AI 生成,仅供参考
相信一直坚持学习专栏的同学对 Hook 一定不会陌生,在前面很多期里我无数次提到 Hook。可能有不少同学对于 Hook还是“懵懵懂懂”,那今天我们从来头了解一下什么是 Hook。
Hook 直译过来就是“钩子”的意思,是指截获进程对某个 API 函数的调用,使得 API 的执行流程转向我们实现的代码片段,从而实现我们所需要得功能,这里的功能可以是监控、修复系统漏洞,也可以是劫持或者其他恶意行为。
相信许多新手第一次接触 Hook 时会觉得这项技术十分神秘,只能被少数高手、黑客所掌握,那 Hook 是不是真的难以掌握?希望今天的文章可以打消你的顾虑。
Native Hook 的不同流派
对于 Native Hook 技术,我们比较熟悉的有 GOT/PLT Hook、Trap Hook 以及 Inline Hook,下面我来逐个讲解这些 Hook 技术的实现原理和优劣比较。
1. GOT/PLT Hook
在Chapter06-plus中,我们使用了 PLT Hook 技术来获取线程创建的堆栈。先来回顾一下它的整个流程,我们将 libart.so 中的外部函数 pthread_create 替换成自己的方法 pthread_create_hook。

你可以发现,GOT/PLT Hook 主要是用于替换某个 SO 的外部调用,通过将外部函数调用跳转成我们的目标函数。GOT/PLT Hook 可以说是一个非常经典的 Hook 方法,它非常稳定,可以达到部署到生产环境的标准。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结

本文深入探讨了Native Hook技术的原理和实践应用,包括GOT/PLT Hook、Trap Hook和Inline Hook等方面。首先介绍了GOT/PLT Hook的实现原理和优劣比较,详细阐述了GOT和PLT在动态链接中的作用。接着,文章介绍了Trap Hook的原理,指出了其在断点调试中的应用,并提到了业界成熟的Hook方案。最后,对Inline Hook进行了详细解析,包括在ARM体系结构下的实践和指令修复等细节。总的来说,本文全面介绍了Hook技术的原理和实践应用,旨在帮助读者更深入地了解和认识Hook技术。文章内容涵盖了技术细节和实际应用,对于对系统安全、漏洞修复等方面感兴趣的读者具有很高的参考价值。文章还对不同的Hook方式进行了优缺点比较,为读者提供了全面的技术评估。最后,作者鼓励读者学习成熟的开源框架去实现一些功能,并推荐了相关学习资料和博客。整体而言,本文对Native Hook技术进行了深入浅出的介绍,既有理论知识又有实践应用,适合对该领域感兴趣的读者阅读学习。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Android 开发高手课》,新⼈⾸单¥59
《Android 开发高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(13)
- 最新
- 精选
- LEi大佬请教下,就是插件化和热修复不会冲突吗,都在hook,一直很疑问,大家都在争夺下层的控制权,微信这种级别的应用是否两个都在用,谢谢
作者回复: 插件化和热修复是不冲突的,他们两个的目的不太一样。可以理解成插件化不需要处理类重复的情况
2019-10-172 - 公众号:程序员大兵请问老师有没有什么技术把安卓应用跑在Linux服务器端?
作者回复: 模拟器?
2019-07-10 - bluevalley请教一下老师,我们现在想做本地io hook加解密,io-canary能覆盖所有的io读写场景么? 另Java层有没有办法做类似hook
作者回复: Io canary可以覆盖所有java 层的io操作,但是它没有去监控其他so的io操作
2019-03-28 - 舒大飞绍文老师,问一下前面的asm插桩的Demo里为什么使用反射注入自定义的transform,而不是利用register注册transform的方式,有什么讲究吗?
作者回复: 因为要替换原来的流程,最好还是直接拿到之前的输入输出,直接register不好控制时序
2019-03-24 - Swing看完一脸懵。。。没有搞过c/c++的估计都是这样的看法。。 cpu指令这种名词,看的太猛了。 plt hook还能稍微理解,trap hook 是什么鬼,不适用ptrace,只使用了 signal句柄处理机制? 那怎么 定位和修改指令。。 还有下面的 inline hook。。。 还有就是 “但是需要注意,无论是哪一种 Hook 都只能 Hook 到应用自身的进程,我们无法替换系统或其他应用进程的函数执行” ptrace 可以实现修改 其他进程?但是 由于trap hook 舍弃了 ptrace ,所以 不行?2020-04-1411
- 莫名👍2019-12-251
- hs老师,您好,想问一下动态链接中的,虚拟地址、绝对地址、实际地址的关系是什么?2020-11-271
- aspiration🍭邵老师,想请教下,这个hook,可以用来hook,so中的非对外调用方法吗?因为想要用来测试so的逻辑。2020-11-14
- null大佬,关于Art Hook,我不太了解arm64下 x0-x30 ART是怎么调用的。能推荐几个博客文档吗。2020-09-28
- Geek_cccb56绍文老师,我运行了Trap hook的demo,我看里面只能做方法替换,没有inline hook那种origin_method的指针可以回去执行原来的方法,比如我只想hook后打印下参数,还想执行原来的方法,这种trap hook怎么实现2020-05-05
收起评论