Android抓包(Charles)

Charles抓包(Androidhttp/https請求)

目錄介紹

  • 01.下載安裝
  • 02.抓包代理設(shè)置
  • 03.抓包Https操作
  • 04.解決Android7.0+無法抓包https
  • 05.解決Android7.0+webview抓包失敗
  • 06.設(shè)置只在調(diào)試模式下允許抓包

01.下載安裝

下載地址(下載對應(yīng)的平臺軟件安裝即可,也可以去官網(wǎng)下載最新的安裝包)

Charles 激活碼(任選一個生成器生成注冊碼)

02.抓包代理設(shè)置

  • charles代理設(shè)置

  • 可以設(shè)置抓包數(shù)據(jù)類型,包括http與socket數(shù)據(jù)??梢愿鶕?jù)需要在proxies欄下勾選。這里簡單操作進行設(shè)置,Proxy ---> Proxy Settings默認端口是8888,根據(jù)實際情況可修改。


    image.png

Android手機代理設(shè)置

  • 首先獲取電腦ip地址

  • 第一種方式:查看本機IP地址:Help ---> Local IP Addresses


    image.png

第二種方式:命令行方式,Mac輸入ifconfig,win輸入ipconfig即可


image.png

第三種方式:系統(tǒng)偏好設(shè)置-網(wǎng)絡(luò)


image.png

然后打開手機設(shè)置代理

  • 注意:手機需要和電腦使用同一個Wi-Fi網(wǎng)絡(luò),這是前提?。?!
  • 操作步驟:打開WiFi列表 ---> 長按連接的WiFi修改網(wǎng)絡(luò)設(shè)置代理 --- > 設(shè)置代理信息


    image.png

最后抓包如下

  • http包數(shù)據(jù)如下所示
    image.png

03.抓包Https操作

  • 需要做哪些操作

  • 1.電腦上需要安裝證書

  • 2.手機上需要安裝證書

  • 1.電腦上需要安裝證書

  • 第一步安裝證書:help ---> SSl Proxying ---> install charles root certificate ---> 安裝證書

  • 第二步設(shè)置SSL屬性:Proxy ---> SSL Proxy Settings ---> 然后add操作(設(shè)置port為443,443為抓取https接口)。如下所示


    image.png
  • 2.手機上需要安裝證書

  • 第一步下載證書

  • 打開瀏覽器,輸入:chls.pro/ssl,就會自己下載到手機上,這里需要記住下載完成保存到本地的路徑。

  • 第二步安裝證書

  • 設(shè)置 ---> 更多設(shè)置 ---> 系統(tǒng)安全 ---> 加密與憑據(jù) ---> 從SD卡安裝,選擇之前保存證書的路徑。

  • 注意,有的手機是直接點擊下載的文件即可安裝,有的無法安裝,無法安裝可以把證書后綴.pem修改為.cer或.crt嘗試一下

  • 安裝操作如下圖所示


    image.png

抓https最后結(jié)果如下所示


image.png

image.png

發(fā)現(xiàn)Android7.0手機之前可以抓https包,但是Android7.0之后是無法抓https包的

  • 報錯信息:客戶端SSL握手失敗:處理證書時出現(xiàn)未知問題(certificate_unknown)


    image.png

04. Android7.0之后無法抓包https信息,往下看。
解決方法如下:
現(xiàn)象:android7.0以上的手機https抓包失敗(安裝了https證書也不行)
原因:android7.0+的版本新增了證書驗證(系統(tǒng)證書),具體如下:
1、Android 6.0(API 23)及更低版本應(yīng)用的默認網(wǎng)絡(luò)安全性配置如下:

<!-- 默認允許所有明文通信 -->
<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <!-- 信任系統(tǒng)預(yù)裝 CA 證書 -->
        <certificates src="system" />
        <!-- 信任用戶添加的 CA 證書,Charles 和 Fiddler 抓包工具安裝的證書屬于此類 -->
        <certificates src="user" />
    </trust-anchors>
</base-config>

2、而在 Android 7.0(API 24)到 Android 8.1(API 27)的默認網(wǎng)絡(luò)安全性配置如下:

<!-- 默認允許所有明文通信 -->
<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <!-- 信任系統(tǒng)預(yù)裝 CA 證書 -->
        <certificates src="system" />
    </trust-anchors>
</base-config>

3、而在 Android 9.0(API 28)及更高版本的默認網(wǎng)絡(luò)安全性配置如下:

<!-- 默認禁止所有明文通信 -->
<base-config cleartextTrafficPermitted="false">
    <trust-anchors>
        <!-- 信任系統(tǒng)預(yù)裝 CA 證書 -->
        <certificates src="system" />
    </trust-anchors>
</base-config>

對比很容易發(fā)現(xiàn),在 Android 7.0(API 24)到 Android 8.1(API 27),默認不再信任用戶添加的 CA 證書,所以也就不再信任 Charles 和 Fiddler 抓包工具的證書,所以抓取 HTTPS 包時才會失敗。而且在 Android 9.0(API 28)及更高版本上,不僅默認只系統(tǒng)預(yù)裝的 CA 證書,還默認禁止所有明文通信(不允許 http 請求)。

解決辦法:
前提:在手機端和電腦端都必須安裝https的安全證書
配置:打測試包時,項目設(shè)置默認信任所有證書(系統(tǒng)+用戶,Charles 和 Fiddler)

  1. 在工程res-xml目錄中創(chuàng)建一個名為 network_security_config.xml的文件,文件內(nèi)容如下:
<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>

2.在AndroidManifest里的標簽中,添加如下代碼,在清單文件中指向該文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
        ...
</application>
</manifest>

重新打包項目,然后抓包,即可成功。

05. webview抓包失敗

上面可以解決android原生抓包問題,但在android7.0以上的手機,開著網(wǎng)絡(luò)代理訪問不了webview,若要抓包webview,
需要在webview的WebViewClient中,將一行代碼給注釋掉:

super.onReceivedSslError(view, handler, error)

這樣是為了忽略掉SSL證書錯誤,因為開啟代理后網(wǎng)絡(luò)會變得不安全,證書會報錯誤,webview檢測到證書錯誤之后就不請求任何數(shù)據(jù)。注釋是為了忽略掉父類的處理,默認執(zhí)行下去。

警告

這樣的配置操作是敏感且危險的,只能用于測試環(huán)境方便抓包,線上包一定注意要恢復(fù)配置,不然APP會面臨被他人抓包的風險。

06.如何只在調(diào)試模式下允許抓包呢?

使用<debug-overrides>即可實現(xiàn)只在android:debuggable為true時才生效的配置:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!-- 支持 Android 7.0 以上調(diào)試時,信任 Charles 和 Fiddler 等用戶信任的證書 -->
    <debug-overrides>
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容