作者:奮斗der小鳥
鏈接:http://www.reibang.com/p/3b4cd6fdd8a9
摘錄對第三方app抓包部分
如何在Android 7.X上抓第三方app的https包
一般情況下第三方我們都是抓第三方app的包,為了分析別人的數(shù)據(jù)械巡。但是像上面所說的前兩種方式一般在第三方app上不會存在的同蜻,誰也不想讓自己的app被抓包不是宗挥。
1. 我們可以通過重打包的方式強行修改配置评腺,或者強行降低 targetSdkVersion耙厚,或者強行修改別人源碼里面的信任證書的代碼融柬,然后再重打包就好了(分別針對上面1辆雾,2,3里面所說的方法窒悔,只不過通過逆向的方式添加)呜袁。
2. 通過使用Xposed的 JustTrustMe 模塊來信任所有的證書,Xposed不會用的看這里
3. 哈哈简珠,使用Android 7.0 以下的系統(tǒng)安裝應用阶界,并抓包
使用自簽名證書的應用和雙向驗證的應用
在抓取一些第三方應用的包的時候,他們比較頑固:其一呢,客戶端通過指定的方式只信任某一個證書膘融;其二芙粱,我們一般來說只有客戶端驗證服務端公鑰證書是不是合法,但是某些app氧映,比如支付寶春畔,采用雙向驗證的方式,在通信過程中屯耸,服務器會驗證app的公鑰證書拐迁,這時候蹭劈,就沒辦法使用Charles(中間人攻擊的方式)抓包了疗绣。
自簽名證書的https和CA簽名的https 區(qū)別在哪里?對https請求的影響又在哪里铺韧?關于這些問題建議了解些證書和CA相關的概念以及證書分發(fā)的流程多矮。
從前面的https 客戶端和服務器端通信的時序圖中可以看到,在握手過程中客戶端會驗證服務器的公鑰證書哈打。如果證書驗證不通過會終止請求塔逃。那么問題來了,證書合不合法誰說了算料仗?一般來說湾盗,在Android 手機出廠的時候會預裝一些證書,這些證書是CA的根證書立轧,理論上來說默認是可信任的格粪。如上圖:手機上的證書分為兩種.png 里面的系統(tǒng)列表的證書就是。對于網(wǎng)站來說氛改,這個驗證過程是由瀏覽器來做的帐萎,瀏覽器通過系統(tǒng)里面預裝的CA的根證書來驗證這個服務器的證書是不是由系統(tǒng)已經(jīng)有的這些CA簽發(fā)的。如果是那么就認為這個https的請求中的服務器證書是可信的胜卤。
但是話說回來疆导,我們在開發(fā)app的時候,請求網(wǎng)絡一般用的是網(wǎng)絡框架葛躏,這靈活性就比較好了澈段,大多數(shù)的網(wǎng)絡請求框架(HttpClient,OkHttp等)都支持修改這個證書驗證過程舰攒,就是我不用上面所說的瀏覽器驗證證書的過程败富,修改框架里面這個驗證過程,(因為CA簽發(fā)證書是要花錢的好多公司都是用的自簽名的證書)指定框架在驗證的時候只會認為和我們公司一樣的證書才認為驗證成功芒率,才能進行接下來的通信囤耳。
其實上面 通過使用Xposed的 JustTrustMe 模塊來信任所有的證書,Xposed不會用的看這里?http://www.reibang.com/p/01a9e86581b9?就是針對這些網(wǎng)絡請求框架進行攻擊的 通過hook的方式強制讓這些網(wǎng)絡框架信任所有的證書。