某社交App cs签名算法解析(一) SSL双向认证

1、目标

奋飞: 老板,我们得招几个妹子呀,我们公司男女比例太失衡了。java

李老板: 你去这个App上晃晃,听说上面妹子不少。git

我去,包都抓不到,耍个毛线呀。github

TIP: 新鲜热乎的 v3.83.0安全

2、步骤

SSL双向认证

问了下谷歌,有很多同道都遇到了返回值是 400 No required SSL certificate was sent 这种状况。微信

他们一致认为,是遇到了SSL双向认证。app

不过谷歌传来的消息是,搞SSL双向认证很简单,把客户端证书,搞出来,而后再导入到 Charles,就大功告成了。工具

client.p12

在Apk包里面轻松找到 /assets/client.p12, 下一步就是找对应的证书密码,so easy嘛。学习

Jadx上,搜索字符串 "client.p12" 或者 "client.cer", 字符串却是都找到了,不过问题是,找不到这些字符串被调用的地方。ui

看来被同道们搞了好几轮,新版本的App作了修改了。this

Hook KeyStore来Dump证书

只要客户端有证书,那就必定会在使用中导入,咱们在他导入的时候Dump出来,这样应该能够通杀了。

Java.perform(function() {
    console.log("在https双向认证的状况下,dump客户端证书为p12. 存储位置:/sdcard/Download/client_keystore_{nowtime}.p12 证书密码: fenfei");
	
    Java.use("java.security.KeyStore$PrivateKeyEntry").getPrivateKey.implementation = function() {
        var result = this.getPrivateKey();
		let filePath = "/sdcard/Download/client_keystore_" + "_" + getNowTime() + '.p12';
        dump2sdcard(this.getPrivateKey(), this.getCertificate(), filePath);
        return result;
    }
	
    Java.use("java.security.KeyStore$PrivateKeyEntry").getCertificateChain.implementation = function() {
        var result = this.getCertificateChain();
		let filePath = "/sdcard/Download/client_keystore_" + "_" + getNowTime() + '.p12';
        dump2sdcard(this.getPrivateKey(), this.getCertificate(), filePath);
        return result;
    }
})

运行以前先容许这个App有读写存储卡的权限,由于最后咱们是把证书写到sd卡里面了,不然会提示:

Error: java.io.FileNotFoundException: /sdcard/Download/client_keystore__2021_05_24_xx_xx_xx_53.p12 (Permission denied)

跑一下,程序崩溃了。

这也难不倒咱们,估计大几率是被检测到了, 那么换frida端口,而后把fridaServer换成hluda-server。

再来,仍是崩溃。奇怪,还有啥呢? Xposed。 把Xposed Status关掉。 再来。

dump File
dump OK !!!
dump:/sdcard/Download/client_keystore__2021_05_24_16_48_09_24.p12

完美,证书出来了,我们赶忙拷出来。

Charles添加证书

Proxy -> SSL Porxy Settings

而后输入证书监控的host , *.sxxapp.cn ,端口是 443

火烧眉毛了,跑一把试试。

完美收工。

3、总结

frida的spawn模式启动这个App的时候会崩掉,我认为是Xposed的缘由,把Xposed关掉就行了。固然也许是个人手机环境有问题。

你们都在进步,因此要多掌握几种方法,东边不亮西边亮。

Dump证书的方法,参考 https://github.com/CreditTone/hooker 中的 keystore_dump.js 感谢大佬们提供的神奇工具。

当别人都很老实的时候,你就耍点儿小聪明;当别人都耍小聪明的时候,你就老实作人。当别人既会耍小聪明又会作老实人的时候,你就干点别的。

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,若是有人利用本文技术去进行非法商业获取利益带来的法律责任都是操做者本身承担,和本文以及做者不要紧,本文涉及到的代码项目能够去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一块儿学习探讨技术。有问题能够加我wx: fenfei331 讨论下。

关注微信公众号: 奋飞安全,最新技术干货实时推送