接口測試實戰(zhàn)|Android高版本無法抓取 HTTPS怎么辦
在接口測試中,相信很多人都遇到過 Android 高版本(Android7.0 以上)系統(tǒng)無法抓包的問題。
由于在測試過程中對分析定位問題很不方便,所以就想找開發(fā)的同學幫忙,結(jié)果開發(fā)也說搞不定,那只能自己解決了。
問題分析
問題原因分析如下:
- 問題:Android6.0 及以下系統(tǒng)可以抓包,而 Android7.0 及以上系統(tǒng)不能抓包;
- 原因:Android7.0+ 的版本新增了證書驗證,所以 App 內(nèi)不再像原來一樣默認信任用戶的證書;
參考網(wǎng)上資料得到如下解決方案:
方案一
- 在 Android 工程目錄的 res 底下創(chuàng)建一個 xml 文件夾,然后在內(nèi)部創(chuàng)建一個名為 “network_security_config.xml”的文件;
- <network-security-config>
- <base-config cleartextTrafficPermitted="true">
- <trust-anchors>
- <certificates src="system" overridePins="true" />
- <certificates src="user" overridePins="true" />
- </trust-anchors>
- </base-config>
- </network-security-config>
- 在 AndroidManifest 里的標簽中,添加代碼:
- android:networkSecurityConfig="@xml/network_security_config"
然后重新編譯打包即可抓包,這對開發(fā)童鞋來說,也很方便。但是,因為測試的是企業(yè)微信小程序,想讓企業(yè)微信的開發(fā)人員幫我這么干,簡直是白日做夢,更不用說安全等問題...
方案二
找一個低于 6.0 或者等于 6.0 版本的 Android 設備或者模擬器,即可解決。但是考慮到:治標不治本,公司本身就沒有這樣的設備,再加上找了幾個模擬器,都是 Android7.0 版本的,所以此方案,直接選擇放棄。
然后只好再去找開發(fā),開發(fā)研究了半天,結(jié)果過來告訴我,我的 iOS 是可以抓包的啊,Android 的就不知道了,一瞬間我都有點想掀桌子了......
只好再找測試開發(fā)同學咨詢解決方案:
- 使用方案一
- 換個工具抓,例如 Fidder,或者 BurpSuite 等(這個嘗試后發(fā)現(xiàn)還是不行)
- 直接去 NG 那里攔截,但是我需要抓取的有一部分是第三方的接口(前方已經(jīng)高能,此路不通)
最后,還是有點不死心,自己繼續(xù)搜索各種資料,終于黃天不負有心人,找到了滿足條件的最終解決方法。
最終解決方案
Charles + VirtualXposed + JustTrustMe
實現(xiàn)步驟
進入 Github 下載如下兩個 Page
- VirtualXposed:https://github.com/android-hacker/VirtualXposed
- JustTrustMe:https://github.com/Fuzion24/JustTrustMe
第一步
使用如下 adb 命令分別安裝兩個 pages
- adb -s R3J6R19B20004228 inatall VirtualXposed
- adb -s R3J6R19B20004228 install JustTrustMe
第二步
安裝完成進入 VirtualXposed apk 應用,點擊 6 個小點進入設置頁面

第三步
進入設置頁面,點擊模塊管理,勾選 JustTrustMe(當然我并沒有找到它,可能是我這個版本不需要在手動選擇了,安裝之后自動識別到了)重啟之后我們重新進去設置頁面,添加我們需要抓包的應用即可,我這里選擇的企業(yè)微信做案例。

第四步
點擊添加應用,選擇需要抓包的軟件安裝:

配置 Charles 抓包
設置 Charles 代理,此處不再說明,相信設置代理大家能自己解決,手機設置 wifi 里面代理改成手動。輸入IP,端口:默認8888,注意手機和電腦在一個 wifi 下就 ok。
第六步
回到 VirtualXposed 上滑解鎖,打開我們之前安裝的企業(yè)微信,則發(fā)現(xiàn) charles 已經(jīng)成功抓取到安居客的 HTTPS 的數(shù)據(jù)包:

總結(jié)
測試工作中,遇到問題/bug 經(jīng)常會讓人很煩很慌,不知所措。但是,作為一個合格的測試人員,遇到事情,還是要努力做到「泰山崩于前而色不改,麋鹿興于左而目不瞬」(秀文采~),連開發(fā)都放棄了,咱還能保持淡定,方顯測試英雄本色!
技術進階沒有捷徑,唯有一步步積累,踏坑填坑堅持走下去。這次的問題雖幾經(jīng)波折,但我最終搞定之后,開發(fā)看我的眼神都不一樣了,以后提 bug 也更加有說服力了。