目录:
- 1. Hook 简述
- 2. VirtualAPP Java Hook 类图
- 3. VirtualAPP Java Hook 实例 (ActivityManagerService)
1. Hook 简述
我们先来了解下 hook.
(1) 什么是 Hook
Hook 又叫“钩子”,它可以在事件传送的过程中截获并监控事件的传输,将自身的代码与系统方法进行融入。这样当这些方法被调用时,也就可以执行我们自己的代码,这也是面向切面编程的思想(AOP)。
(2) Hook 分类
(3) Hook 框架
大体分为以下两种:
- 要 root 权限,直接 Hook 系统,可以干掉所有的 App。
- 免 root 权限,但是只能 Hook 自身,对系统其它 App 无能为力。
在 Android 开发中,有以下常见的一些 Hook 框架:
(4) Hook 需要掌握的知识点
- 反射
- java 的动态代理
(5) Hook 的缺点
- 需要做大量的适配,兼容 Android 版本,稳定性差
- 大量使用反射,影响运行性能
2. VirtualAPP Java Hook 类图
想知道 VirtualAPP 如何 hook 系统服务,在各种系统 service 调用函数时进行拦截处理吗?先来回顾下 framework 的 ServiceManager, 我们要拦截的就是各种服务的调用。
VirtualAPP Java Hook 类图如下:
大致流程如下:
接下来我们以 ActivityManagerService 的 hook 为例,看看具体逻辑。
3. VirtualAPP Java Hook 实例 (ActivityManagerService)
对应的镜像封装类为 ActivityManagerStub:
总结:
简洁的动态代理封装,通过注册动态添加代理方法,去掉 if else,同时还支持注解注入。