hook Pinning 定位详解
🔍 script.js 定位 App 在哪做了 SSL Pinning 校验。
📎 源码在线查看:
script.js(Pinning locator)
做什么
r0capture 不绕过 Pinning(详见 SSL Pinning),但帮你找到 Pinning 代码位置,便于逆向研究。
hook 的入口
javascript
// TrustManager 校验
var TM = Java.use("com.android.org.conscrypt.TrustManagerImpl");
TM.checkServerTrusted.overload(...).implementation = function (chain, ...) {
console.log("Pinning 校验被调用:");
console.log(Log.getStackTraceString(Throwable.$new()));
return this.checkServerTrusted(chain, ...);
};打印调用栈
堆栈里会出现 App 自己的 Pinning 实现类(如 com.x.SecurityUtil.checkPinning),定位到代码位置。
常见 Pinning 实现位置
| 框架 | Pinning 类 |
|---|---|
| OkHttp | CertificatePinner.check |
| Conscrypt | TrustManagerImpl.checkServerTrusted |
| 自定义 | App 的 X509TrustManager 实现 |
| Native | native 层校验(Java hook 抓不到) |
与 native Pinning 的区别
Java 层 Pinning 能用 Java hook 定位;native 层 Pinning(如某些加固 App)需 native hook + 逆向。r0capture 的定位主要覆盖 Java 层。