Skip to content

-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 解析。

相关文档 ​

基于 VitePress 构建 · 教学用途