使用Charles對Android App的https請求進行抓包


本文背景

公司新項目要求抓取目前市面上一些熱門App的數據,經過研究發現很多App的網絡請求都使用https進行數據傳輸,這樣問題就來了,http使用明文傳輸所有請求都能攔截到,而https請求無法攔截。
所以這里我們要使用Charles來抓取https,但是筆者看了網上很多使用iOS設備進行抓取https的文章,經測試iOS8/10/11均無法進行正常抓取,即使信任證書也不行。
經過筆者的不斷嘗試,終於在Android5.0上成功抓取了https。研究后發現,在Android7.0以下可以正常使用Charles抓取。Android7.0以上應該是默認屏蔽了此種方法。

Charles安裝

Charles配置

配置電腦端的根證書

  1. 打開Charles,我這里使用的是v4.2.5版本:

  2. 安裝根證書

  3. Mac需要設置信任證書

    1. 安裝后會彈出鑰匙串訪問界面,如圖:

    2. 雙擊證書,彈出證書詳細界面,點擊『信任』選項,然后將所有設置為始終信任,如圖:

在手機端配置根證書

  1. 在電腦端選擇安裝移動端的證書:

  2. 選擇后會顯示IP與端口號,用於手機設置http代理:

  3. 手機的網絡上設置成電腦的http代理:
    此時必須保證手機和電腦在同一網絡,並且手機可以訪問電腦的ip與端口

  4. 設置完成后訪問網絡時,服務端會彈出提示,點擊Allow(同意連接):

  5. 手機瀏覽器(筆者使用Chrome)訪問chls.pro/ssl,下載證書並安裝(證書名任意):

配置電腦端的抓取規則

  1. 進入Charles的SSL代理設置:

2.勾上啟動SSL代理,並添加一個抓取規則,比如這里加上一個抓取所有https(443端口)的請求:

3.此時手機上打開https請求的應用,應該就可以正常看到https請求的數據了:如圖:

常見問題

1. 配置好后無法打開APP

在我們抓取時碰到個別APP在配置代理后無法打開,這個主要是因為該APP做了防止抓取處理,比如校驗https的證書是否合法等,這種解決方法可以通過反編譯APP,查看源碼解決,難度較大。

2. 抓取到的內容為亂碼

有的APP為了防止抓取,在返回的內容上做了層加密,所以從Charles上看到的內容是亂碼。這種情況下也只能反編譯APP,研究其加密解密算法進行解密。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM