声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
文章有疑问的,可以公众号发消息问我,或者留言。我每天都会看的。
前言
朋友逆向APP遇到证书校验过不去,他试了几个常用的frida脚本都不行。
他把apk发给了我,于是有了下面的文章。
思路
okhttp3是怎么校验证书的呢?
// 配置 OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.sslSocketFactory(sslContext.getSocketFactory(), new TrustServerCerts(serverCertificate))
.hostnameVerifier((hostname, session) -> true) // 不验证域名
.addInterceptor(loggingInterceptor)
.build();
如果我们不想让okhttp进行证书校验,一般会写一个TrustAllCerts类,新人所有证书。
public class TrustAllCerts implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
那么我们能不能学这个思路,用frida写一个TrustAllCerts的类,替换SSLSocketFactory中进行证书校验的类呢?
当然可以。
frida 脚本
Java.perform(function() {
// 创建TrustAllCerts类,信任所有证书
var TrustAllCerts = Java.registerClass({
name: 'com.example.TrustAllCerts',
implements: [Java.use('javax.net.ssl.X509TrustManager')],
methods: {
checkClientTrusted: function(chain, authType) {},
checkServerTrusted: function(chain, authType) {},
getAcceptedIssuers: function() { return []; }
}
});
// 自己写一个context.init
var SSLContext = Java.use('javax.net.ssl.SSLContext');
var context = SSLContext.getInstance("TLS");
context.init(null, [TrustAllCerts.$new()], null);
var OkHttpClientBuilder = Java.use('okhttp3.OkHttpClient$Builder');
//重写OkHttpClientBuilder.sslSocketFactory方法,让他不管传入什么参数,都默认返回TrustAllCerts
OkHttpClientBuilder.sslSocketFactory.overload('javax.net.ssl.SSLSocketFactory', 'javax.net.ssl.X509TrustManager').implementation = function(sf, tm) {
// 替换为信任所有证书的factory
return this.sslSocketFactory(context.getSocketFactory(), TrustAllCerts.$new());
};
});
参考资料
-
okhttp 证书绑定流程 ssl pinning分析 https://bbs.kanxue.com/thread-285064.htm
原文始发于微信公众号(进击的HACK):frida绕过OKhttp3证书单向绑定(附脚本)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论