--selftest:自检模式
✅ 主动在目标进程内发起一次 HTTPS 请求,验证抓包链路是否打通。
作用
抓包不成功时,难排查是 hook 没装上还是 App 没发流量。--selftest 让 r0capture 在目标进程内自己发一个 HTTPS 请求到 https://example.com/:
- 若 hook 链路正常 → 应抓到这次自发的 SSL_write/SSL_read
- 若抓不到 → 说明 hook 安装有问题(frida 17 桥接、符号解析等)
用法
bash
python3 r0capture.py -U -f com.app --selftest -v输出形如:
[selftest] result={ code=200, bodylen=1256 }code=200 说明自检请求成功发出并收到响应;若链路正常,控制台同时会打印这次请求的明文流量。
内部实现
selftest 用一个独立 script 注册 RPC,避免与主 script.js 的 rpc.exports 冲突:
selftest script 内部用 java.net.URL + HttpURLConnection 发请求,会经过系统 SSL 栈,从而被主 script 的 SSL_read/SSL_write hook 抓到。
frida 17 兼容
selftest script 同样内置了 _FRIDA17_BOOTSTRAP 懒加载 Java 桥接的逻辑,且其 frida:load-bridge 请求必须 post 回 st_script(而非主 script),否则桥接加载会错位。详见 frida 17 兼容。
排查指引
| selftest 结果 | 含义 | 下一步 |
|---|---|---|
code=200 且抓到流量 | 链路完全正常 | App 没发流量?操作 App 触发请求 |
code=200 但抓不到流量 | hook 没装上 | 查符号解析、frida 版本 |
err: ... | 自检请求失败 | 网络?权限?Java 桥接? |