on_message 函数详解
📨 r0capture.py 的消息分发器:接收设备端 send 并路由。
📎 源码在线查看:
r0capture.py#L278-L336(on_message)
函数签名
python
def on_message(message, data):这是 frida 注入脚本后注册的回调,每次设备端 send(...) 都触发。
分发逻辑
message 结构
frida 的 message 字典:
| 字段 | 含义 |
|---|---|
message["type"] | "send"(正常)/"error"(脚本异常) |
message["payload"] | 设备端 send 第一参(我们的 p) |
message["stack"] | 仅 error 时有,异常栈 |
data 是设备端 send 第二参(二进制 ArrayBuffer)。
错误处理
python
if message["type"] == "error":
print("脚本错误:", message["stack"])设备端脚本抛未捕获异常时,frida 把它作为 error message 发回。
与 ssl_log 的衔接
python
p = message["payload"]
if p["type"] in ("SSL_read", "SSL_write", "socket_read", "socket_write"):
ssl_log(p, data, pcap_file=...)on_message 只做路由,具体写日志/pcap 交给 ssl_log。
线程模型
frida 的 on_message 在 frida 内部线程被调用,串行处理。所以多 hook 并发 send 时,主机端按到达顺序排队处理,pcap 写入天然线程安全。