Java.use 与方法替换
☕ Frida 替换 Java 方法实现的 API。
基本用法
javascript
Java.use("java.net.SocketOutputStream").socketWrite0
.overload('java.io.FileDescriptor', '[B', 'int', 'int')
.implementation = function (fd, bytearry, offset, byteCount) {
// hook 逻辑
var result = this.socketWrite0(fd, bytearry, offset, byteCount); // 调原方法
return result;
};步骤
Java.use("类全名"):获取类引用.方法名:选方法.overload(参数类型...):选重载(同名方法多个参数版本时).implementation = function(...) {...}:替换实现this.原方法(...):在替换里调原方法
overload 的参数类型
| 类型字符串 | Java 类型 |
|---|---|
'java.io.FileDescriptor' | FileDescriptor |
'[B' | byte[] |
'int' | int |
'java.lang.String' | String |
r0capture 的 Java hook
| hook | 类.方法 | overload |
|---|---|---|
| 客户端证书 | KeyStore$PrivateKeyEntry.getPrivateKey | (无重载) |
| 证书链 | KeyStore$PrivateKeyEntry.getCertificateChain | (无重载) |
| Pinning 定位 | File.$init | (File, String) |
| 裸 TCP 发 | SocketOutputStream.socketWrite0 | (FileDescriptor, [B, int, int) |
| 裸 TCP 收 | SocketInputStream.socketRead0 | (FileDescriptor, [B, int, int, int) |
| Conscrypt 发 | ConscryptFileDescriptorSocket$SSLOutputStream.write | ([B, int, int) |
this 上下文
implementation 函数里 this 是被 hook 的实例,可:
this.原方法(...):调原方法this.字段:访问实例字段(如this.socket)