Skip to content

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;
  };

步骤 ​

  1. Java.use("类全名"):获取类引用
  2. .方法名:选方法
  3. .overload(参数类型...):选重载(同名方法多个参数版本时)
  4. .implementation = function(...) {...}:替换实现
  5. 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)

相关文档 ​

基于 VitePress 构建 · 教学用途