《吐血整理》高級系列教程-吃透Fiddler抓包教程(28)-Fiddler如何抓取Android7.0以上的Https包-下篇
1.簡介
雖然依舊能抓到大部分Android APP的HTTP/HTTPS包,但是別高興的太早,有的APP為了防抓包,還做了很多操作:
① 二次加密
有的APP,在涉及到關鍵數據通訊時,會將正文二次加密後才通過HTTPS發送,我們抓包抓到的是一堆二進位base64
② 自帶HTTP Client
像支付寶那樣的變態,自己帶了一個基於so的HTTP Client庫,對於關鍵數據,都不走URLConnection和OkHttp,而是走自己的HTTP Client庫,甚至一些WebView頁面的渲染,都是先用自帶的HTTP Client請求得到json數據,然後填到HTML模板裡面,再在WebView里渲染出來。
③ SSL/TLS Pinning,APP自帶服務端證書,除了自帶證書什麼都不信
apk在開發時就將服務端證書一塊打包到客戶端里。這樣在HTTPS建立時與服務端返回的證書比對一致性,進而識別出中間人攻擊後直接在客戶端側中止連接。
解決原理:
客戶端不是會做兩個證書間的一次性校驗嗎,那麼就通過hook的方式將此次校驗的結果返回true或者乾脆不讓其做校驗。當然這種做法只能在越獄環境下實現,但對於抓包來說,這已經足夠了。
2.方案一
方案一:Xposed+JustTrustMe+Android模擬器(Android手機需要Root,該方法有手機變磚風險,建議在模擬器下操作)。
大名鼎鼎得Xposed,是Android平台上最負盛名的一個框架。在這個框架下,我們可以載入很多插件App,這些插件App可以直接或間接操縱系統層面的東西,比如操縱一些本來只對系統廠商才open的功能(實際上是因為Android系統很多API是不公開的,而第三方APP又沒有許可權)。有了Xposed後,理論上我們的插件APP可以hook到系統任意一個Java進程(zygote,systemserver,systemui)。
功能太強大,自然也有缺點。Xposed不僅僅是一個插件載入功能,而是它從根上Hook了Android Java虛擬機,所以它需要root,所以每次為它啟用新插件APP都需要重新啟動。而如果僅是一個插件載入模組的話,當前有很多開源的插件載入模組,就沒這麼複雜了。
Xposed框架以在不修改APK文件的情況下修改程式的運行。
這套框架需要設備解鎖了Bootloader方可安裝使用[1](root為解鎖Bootloader的充分不必要條件,而xposed安裝僅需通過TWRP等第三方Recovery卡刷安裝包而不需要設備擁有完整的root許可權)。
(1) xposed 是啥?
xposed是一個框架,上面有很多模組,這些模組都依賴於xposed這個框架,之所以稱xposed是第一神器,就是因為這些模組可以完成許多匪夷所思的功能,例如:修改微信的介面,自動搶紅包模組,自定義程式的文本,防止微信消息撤回,防止BAT三大流氓的全家桶相互喚醒、連鎖啟動,鎖屏後自動幹掉APP防止後台運行耗電,還有很多修改App或手機數據的裝B模組等等。
(2) xposed 的原理?
xposed 原理就是修改系統的關鍵文件,然後當APP調用系統API時,首先經過xposed,而這些基於xposed的模組就可以選擇性的在App調用這些api的時候干一些」壞壞」的事情,或者修改返回的結果,這樣app在運行的時候效果就會改變,但app本身並沒有被破壞,只是調用系統api的時候,Android系統的表現發生了變化,這就是鉤子,專業術語hook。所以,說白了,xposed就是個強大的鉤子框架。
來一段專業的原理解釋吧:
作者通過替換 /system/bin/app_precesss 程式控制zygote進程,使得它在系統啟動的過程中會載入Xposed framework的一個jar文件即XposedBridge.jar,從而完成對Zygote進程及其創建的Dalvik虛擬機的劫持,並且能夠允許開發者獨立的替代任何class,例如framework本身,系統UI又或者隨意的一個app。
除此之外使用這種方法的好處是ROM,APP都沒有產生任何變化,因此理論上就不會造成設備變磚,同時撤掉修改也非常容易,僅需要停用 Xposed framework 即可完全恢復原樣。
XposedInstaller(xposed框架)是一款可以在不修改APK的情況下影響程式運行(修改系統)的框架服務,基於它可以製作出許多功能強大的模組,且在功能不衝突的情況下同時運作。
JustTrustMe是Github上的一個開源工程,他是一個Xposed模組,用來禁止SSL證書驗證。以下是其簡介。
JustTrustMe:An xposed module that disables SSL certificate checking. This is useful for auditing an appplication which does certificate pinning.
Xposed安裝器下載地址
Android5.0版本以下下載地址://pan.baidu.com/s/1dEToAvJ 密碼:uiu8
Android5.0版本以上下載地址://files.cnblogs.com/files/pingming/xposedinstaller.apk
JustTrustMe Relese版本下載地址://files.cnblogs.com/files/pingming/JustTrustMe.apk github://github.com/Fuzion24/JustTrustMe/releases
以下是安裝步驟:
2.1安裝Xposed安裝器
Xposed是一款特殊的Android應用,通過替換system\bin\下面的的app_process等文件來控制zygote進程,進而實現控制手機上所有的app進程;缺點就是不能hook應用的so中的函數。
官網地址://repo.xposed.info/module/de.robv.android.xposed.installer 。如下圖所示:
敲黑板!!!官網地址中給出兩個安裝包,一個是Android版本5.0以下下載地址,一個是以上下載地址需要你根據你的手機系統版本去下載。
1.宏哥這裡直接在模擬器的瀏覽器中輸入官網地址下載,省的後邊還要將安裝包拖到模擬器中,宏哥這裡的版本是7.0。如下圖所示:
2.根據官網提示,宏哥下載大於5.0的安裝包,也就是最上邊的下載地址://forum.xda-developers.com/showthread.php?t=3034811 。如下圖所示:
3.下載完成安裝包,安裝到模擬器,如下圖所示:
2.2安裝Xposed框架
安裝好Xposed安裝器後,發現Xposed框架沒有安裝,那麼接下來就安裝Xposed框架,安裝過程需要Root許可權,完成後重啟。具體操作步驟如下:
1.需要安裝插入Xposed框架,點擊「Version89」,然後點擊「install」,如下圖所示:
竟然提示下載失敗,查了下原因應該是網路的關係(不是我們自己的網路,而是無法連接官方獲取安裝文件),這就說明其實只要能連接,不管是官方也好、神盾也罷,都是可以安裝成功的。
既然自動方式行不通,我們就手動解決這個問題。以下步驟我是在夜神模擬器上實現的,不管是真機還是其它模擬器,實現方式都一樣。具體解決方法如下:
(1)先把Xposed安裝器安裝好(隨便你用官方的還是神盾的),然後回到主介面,打開系統應用中的文件管理器(其它方式請自行努力找到這個文件夾),如下圖所示:
(2)按此順序進入文件夾:storage > emulated > 0 > Android > data > de.robv.android.xposed.installer > cache>downloads>framework
注1:在最外層直接點擊 sdcard 也能進入到 Android 那一層。
注2:有些版本或設備 Android 直接就在最外層。
注3:你可能只有cache目錄,那你自己手動創建後邊的兩個文件夾,宏哥這裡都自動創建好了。
(3)點擊夜神模擬器側邊欄的電腦圖標,選擇打開電腦文件夾,會跳轉打開電腦的目錄C:\Users\Administrator\Nox_share,將下載好的安裝器zip文件【xposed-v88-sdk25-x86.zip】複製到ImageShare目錄下即可
(4)下載MT管理器,下載地址://coolapk.com/apk/bin.mt.plus 。拖拉到模擬器中安裝完成,點擊打開應用,左邊打開Pictures目錄就可以看到剛才電腦ImageShare目錄中下載好的安裝器zip文件【xposed-v88-sdk25-x86.zip】
(5)右邊點擊進入到storage > emulated > 0 > Android > data > de.robv.android.xposed.installer > cache>downloads>framework目錄,然後長按左邊的269953fb.0文件,點擊複製即可複製到右邊打開的目錄那裡


(6)關鍵來了,直接重啟模擬器,然後打開Xposed安裝器,點擊右上角的三個點,選中【Show outdated versions】:
(7)奇蹟出現了可以看到我們下載的Version88導入成功了:
2.接下來一切就簡單了,點擊【Version88】,點擊【Install】,如下圖所示:
3.選中【永久記住選擇】,點擊【允許】,會發現安裝器安裝成功,那麼一切大功告成,
4.重啟模擬器,
5.再次打開Xposed安裝器,會發現安裝器已經激活了:
敲黑板!!!如果安裝錯誤,找到模擬器中的「設置」-「應用兼容」-「關閉」,然後重新安裝Xposed框架
2.3安裝JustTrustMe
2.3.1JustTrustMe 簡介
JustTrustMe 一個用來禁用、繞過 SSL 證書檢查的基於 Xposed 模組。
項目地址://github.com/Fuzion24/JustTrustMe
2.3.2實現原理分析
JustTrustMe 是將 APK 中所有用於校驗 SSL 證書的 API 都進行了 Hook,從而繞過證書檢查的,所以弄請原理之前,先得弄清楚 Android 上實現 Https 通訊有哪幾種方式。
Android 上實現 Https 的幾種方式
1.通過 OkHttp 來實現
2.自定義證書和 HostnameVerify 來實現 Https 校驗
3.通過 HttpsURLConnection 來實現HttpsURLConnection 中進行 SSL 證書校驗
2.3.3下載安裝JustTrustMe
1.模擬器訪問JustTrustMe項目地址,如下圖所示:
2.下載安裝包,安裝JustTrustMe到模擬器中,錯誤提示不用管。
2.4 安裝完成後打開模組選項
1.打開Xposed Installer,點擊右上角的三個橫線圖標,如下圖所示:
2.點擊「模組」,如下圖所示:
3.在模組裡面勾選JustTrustMe,重啟即可。如下圖所示:
至此,完成配置,再加上之前的Charles或者Fiddler4的HTTPS配置,就能抓取HTTPS請求了。
3.小結
今天主要講解和分享了:
(1)使用xposed hook繞過SSL證書驗證
(2)在xposed上安裝這個框架就可以了
(3)JustTrustMe的原理就是將各種已知的的HTTP請求庫中用於校驗證書的API都進行Hook,使無論是否是可信證書的情況,校驗結果返回都為正常狀態,從而實現繞過證書檢查的效果。
Xposed 框架安裝器可以看成是個Xposed 框架的管理工具,在這裡可以安裝、更新Xposed 框架,也可以卸載Xposed 框架,查看安裝日誌。也可設置Xposed 框架安裝器是否聯網更新框架及模組。
3.1JustTrustMe有個bug
需要注意的是JustTrustMe有個坑,不要下載它Github中編譯的Latest release版本,其實那是一個很古老的版本,對於APP內嵌的WebView沒有做處理,安裝以後,URLConnection、OkHttp通訊的HTTPS是可以抓到了,但是APP內嵌的WebView仍然出錯。所以最好git clone它的最新源程式碼,然後自行編譯。
也可以下載我編譯的最新版本:關注宏哥公眾號,回復「JustTrustMe」 獲取下載地址和源碼。
當然這個方案也有缺點,畢竟手機被Root後,還安裝了Xposed框架,有的APP可是會檢測的,發現手機被Root,或者自身被Xposed Hook,就罷工了。