APP爬蟲-雙向認證抓包的兩種方法

王平發表於2020-03-27

APP抓包相對繁瑣,越來越多的 APP 在 https 請求和響應時,為了防止中間人攻擊(或中間人抓包),會做證照認證,讓抓包工具抓不到請求。

雙向認證抓包

證照認證分單向認證和雙向認證,雙向認證是相較於單向認證而言的,單向認證就是隻在 APP 側做證照校驗,單向認證有現成的解決方法,比如用各種 bypass ssl 校驗的 hook 指令碼既可讓單向認證失效,例如:JustTrustMe 。如果 APP 的網路請求庫有混淆,上述 bypass ssl 指令碼無效,也有開源作者開發了自適配的 bypass 程式,可以 hook 混淆後的網路庫。比如:JustMePlush 。

簡單說了下單向認證如何解決,開始說雙向認證如何解決。

雙向認證除了要在 APP 側做證照校驗外, 對方服務端還要做證照校驗。對方服務端是要檢測證照的,不提交真正的證照給服務端,肯定會請求失敗。

 

雙向認證抓包有兩種解決方法:

一是:按照搞定證照的思路去想的話,就是要想辦法拿到真正的證照。
二是:Hook SSL 對資料解密資料的地方。

 

方法一:

因為 APP 能正常跟服務端通訊,所以真正的證照肯定是在 APP 裡面。所以就是要想辦法從 APP 裡摳出證照。摳證照有開源的 Frida Hook 指令碼。如下地址是開源作者寫的 Frida Hook 指令碼
https://gist.github.com/ceres- c/cb3b69e53713d5ad9cf6aac9b8e895d2gfgg
可以把證照從記憶體裡讀出來儲存到本地,並且證照密碼也能讀出來,非常的方便。

該指令碼的原理是:
因為 APP 在向服務端發請求時, APP 肯定會操作證照,所以如果能找到 APP 操作證照的程式碼地方, Hook 這部分程式碼,對引數做些輸出列印,證照和證照密碼就都有了。

大部分情況下,我們不用非常熟悉安卓原理,比如安卓在程式碼層面是如何操作證照的(當然熟悉更好)。因為資訊發達,一般靈活藉助搜尋引擎,靈活查閱資料,可以大體知道這些,就可以嘗試去寫 Hook 指令碼去嘗試看看。

查閱資料可以知道,安卓操作證照通常是 java.security.KeyStore 這個類,然後再瞭解下這個類的用法,引數形式。就可以嘗試去 Hook 了。上述指令碼就是 Hook java.security.KeyStore 這個類的 load 方法,load 方法的形參就是我們需要的證照和密碼。

摳出的證照和密碼,配置進 fiddler 或 charles 裡面,就可以抓到雙向認證的包。
PS: 還要注意證照的格式,摳出的證照可能是 jks 或 bks 格式的,fiddler 可能需要 p12 格式的, 所以要找工具先轉換一下格式。

 

方法二:

如果只是想抓包,還有另一種方法,不需要摳證照的方法。雖然 https 在傳輸過程中是加密的,但在終端顯示的時候,必然會解密,不然 APP 上都沒法顯示了。所以如果能知道安卓解密 SSL 加解密是哪個類, Hook 這個類, 類裡相關方法的輸入輸出肯定就是傳輸的明文資料。

所以可以查閱資料,看看相關類的用法,就可以嘗試去 Hook 列印輸出看看情況。也有開源作者開源了該 Hook 指令碼, 比如 5alt 老闆在google開源的指令碼基礎上做了修改了的 ssl_logger 。
https://github.com/5alt/ssl_logger

能夠 Hook SSL 加解密的地方,它會把傳輸的資料儲存為 pcap 格式。再使用 wireshark 開啟該 pcap檔案, 在 wireshark 上就可以看到明文的資料了。

如果要模擬向伺服器傳送請求的話,還是隻能使用第一種方法,因為客服端必須要提交正確的證照,服務端才會正確響應。必須得摳出證照,模擬請求時必須帶上證照,才能請求到資料。安卓上的證照好多是 jks/bks格式的, 如果使用 Python requests 庫的話, 不支援這個格式, 所以要想辦法把證照轉成 cert 格式的。

上面兩種方法都是使用 Frida 進行 Hook ,所以要有 Root 過的手機和明白Frida 怎麼使用就能搞定。

對於爬蟲來說,搞定抓包和請求引數加密的問題,大部分 Hook ,都可以通過 Hook 安卓系統 API 來找到 APP 程式碼位置,或直接搞定。其實很少人能很熟悉安卓系統的各種原理,大部分時候能靈活通過各種關鍵字能查到相關原理的講解文獻,文獻裡講的 API 靈活點拿去 Hook 康康線索,就能搞定很多拉。

其實使用雙向認證的 APP 還是少數, 對伺服器效能多少有影響。

 

PS :建了一個爬蟲技術和爬蟲技術做副業交流群, 可以掃我私人微信(dismissmewp)加入,備註:猿人學 。

personal wechat

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章