Android 开发高手课
张绍文
前微信高级工程师,Tinker 负责人
52722 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
导读 (1讲)
模块一 高质量开发 (25讲)
Android 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

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

使用在自动化测试或线上疑难问题的定位
ARM32指令集
定期发送SIGPROF信号
Facebook
爱奇艺开源库
微信Matrix开源库
链接过程
ELF格式
优缺点
实践
实现原理
优缺点
实践
如何Hook
ptrace
优缺点
实践
实现原理
博客
Inline Hook
Trap Hook
GOT/PLT Hook
参考资料
课后作业
总结
Hook
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
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • LEi
    大佬请教下,就是插件化和热修复不会冲突吗,都在hook,一直很疑问,大家都在争夺下层的控制权,微信这种级别的应用是否两个都在用,谢谢

    作者回复: 插件化和热修复是不冲突的,他们两个的目的不太一样。可以理解成插件化不需要处理类重复的情况

    2019-10-17
    2
  • 公众号:程序员大兵
    请问老师有没有什么技术把安卓应用跑在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-14
    1
    1
  • 莫名
    👍
    2019-12-25
    1
  • hs
    老师,您好,想问一下动态链接中的,虚拟地址、绝对地址、实际地址的关系是什么?
    2020-11-27
    1
  • 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
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部