Java.perform 与 Java 桥接
☕ Frida 在 Android 上操作 Java 层的入口。
Java.perform
javascript
Java.perform(function () {
// 在 Java 上下文里执行 hook 注册
});Java.perform 确保回调在 Java 上下文执行,是 Android 上 hook Java 方法的前提。r0capture 的所有 Java 层 hook(证书导出、pinning 定位、裸 TCP、Conscrypt 栈)都包在 Java.perform 里。
Java.use
javascript
var SocketOutputStream = Java.use("java.net.SocketOutputStream");
SocketOutputStream.socketWrite0.overload('java.io.FileDescriptor', '[B', 'int', 'int')
.implementation = function (fd, b, off, len) { ... };Java.use("类全名"):获取类引用.overload(参数类型...):选择重载.implementation = function(...) {...}:替换方法实现
frida 17 的桥接变化
frida 17 起 Java 不再内置,需 host 响应 frida:load-bridge。r0capture 用 _FRIDA17_BOOTSTRAP 把 Java 做成懒加载全局对象。详见 frida 17 兼容。
守卫条件
javascript
if (typeof Java !== 'undefined' && Java.available) {
Java.perform(function () { ... });
}非 Android 平台(iOS 用 ObjC、桌面无 Java)时 Java 未定义,跳过 Java 块,只保留 Native SSL hook。