客户端证书导出
少数高安全级别的 App 用双向 TLS 认证——不仅客户端校验服务器证书,服务器也校验客户端证书。这种 App 的 APK 里内嵌了客户端证书(.p12 / .bks),r0capture 能把它扒出来。
双向认证 vs 单向认证
双向认证时,客户端证书通常打包在 App 里(受口令保护的 .p12 文件)。逆向想复刻这个客户端,就得拿到证书。
r0capture 怎么导出
r0capture hook 了 KeyStore 的加载逻辑,在 App 初始化 SSL 时拦截到证书对象,导出到 /sdcard/Download/:
使用方法
必须用 Spawn 模式(证书只在启动早期加载一次),且先给 App 存储权限:
bash
# 1. 给 App 存储卡读写权限
adb shell pm grant com.example.app android.permission.WRITE_EXTERNAL_STORAGE
# 2. Spawn 模式启动(不要加 -p)
python3 r0capture.py -U -f com.example.app -v
# 3. 等 App 跑起来,看到导出日志后 Ctrl+C
# 4. 从设备拉证书
adb pull /sdcard/Download/com.example.app.xxx.p12 ./证书密码
导出的 .p12 默认密码:r0ysue
用 keystore-explorer 打开查看里面的证书和私钥:
注意事项
不是所有 App 都有客户端证书
只有配置了服务器验证客户端机制的 App,APK 里才会包含客户端证书。多数普通 App 没有这个,导不出东西是正常的。
多次导出都可用
同一个 App 的证书可以导出多份,每一份都能用——因为导出的是证书/私钥本身,不是一次性凭证。
实战篇见 实战演练。