一、目標
奮飛: 老板,咱們得招幾個妹子呀,咱們公司男女比例太失衡了。
李老板: 你去這個App上晃晃,據(jù)說上面妹子很多。

我去,包都抓不到,耍個毛線呀。
TIP: 新鮮熱乎的 v3.83.0
二、步驟
SSL雙向認證
問了下谷歌,有不少同道都遇到了返回值是 400 No required SSL certificate was sent 這種情況。
他們一致認為,是遇到了SSL雙向認證。
不過谷歌傳來的消息是,搞SSL雙向認證很簡單,把客戶端證書,搞出來,然后再導(dǎo)入到 Charles,就大功告成了。
client.p12
在Apk包里面輕松找到 /assets/client.p12, 下一步就是找對應(yīng)的證書密碼,so easy嘛。
Jadx上,搜索字符串 "client.p12" 或者 "client.cer", 字符串倒是都找到了,不過問題是,找不到這些字符串被調(diào)用的地方。
看來被同道們搞了好幾輪,新版本的App做了修改了。
Hook KeyStore來Dump證書
只要客戶端有證書,那就一定會在使用中導(dǎo)入,我們在他導(dǎo)入的時候Dump出來,這樣應(yīng)該可以通殺了。
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有讀寫存儲卡的權(quán)限,因為最后我們是把證書寫到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關(guān)掉。 再來。
dump File
dump OK !!!
dump:/sdcard/Download/client_keystore__2021_05_24_16_48_09_24.p12
完美,證書出來了,咱們趕緊拷出來。
Charles添加證書
Proxy -> SSL Porxy Settings

然后輸入證書監(jiān)控的host , *.sxxapp.cn ,端口是 443

迫不及待了,跑一把試試。

完美收工。
三、總結(jié)
frida的spawn模式啟動這個App的時候會崩掉,我認為是Xposed的原因,把Xposed關(guān)掉就好了。當然也許是我的手機環(huán)境有問題。
大家都在進步,所以要多掌握幾種方法,東邊不亮西邊亮。
Dump證書的方法,參考 https://github.com/CreditTone/hooker 中的 keystore_dump.js 感謝大佬們提供的神奇工具。

當別人都很老實的時候,你就耍點兒小聰明;當別人都耍小聰明的時候,你就老實做人。當別人既會耍小聰明又會做老實人的時候,你就干點別的。