Android 进阶解密阅读笔记17
2021-03-21 本文已影响0人
jkwen
Hook 技术
先来说我看完这章节对 Hook 的理解。Hook 关键在于找到合适的 Hook 点(也就是需要代理的对象),接着再运用代理模式的思想 + 反射实现技术完成。之所以要做 Hook 就是想在现有的代码逻辑中加上一层自己的东西,就像本章一开始提到的“劫持”概念。这点我感觉又有点类似 AOP 的概念,可能都用到了代理思想吧。
Hook 起源
源自与逆向工程,逆向工程(直白来说就是只有最终产品,没有生产过程,那想造产品怎么办?照着现有产品分析)分为静态分析和动态分析,Hook 就是动态分析的一种技术。
Hook 分类
- Hook Java
就是我理解的 Hook 实现,也是书中重点说的。 - Hook Native
因为是底层 Hook,所以分为当前应用程序进程和对整个系统生效。Hook Java 只会影响当前应用程序进程。
Hook 实现
书中提到的 Hook 实现例子是 startActivity 过程中“劫持”Instrumentation 对象的调用。具体实现过程主要分 3 步,
- 找到合适的 Hook 点,因为 startActivity 调用方式涉及到两种(一种是 Activity,一种是 Context),但是共同点都要经过 Instrumentation 处理,所以 Hook 点就选它了。
- 既然“劫持”对象找到了,那总要做点羞羞的事情,然后再给它放回去。所以这步主要就是实现代理类。
- 通过反射技术,将原本的 Instrumentation 对象替换成代理类对象,这样代码运行起来就会通过我们代理类来实现想要的东西了。
这过程看起来还有点像 热修复技术 里的资源修复实现。
就目前来说,我还没有实际用过 Hook,可能技术太菜,也可能业务涉及不到,也可能单纯用 Hook 来解决某个问题是不现实的。不过我到觉得可以先做个大概了解,具体用到了再回头深入研究也不晚。