某社交App cs簽名算法解析(一) SSL雙向認證

1、目標

奮飛: 老闆,我們得招幾個妹子呀,我們公司男女比例太失衡了。java

李老闆: 你去這個App上晃晃,聽說上面妹子不少。git

main.png

我去,包都抓不到,耍個毛線呀。github

TIP: 新鮮熱乎的 v3.83.0安全

2、步驟

SSL雙向認證

問了下谷歌,有很多同道都遇到了返回值是 400 No required SSL certificate was sent 這種狀況。微信

他們一致認爲,是遇到了SSL雙向認證。markdown

不過谷歌傳來的消息是,搞SSL雙向認證很簡單,把客戶端證書,搞出來,而後再導入到 Charles,就大功告成了。app

client.p12

在Apk包裏面輕鬆找到 /assets/client.p12, 下一步就是找對應的證書密碼,so easy嘛。工具

Jadx上,搜索字符串 "client.p12" 或者 "client.cer", 字符串卻是都找到了,不過問題是,找不到這些字符串被調用的地方。oop

看來被同道們搞了好幾輪,新版本的App作了修改了。學習

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

import.png

而後輸入證書監控的host , *.sxxapp.cn ,端口是 443

host.png

火燒眉毛了,跑一把試試。

rc.png

完美收工。

3、總結

frida的spawn模式啓動這個App的時候會崩掉,我認爲是Xposed的緣由,把Xposed關掉就行了。固然也許是個人手機環境有問題。

你們都在進步,因此要多掌握幾種方法,東邊不亮西邊亮。

Dump證書的方法,參考 github.com/CreditTone/… 中的 keystore_dump.js 感謝大佬們提供的神奇工具。

ffshow.jpg

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

TIP: 本文的目的只有一個就是學習更多的逆向技巧和思路,若是有人利用本文技術去進行非法商業獲取利益帶來的法律責任都是操做者本身承擔,和本文以及做者不要緊,本文涉及到的代碼項目能夠去 奮飛的朋友們 知識星球自取,歡迎加入知識星球一塊兒學習探討技術。有問題能夠加我wx: fenfei331 討論下。

關注微信公衆號: 奮飛安全,最新技術乾貨實時推送

相關文章
相關標籤/搜索