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

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

相信一直坚持学习专栏的同学对 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
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Android 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

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

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

    2
  • LbbNiu
    请问老师有没有什么技术把安卓应用跑在Linux服务器端?

    作者回复: 模拟器?

  • bluevalley
    请教一下老师,我们现在想做本地io hook加解密,io-canary能覆盖所有的io读写场景么? 另Java层有没有办法做类似hook

    作者回复: Io canary可以覆盖所有java 层的io操作,但是它没有去监控其他so的io操作

  • 舒大飞
    绍文老师,问一下前面的asm插桩的Demo里为什么使用反射注入自定义的transform,而不是利用register注册transform的方式,有什么讲究吗?

    作者回复: 因为要替换原来的流程,最好还是直接拿到之前的输入输出,直接register不好控制时序

  • Swing
    看完一脸懵。。。没有搞过c/c++的估计都是这样的看法。。 cpu指令这种名词,看的太猛了。 plt hook还能稍微理解,trap hook 是什么鬼,不适用ptrace,只使用了 signal句柄处理机制? 那怎么 定位和修改指令。。 还有下面的 inline hook。。。 还有就是 “但是需要注意,无论是哪一种 Hook 都只能 Hook 到应用自身的进程,我们无法替换系统或其他应用进程的函数执行” ptrace 可以实现修改 其他进程?但是 由于trap hook 舍弃了 ptrace ,所以 不行?
    1
    1
  • 莫名
    👍
    1
  • hs
    老师,您好,想问一下动态链接中的,虚拟地址、绝对地址、实际地址的关系是什么?
    1
  • aspiration🍭
    邵老师,想请教下,这个hook,可以用来hook,so中的非对外调用方法吗?因为想要用来测试so的逻辑。
  • null
    大佬,关于Art Hook,我不太了解arm64下 x0-x30 ART是怎么调用的。能推荐几个博客文档吗。
  • Geek_cccb56
    绍文老师,我运行了Trap hook的demo,我看里面只能做方法替换,没有inline hook那种origin_method的指针可以回去执行原来的方法,比如我只想hook后打印下参数,还想执行原来的方法,这种trap hook怎么实现
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部