26 《吐血整理》高級系列教程-吃透Fiddler抓包教程-Fiddler如何抓取Android7.0以上的Https包-上篇( 二 )


4.騷操作
正常大道走不通 , Android 小道還是有很多的 。社區上有各種輪子可以繞開限制,但和 Fiddler 關系不大,宏哥就不展開說了 。喜歡折騰的同學可以研究一下 。
5.快速解決法我們既然已經清楚了抓不到包的原因和罪魁禍首了,針對其進行解決即可 。
5.1使用低與7.0版本安卓系統用android 7.0以下系統的設備去裝應用,是可以正常抓包,但是一般來說,android 7.0以下不管是真機還是模擬器,運行起來都是比較卡的,能接受不那么流暢體驗的用戶可以嘗試,適合小白型用戶使用 。
找一個低于 7.0 版本的 Android 設備或者模擬器,即可解決 。但是考慮到:治標不治本,公司本身就沒有這樣的設備,再加上找了幾個模擬器,都是 Android7.0 版本的,所以此方案 , 直接選擇放棄 。
然后只好再去找開發,開發研究了半天,結果過來告訴我 , 我的iOS是可以抓包的??,Android 的就不知道了,一瞬間我都有點想掀桌子了…
5.2targetSdkVersion設置為23把應用apk的targetSdkVersion設置為23及以下,也是可以正常抓包 , 但是假如是抓別人的應用,同時別人又做了防止反編譯措施的話,這個方案就不適用了 。
5.3設置信任用戶證書設置信任用戶證書,也就是自定義可信的CA , 這個也是官方網址:https://developer.android.google.cn/training/articles/security-config  給出的解決方案 。具體操作步驟如下:
1.在源碼res目錄下新建xml目錄,增加network_security_config.xml文件(工程名/app/src/main/res/xml/network_security_config.xml),參考官方文檔知道network_security_config.xml文件內容為:
<network-security-config><base-config cleartextTrafficPermitted="true"><trust-anchors><certificates src="http://img.zhejianglong.com/231017/1IH1C14-0.jpg" overridePins="true" /><certificates src="http://img.zhejianglong.com/231017/1IH11410-1.jpg" overridePins="true" /></trust-anchors></base-config></network-security-config>說明:certificates說明的src=https://www.huyubaike.com/biancheng/“system"表示信任系統的CA證書,src=https://www.huyubaike.com/biancheng/“user"表示信任用戶導入的CA證書
2.修改項目的AndroidManifest.xml文件 , 在application中增加android:networkSecurityConfig="@xml/network_security_config"
<?xml version="1.0" encoding="utf-8"?><manifest ... ><application android:networkSecurityConfig="@xml/network_security_config"... >...</application></manifest>說明:android:networkSecurityConfig的值指向的就是上一步創建的xml文件
3.然后然后重新編譯再打包安裝apk即可抓包!前提手機已經要安裝了fiddler等CA證書哈?。。?
這個方案也是僅適用于有android基礎同時懂反編譯的人員使用 。這對開發童鞋來說 , 也很方便 。但是,因為測試的是企業微信小程序,想讓企業微信的開發人員幫我這么干,簡直是白日做夢,更不用說安全等問題…
6.webview抓包失敗上面可以解決android原生抓包問題 , 但在android7.0以上的手機,開著網絡代理訪問不了webview , 若要抓包webview,需要在webview的WebViewClient中 , 將一行代碼給注釋掉:
super.onReceivedSslError(view, handler, error)這樣是為了忽略掉SSL證書錯誤,因為開啟代理后網絡會變得不安全,證書會報錯誤,webview檢測到證書錯誤之后就不請求任何數據 。注釋是為了忽略掉父類的處理 , 默認執行下去 。
6.1警告這樣的配置操作是敏感且危險的,只能用于測試環境方便抓包,線上包一定注意要恢復配置 。
6.2拓展通過查找資料,還有一個方法,通過重載WebViewClient的onReceivedSslError()函數并在其中執行handler.proceed(),即可忽略SSL證書錯誤 , 繼續加載頁面,代碼如下:
WebView webview = (WebView) findViewById(R.id.webview);webview.setWebViewClient(new WebViewClient() {@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {// 不要調用super.onReceivedSslError,因為其包含了一條 handler.cancel(),第一次訪問時無法加載,第二次以后可以加載// super.onReceivedSslError(view, handler, error);// 忽略SSL證書錯誤,繼續加載頁面handler.proceed();}}7.小結Android證書分為“用戶證書”和“系統證書”兩種 , 在設置->安全->"查看安全證書"列表中,可以看到“系統”和“用戶”兩個列表 。用戶通過瀏覽器下載安裝或者通過WLAN高級設置安裝的證書均為用戶證書 。
關于證書的兩個注意事項
(1)安裝用戶證書必須要設置開機密碼,而且設置后就不能取消,除非先刪掉所有的用戶證書 。如果安裝為系統證書就不需要設置開機密碼,自動化操作時更方便 。(2)Android 7以上版本APP默認不信任用戶證書,只信任系統證書,安裝為用戶證書,對APP的HTTPS抓包會失敗 。安裝為全局證書才能被所有APP信任,方可進行HTTPS抓包 。

推薦閱讀