1. 程式人生 > 其它 >Fiddler對安卓高版本進行抓包解決方案以及分析 進階二

Fiddler對安卓高版本進行抓包解決方案以及分析 進階二

今天是2021年的最後一天了,多分享一些乾貨吧!看過上一章節教程後會有同學疑惑,我也一步一個腳印的,跟著流程走也設定了代理以及安裝了證書,有的同學會發現 為什麼手機不能夠連線網路了呢?細心一點的同學會發現抓包抓的全部都是http協議的請求,沒有一個https協議請求呢?然而有的同學卻能夠進行正常的抓取app得包呢?

從最最最基本得開始吧,

HTTP 協議發展至今,已經有二十多年的歷史,整個發展的趨勢主要是兩個方向:效率 & 安全。

• 效率方面,從 HTTP1.0 的一次請求一個連線,到 HTTP1.1 的連線複用,到 SPDY/HTTP2 的多路複用,到 QUIC/HTTP3 的基於 UDP 傳輸,在效率方面越來越高效。

•安全方面,從 HTTP 的明文,到 HTTP2 強制使用 TLSv1.2,到 QUIC/HTTP3 強制使用 TLSv1.3,越來越注重資料傳輸的安全性。總而言之,HTTP 協議的發展對,使用者是友好的,但是對開發者而言卻不那麼友善。

• 抓包是每個程式設計師的必修技能之一,尤其是在介面除錯和程式逆向方面具有廣闊的用途。但是,隨著越來越多的通訊協議使用加密的 HTTPS,而且系統層面也開始強制規定使用 HTTPS,抓包似乎是顯得越來越難了。

一、抓包原理

幾乎所有網路資料的抓包,都是採用中間人的方式(MITM),包括大家常用的 Fiddler、Charles 等知名抓包工具,HttpCanary 同樣是使用中間人的方式進行抓包。

從上面這個原理圖,可以看出抓包的核心問題主要是兩個:

  • MITM Server 如何偽裝成真正的 Server;

  • MITM Client 如何偽裝成真正的 Client;

第一個問題,MITM Server 要成為真正的 Server,必須能夠給指定域名簽發公鑰證書,且公鑰證書能夠通過系統的安全校驗。比如 Client 傳送了一條 https://www.baidu.com 的網路請求,MITM Server 要偽裝成百度的 Server,必須持有 www.baidu.com 域名的公鑰證書併發給 Client,同時還要有與公鑰相匹配的私鑰。

MITM Server 的處理方式是從第一個 SSL/TLS 握手包 Client Hello 中提取出域名 www.baidu.com,利用應用內建的 CA 證書建立 www.baidu.com 域名的公鑰證書和私鑰。

建立的公鑰證書在 SSL/TLS 握手的過程中發給 Client,Client 收到公鑰證書後會由系統會對此證書進行校驗,判斷是否是百度公司持有的證書,但很明顯這個證書是抓包工具偽造的。為了能夠讓系統校驗公鑰證書時認為證書是真實有效的,我們需要將抓包應用內建的 CA 證書手動安裝到系統中,作為真正的證書發行商(CA),即洗白。這就是為什麼,HTTPS 抓包一定要先安裝 CA 證書。

第二個問題,MITM Client 偽裝成 Client。由於伺服器並不會校驗 Client(絕大部分情況),所以這個問題一般不會存在。比如 Server 一般不會關心 Client 到底是 Chrome 瀏覽器還是 IE 瀏覽器,是 Android App 還是 iOS App。

當然,Server 也是可以校驗 Client 的,這個後面分析。

二、Android6.0 及以下系統可以抓包,而 Android7.0 及以上系統不能抓包(因為Android7.0+ 的版本新增了證書驗證,所以 App 內不再像原來一樣預設信任使用者的證書)

三、解決方案

  1、讓安卓開發解決,重新打包,對於安卓開發同學來說無非是多加幾行程式碼的事,但是如果要想抓取別人產品的HTTPS包,那這種方式就行不通了。

  2、換一部Android6.0以下的手機/用系統6.0一下的模擬器安裝app,可以解決這個問題

  3、Fiddler + VirtualXposed + JustTrustMe【主要講解第三種方案】

四、解決過程以及方法

APP內建了對自家證書的校檢,因此抓包時,會因為檢測到自簽名證書而拒絕聯網。而Xposed能使用hook的方式來繞過它,所以VirtualXposed是一個免root的不錯選擇。

首先進入 Github 下載如下兩個 Page(實在不行通過app瀏覽器下載VirtualXposed 以及 JustTrustMe ,很方便)

  • VirtualXposed:https://github.com/android-hacker/VirtualXposed
  • JustTrustMe:https://github.com/Fuzion24/JustTrustMe
  • 1.使用如下 adb 命令分別安裝兩個 pages

        adb -s C7YVB20413007239 install D:\chomeDow\VirtualXposed_0.18.2.apk
        adb -s C7YVB20413007239 install D:\chomeDow\JustTrustMe.apk

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

  • 3.進入設定頁面,點選模組管理,勾選 JustTrustMe(我這裡沒有找到它,可能是我這個版本不需要在手動選擇了,安裝之後自動識別到了)重啟之後我們重新進去設定頁面,新增我們需要抓包的應用即可,我這裡選擇的釘釘做案例。
  • 4.點選新增應用,選擇需要抓包的軟體安裝:

    5.配置 Fiddler 抓包

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

五、總結概述

總之一句話,如果能給開發商量讓開發加幾行程式碼,如果不指望開發那麼就自己下載一個模擬器,降低安卓版本,都不想操作就安裝 VirtualXposed 能使用hook的方式繞過它。

本文來自部落格園,作者:ganfd,轉載請註明原文連結:https://www.cnblogs.com/ganfd/p/15753762.html