原部落格位址:https://www.52pojie.cn/thread-967606-1-1.html
抓包的重要性網絡抓包,是Android應用逆向分析的重中之重,很多時候我們拿到一個APP,不知道從何入手分析,往往是從抓包開始,先弄清楚他與伺服器通信的内容,如果一目了然,我們完全可以照搬,自行寫一個程式來模拟,如果有一些加密字段和随機字段,也不用擔心,我們可以從抓包中了解到一些關鍵的URL和session之類的資訊,然後再反編譯分析代碼的時候,這些字元串可以幫助我們更快的定位關鍵代碼所在之處。Fiddler的使用Fiddler簡直是HTTP抓包分析的神器,比Chrome等浏覽器自帶的調試工具高不知道哪去了,浏覽器自帶的調試工具,基本隻能檢視包内容,而Fiddler除了檢視,還可以針對不同類型的内容進行格式化,觀賞效果真的不要太爽。除了“看”資料包,它還可以一鍵重發HTTP請求,修改請求内容并重發HTTP請求,攔截修改資料包,傳回預設的欺騙性内容等,還可以編寫腳本進行更進階的自動化處理。 廢話不多說,到Fiddler官網下載下傳安裝:https://www.telerik.com/fiddler ![]() 接下來,我們要開啟Fiddler的HTTPS抓包功能,否則隻能看到HTTP請求的内容,而HTTPS請求則是密文。 在Fiddler中點選 [Tools] — [Options] — [HTTPS] 勾選如下設定: 然後我們在手機浏覽器中打開http://192.168.1.100:8888 下載下傳Fiddler根證書并安裝 這是Fiddler解密HTTPS通信的關鍵,Fiddler對HTTPS包解密的原理是中間人攻擊,對用戶端聲稱自己的服務端,對服務端聲稱自己的用戶端,兩頭欺騙。當然要想欺騙成功,前提是讓用戶端信任自己的根證書,接下來就可以愉快的觀看HTTPS請求明文内容了。 暢快的抓包Fiddler這個抓包方法,不僅對Android有用,對IPhone也有用。接下來在手機上,無論是打開浏覽器,打開手機上的應用,應用内嵌的WebView,我們都可以在Fiddler中看到HTTP/HTTPS請求内容,但細心檢視就會發現,還是有的HTTP包裝不到。一般能抓到包的幾種情況:
注意!Android7.0以後抓包失敗以前我一直都是在Android5.1的手機上抓包分析應用,屢試不爽,但是近來使用Android7.1和Android8.1的手機,發現按照上面設定以後,盡管向Android導入了Fiddler的根證書,還是沒法抓到HTTPS包的内容。以 [雲閃付] 為例,具體表現為APP中的WebView無法打開内容,和網絡斷開了一般,Fiddler中可以看到大量的CONNECT然後就沒有下文了。 回顧之前我們總結的Fiddler抓不到包的原因 《Windows抓包指南(二):Fiddler抓不到的包是怎麼回事?》可以猜想,很可能在Android7.0以及以後的版本,即便是導入了Fiddler根證書,但是APP的URLConnection、OkHttp、WebView,仍然不信任系統中導入的Fiddler根證書。 驗證猜想自行編寫Android應用,分别使用URLConnection、OkHttp發起HTTPS請求,用WebView打開HTTPS的網頁,看看出了什麼錯誤。 運作後果然抛出了異常: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValIDAtorException: Trust anchor for certification path not found. 不出所料,和我們之前在Windows上分析的情況一樣,用戶端并不信任我們導入系統的Fiddler根證書,那為什麼在Android6.0及以前能正常工作呢?經過查閱資料,這個改動果然是從Android7.0開始的。 檢視Android官方文檔說明:https://developer.android.com/training/articles/security-config.html By default, secure connections (using protocols like TLS and HTTPS) from all apps trust the pre-installed system CAs, and apps targeting Android 6.0 (API level 23) and lower also trust the user-added CA store by default. 果然,在Android 6.0 (API level 23)及以前,APP預設信任系統自帶的CA憑證以及用于導入的CA憑證,Android 6.0 (API level 23)以後,APP預設隻信任系統自帶的CA憑證,對于使用者導入的不予理會。 也就是說,關于 [network-security-config],在Android 6.0 (API level 23)及以前預設是這樣的: Android 7.0 (API level 24) 及以後是這樣的: 同時在上面的連結中,Google也給出了辦法,怎麼在Android7.0及以後的系統中,讓APP信任我們手工導入的CA憑證。 那就是在編譯APK之前,在你的Android項目的res檔案夾下建立xml檔案 [net_security_config.xml] 内容為: 然後在AndroidManifest.xml中的application标簽下添加 編譯安裝,然後該APP就信任使用者添加的CA憑證,進而Fiddler就可以抓到它的HTTPS包并解密内容。 Are You Kidding Me?什麼?你讓我重新編譯APP?我就是要分析第三方APP的通信協定,你讓我重新編譯微信?重新編譯QQ? 非也非也,還記得我們之前在《Windows抓包指南(一):Proxifier+Fiddler對第三方程式強制抓包》中說的嗎? 有條件要上,沒有條件創造條件也要上! 四個解決方案強上的辦法有四個: ① 重新打包目标APK,修改AndroidManifest.xml 我們可以使用Apktool等工具對目标APK進行解包,添加 [net_security_config.xml] 并修改 [AndroidManifest.xml] 然後重新打包。但是現在很多應用都做了防打包處理,要麼利用Apktool弱點,制造錯誤讓Apktool抛異常,要麼重新打包後程式校驗自身證書,校驗失敗無法啟動,罷工。 ② Root手機,安裝Xposed架構,使用JustTrustMe子產品幹它 這個方案實際上就是之前我們在 《Windows抓包指南(二):Fiddler抓不到的包是怎麼回事?》中的思路在Android上的實踐。Xposed的JustTrustMe子產品Hook了Android SDK的HTTP庫,強制跳過SSL證書驗證,不管是真證書還是假證書,一律驗證通過,于是Fiddler作為中間人攻擊制造的假證書也被通過了。 JustTrustMe項目源代碼:https://github.com/Fuzion24/JustTrustMe 需要注意的是JustTrustMe有個坑,不要下載下傳它Github中編譯的Latest release版本,其實那是一個很古老的版本,對于APP内嵌的WebView沒有做處理,安裝以後,URLConnection、OkHttp通信的HTTPS是可以抓到了,但是APP内嵌的WebView仍然出錯。是以最好git clone它的最新源代碼,然後自行編譯。 也可以下載下傳我編譯的最新版本:https://github.com/encoderlee/JustTrustMe/releases/download/v0.3/JustTrustMe_20190516.apk 當然這個方案也有缺點,畢竟手機被Root後,還安裝了Xposed架構,有的APP可是會檢測的,發現手機被Root,或者自身被Xposed Hook,就罷工了。 ③退縮,使用Android5.1 Android6.0的手機來抓包分析 ④終極大法,購入Google親兒子手機,比如Nexus Pixel,下載下傳Android AOSP代碼,直接修改Android系統源代碼,強行驗證所有SSL證書為真,編譯,刷機,愉快工作。 愉快的抓包分析不要高興的太早此處,雖然依舊能抓到大部分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自帶服務端證書,除了自帶證書什麼都不信 當然,兵來将擋,水來土掩,針對各種情況再逐一對症分析,弄清楚原理,才能解決更多的難題,在逆向工程的道路上走的越遠。 抓包的基本方法已經介紹完畢,後續文章将會分享一些我在工作中遇到的Windows、Android平台上無法抓包的難題及解決方案,感謝持續關注。。。 本文由encoderlee發表于CSDN部落格:https://blog.csdn.net/CharlesSimonyi/article/details/90493122 轉載請注明出處 |
20190524002010766.png (170.93 KB, 下載下傳次數: 0)
描述