Frida send/recv 机制
📨 设备端 script.js 与主机端 r0capture.py 的消息通道。
是什么
Frida 注入的脚本(设备端)和主机端通过 send/recv 通信:
- 设备端
send(message, data)→ 主机端on_message回调 - 主机端
script.post(type, payload)→ 设备端recv回调
r0capture 的用法
设备端 → 主机端(主要方向)
javascript
// script.js
send(
{ "type": "SSL_write", "src_addr":..., "src_port":..., ... },
this.buf.readByteArray(written) // 二进制载荷
);send 第一参是 JSON 可序列化的元数据,第二参是可选的 ArrayBuffer 二进制数据(明文)。
主机端接收
python
# r0capture.py
def on_message(message, data):
if message["type"] == "send":
p = message["payload"]
if p["type"] == "SSL_write":
ssl_log(p, data) # 写日志/pcap主机端 → 设备端(RPC)
python
# 主机端调用设备端导出的函数
script.exports.setssllib("/system/lib64/libssl.so")javascript
// script.js
rpc.exports = {
setssllib: function(path) { ... }
};详见 RPC exports。
消息类型
| 来源 | 方法 | 用途 |
|---|---|---|
| 设备端 | send(meta, data) | 传抓到的明文+元数据 |
| 设备端 | console.log | 调试日志(也走 on_message) |
| 主机端 | script.exports.xxx() | RPC 调用 |
| 主机端 | script.post() | 发消息给设备端 |
为什么分两参
send(meta, data) 把 JSON 元数据和原始二进制分开:
- meta 走 JSON(便于主机端解析字段)
- data 走二进制原样传输(避免 Base64 编码开销,保持字节准确)
r0capture 的明文载荷可能是任意二进制(含 \0),用 data 通道最稳。