Skip to content

RPC 机制总览 ​

🔗 r0capture.py(Python host)与 script.js(设备端注入脚本)之间的双向通信。

两个方向 ​

方向设备端Python 端用途
设备 → Pythonsend(msg, data)on_message(msg, data)回传抓到的流量/事件
Python → 设备rpc.exports.xxx 实现script.exports.xxx() 调用远程下发指令

send 消息结构 ​

设备端 send 的第一个参数是 message 对象,Python 端在 message["payload"] 取到:

javascript
{
  function:       "SSL_read" | "SSL_write" | "HTTP_send" | "HTTP_recv"
                | "dumpClinetCertificate=>..." | "SSLpinning position locator => ...",
  ssl_session_id: "59FD71B7...",   // 空=非SSL流量
  src_addr:       <uint32 网络序>,
  src_port:       <int>,
  dst_addr:       <uint32 网络序>,
  dst_port:       <int>,
  stack:          "at com.example...\n..."   // 调用栈,可能 null
}

第二个参数 data 是 ArrayBuffer,即本次收/发的明文字节。

data 长度==1 的事件约定

当 data 长度为 1 字节时,Python 端认为是「事件通知」(证书导出、pinning 定位),只打印 function + stack,不走流量/pcap 逻辑。

现有 RPC 导出 ​

名称作用
setssllib(name)切换要 hook 的 SSL 库通配符

frida 17 的特殊消息 ​

frida 17 下,设备端首次访问 Java 会发 {type:"frida:load-bridge", name:"Java"},Python 端 on_message 识别后调 serve_bridge 把桥接源码 post 回去。详见 frida 17 兼容。

相关文档 ​

基于 VitePress 构建 · 教学用途