ART 与 Dalvik
🎨 Android 的 Java 虚拟机,r0capture Java hook 的运行环境。
演进
| 代 | VM | 特点 |
|---|---|---|
| 早期 | Dalvik | 解释执行/ JIT |
| 5.0+ | ART (Android Runtime) | AOT + JIT 混合 |
对 Frida Java hook 的影响
ART 把 Java 方法编译成 native 代码(AOT)或解释执行。Frida 的 Java.use + implementation = ... 通过 ART 内部接口替换方法入口,对 AOT 和解释执行都生效。
r0capture 的依赖
Java.perform需要 ART VM 已初始化Java.use通过 ART 的 class loader 找类- 方法替换走 ART 的 method entrypoint 改写
ART 与 native hook 的边界
| 维度 | Java 方法 (ART) | Native 函数 (.so) |
|---|---|---|
| hook 工具 | Java.use | Interceptor.attach |
| r0capture 用 | socket/keystore/conscrypt | SSL_read/write |
| 失败现象 | 类找不到/方法不存在 | 符号找不到 |
版本差异
不同 Android 版本 ART 实现不同,导致:
- 类名不同(如 socket 流类名各版本变化)
- 需多版本兼容(r0capture script.js 处理多个候选类名)