-ssl / <lib>:指定要 hook 的 SSL 库
🔧 当默认的
*libssl*找不到导出符号时,用-ssl指定具体的.so名。
为什么需要
script.js 默认按通配符 *libssl*(Android/Linux)或 *libboringssl*(darwin)枚举 SSL 符号。但有些场景:
- 定制 ROM 自带了不同命名的 SSL 库
- 加固 App 把 SSL 库重命名或内联
- 特定 App 使用自己的 BoringSSL 副本(如
libboringssl_assumble.so)
此时默认通配符匹配不到,可用 -ssl 显式指定库通配符。
用法
bash
# 指定具体库通配符
python3 r0capture.py -U -ssl "*libssl.so*" com.app -v -p out.pcap
# 例:抓 BigFaceCat 测试 demo
python3 r0capture.py -U -pcap log.pcap -ssl "*libssl.so*" com.bigfacecat.testdemo内部流程
对应 script.js 的 RPC 导出:
javascript
rpc.exports = {
setssllib: function (name) {
console.log("setSSLLib => " + name);
libname = name;
initializeGlobals();
return;
}
};r0capture.py 端:
python
if ssllib != "":
script.exports.setssllib(ssllib)通配符语法
ApiResolver("module") 接受的匹配串形如 exports:库通配符!函数名,库部分支持 * 通配:
| 通配符 | 匹配 |
|---|---|
*libssl* | 任何含 libssl 的库名 |
*libssl.so* | 库名以 libssl.so 为主 |
*libboringssl* | BoringSSL |
*conscrypt* | Conscrypt 自带 SSL 实现 |
多匹配时的优先级
当同一符号在多个库里匹配到(如系统 libssl 与 Conscrypt 自带 SSL 实现并存),initializeGlobals 会优先选 com.android.conscrypt 的实现,因为 Android 上 App 流量实际走 Conscrypt。详见 initializeGlobals 解析。