天天看點

接口測試實戰 | Android 高版本無法抓取 HTTPS,怎麼辦?問題分析最終解決方案

本文為霍格沃茲測試學院 @yuye 同學的接口測試實踐筆記。

在接口測試中,相信很多人都遇到過 Android 高版本(Android7.0 以上)系統無法抓包的問題。

由于在測試過程中對分析定位問題很不友善,是以就想找開發的同學幫忙,結果開發也說搞不定,那隻能自己解決了。

接口測試實戰 | Android 高版本無法抓取 HTTPS,怎麼辦?問題分析最終解決方案

問題分析

問題原因分析如下:

  • 問題:Android6.0 及以下系統可以抓包,而 Android7.0 及以上系統不能抓包;
  • 原因:Android7.0+ 的版本新增了證書驗證,是以 App 内不再像原來一樣預設信任使用者的證書;

參考網上資料得到如下解決方案:

方案一

在 Android 工程目錄的 res 底下建立一個 xml 檔案夾,然後在内部建立一個名為 “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"           

然後重新編譯打包即可抓包,這對開發童鞋來說,也很友善。但是,因為測試的是企業微信小程式,想讓企業微信的開發人員幫我這麼幹,簡直是白日做夢,更不用說安全等問題...

方案二

找一個低于 6.0 或者等于 6.0 版本的 Android 裝置或者模拟器,即可解決。但是考慮到:治标不治本,公司本身就沒有這樣的裝置,再加上找了幾個模拟器,都是 Android7.0 版本的,是以此方案,直接選擇放棄。

然後隻好再去找開發,開發研究了半天,結果過來告訴我,我的 iOS 是可以抓包的啊,Android 的就不知道了,一瞬間我都有點想掀桌子了......

接口測試實戰 | Android 高版本無法抓取 HTTPS,怎麼辦?問題分析最終解決方案

隻好再找測試開發同學咨詢解決方案:

  1. 使用方案一
  2. 換個工具抓,例如 Fidder,或者 BurpSuite 等(這個嘗試後發現還是不行)
  3. 直接去 NG那裡攔截,但是我需要抓取的有一部分是第三方的接口(前方已經高能,此路不通)

最後,還是有點不死心,自己繼續搜尋各種資料,終于黃天不負有心人,找到了滿足條件的最終解決方法。

最終解決方案

Charles + VirtualXposed + JustTrustMe           

實作步驟

進入 Github 下載下傳如下兩個 Page

第一步

使用如下 adb 指令分别安裝兩個 pages

adb -s R3J6R19B20004228 inatall VirtualXposed
adb -s R3J6R19B20004228 install JustTrustMe           

第二步

安裝完成進入 VirtualXposed apk 應用,點選 6 個小點進入設定頁面

接口測試實戰 | Android 高版本無法抓取 HTTPS,怎麼辦?問題分析最終解決方案

第三步

進入設定頁面,點選子產品管理,勾選 JustTrustMe(當然我并沒有找到它,可能是我這個版本不需要在手動選擇了,安裝之後自動識别到了)重新開機之後我們重新進去設定頁面,添加我們需要抓包的應用即可,我這裡選擇的企業微信做案例。

接口測試實戰 | Android 高版本無法抓取 HTTPS,怎麼辦?問題分析最終解決方案

第四步

點選添加應用,選擇需要抓包的軟體安裝:

接口測試實戰 | Android 高版本無法抓取 HTTPS,怎麼辦?問題分析最終解決方案

配置 Charles 抓包

設定 Charles 代理,此處不再說明,相信設定代理大家能自己解決,手機設定 wifi 裡面代理改成手動。輸入IP,端口:預設8888,注意手機和電腦在一個 wifi 下就 ok。

第六步

回到 VirtualXposed 上滑解鎖,打開我們之前安裝的企業微信,則發現 charles 已經成功抓取到安居客的 HTTPS 的資料包:

接口測試實戰 | Android 高版本無法抓取 HTTPS,怎麼辦?問題分析最終解決方案

總結

測試工作中,遇到問題/bug 經常會讓人很煩很慌,不知所措。但是,作為一個合格的測試人員,遇到事情,還是要努力做到「泰山崩于前而色不改,麋鹿興于左而目不瞬」(秀文采~),連開發都放棄了,咱還能保持淡定,方顯測試英雄本色!🆒

技術進階沒有捷徑,唯有一步步積累,踏坑填坑堅持走下去。這次的問題雖幾經波折,但我最終搞定之後,開發看我的眼神都不一樣了,以後提 bug 也更加有說服力了。😄

接口測試實戰 | Android 高版本無法抓取 HTTPS,怎麼辦?問題分析最終解決方案

更多技術文章分享及測試資料點此擷取

繼續閱讀