1. 程式人生 > 其它 >Charles 移動裝置抓包

Charles 移動裝置抓包

Charles 移動裝置抓包(轉載)

除了最常見的網頁爬蟲,還有一種是針對客戶端軟體的爬蟲。前者使用範圍廣泛,對後者的資料採集需求越來越大。潛水多年的小白第一次發帖,內容如有不當,請隨意斧正。

常見客戶端:

PC( Windows 、macOS 、Linux )、Android 、IOS

抓包工具:

支援平臺:Windows 、 macOS 、 Linux

以下內容都是基於這款抓包軟體。

需求分析:

想要批量或者自動獲取某一平臺客戶端的某些資料。要做到我們的需求,需要使用網路抓包工具。據瞭解得知,網路協議層的每一層幾乎都有對應的抓包工具。現如今最常用的協議是 https、http 這兩種網路傳輸協議。

HTTP 協議抓包:

http 協議不包含 SSL ,抓包時只需要簡單配置網路代{過}{濾}理即可抓取,而 https 需要安裝證書並且信任證書才能抓取,否則無法解析顯示為紅色的 unknown 。

HTTPS 協議抓包:

https 協議在配置網路代{過}{濾}理的前提下還需要安裝證書,並且必須讓系統信任安裝的證書才能實現對 https 協議進行抓包。

Charles 快速上手:

主介面:

常用功能選單:

常用功能選單,故名思義這兩個選單是經常會用到的,這裡先做一些說明:

Proxy:

  • Start Recording : 開始捕獲網路流量,對應主介面的紅點圖示。
  • Start Throttling : 進入低速網路模式,對應主介面的烏龜圖示。
  • macOS Porxy : 勾選時 Charles 處理 macOS 的網路流量。
  • Proxy Settings : 配置 HTTP 代{過}{濾}理埠,在給同一區域網內裝置安裝證書,或是設定代{過}{濾}理時需用到,常見設定為 8888。這裡還包含一些 HTTP 、SOCKS 相關的設定。
  • SSL Porxying Setting : 配置是否啟用 SSL ,啟用時需配置主機(HOST)與埠(PORT)勾選上即為啟用狀態,在不清楚主機和埠時,可將主機與埠都設定為*(星號),這樣做可以捕獲 http 和 https 的所有流量。

Help —— SSL Porxying:

  • Install Charles Root Certificate : 安裝證書到 macOS 系統內。
  • Install Charles Root Certificate on a Mobile Device or Remote Browser : 為同一區域網內的其它裝置安裝 Charles 證書.
  • Save Charles Root Certificate : 儲存 Charles 證書到本地,可選 .pem .cer 兩種型別的檔案,推薦選擇 .pem ,後續便於 Android 裝置匯入證書。

安裝 Charles 證書

  • macOS :

    1. Charles 主介面點選 help —— SSL Porxying —— Install Charles Root Certificate ,預設安裝即可完成安裝。
    2. 正如前面所說,安裝完以後還需要讓系統信任這個證書,具體做法:在所有程式中找到 鑰匙串訪問 —— 左欄下方 —— 點選證書 —— 雙擊 Charles Proxy CA ——信任 ,可以將所有的選項都設定為 始終信任。即可成功開啟對 HTTPS 協議的捕獲。
  • IOS :

    1. Charles 主介面點選 help —— SSL Porxying ——Install Charles Root Certificate on a Mobile Device or Remote Browser 會出現 " Configure you device …… HTTP proxy on192.168.1.6:8888 , then browse to chls.pro/ssl " 這裡的 8888 在 Proxy —— Proxy Settings 內設定。
    2. 手機或者其它裝置要和抓包主機連線到同一區域網(網路頻段也有影響),開啟 設定 —— 無線區域網 —— 點選與抓包主機同一個區域網的那個 Wi-Fi 拉到底部 —— HTTP 代{過}{濾}理 —— 配置代{過}{濾}理 —— 手動 —— 伺服器填前面的 192.168.1.6 埠填 8888 —— 右上角儲存 。
    3. 回到主介面,開啟 Safari 瀏覽器,在位址列輸入前面的 chls.pro/ssl 開啟。Charles 會彈出是否允許連線,點選 Allow 。手機上允許下載一個配置描述檔案,下載完成後關閉。
    4. 手機開啟設定 —— 通用 —— 拉到底部找到 描述檔案 開啟 —— 點選 Charles Proxy CA(……)—— 右上角安裝 —— 輸入密碼再次安裝 —— 完成後拉到上面找到 關於本機 進入 —— 拉到底部找到 證書信任設定 進入 —— 開啟 針對根證書啟用完全信任。
    5. 完成以上步驟後,即可抓取 IOS 客戶端資料。
  • Android:

    自 Android 7.0 以後無法信任第三方根證書,抓取第三方 app 資料時,現有方法幾乎都需要 Root 裝置,自行考慮風險。還可以使用 Android 模擬器來抓取資料,但是模擬器的資訊不是很完整,容易被客戶端app後臺所識別出來,比較費力不討好。現有的幾種 Root 後抓取 HPPTS 的方法我都嘗試過:

    使用 Xposed & edxposed 模組,在安裝了 Xposed & Edxposed 框架的前提下,再安裝TrustMeAlready模組並激活(經測試,部分系統 Android 10 ,部分軟體無法使用,比如X信小程式);

    安裝 VirtualXposed ,再安裝TrustMeAlready模組並激活,因為 VirtualXposed 較容易被第三方app識別,從而禁止使用,優勢是不需要root ;

    Root 後將 Charles 根證書匯入並信任根證書,這個辦法其實是將 Charles 根證書轉換後放到 Android 系統根目錄內。

    1. Charles 主介面點選help —— SSL Porxying ——Save Charles Root Certificate ,選擇儲存為 .pem 檔案,以下只講這種檔案的轉換方法。.cer 檔案轉換方法請自行尋找,歡迎交流。

    2. 儲存好 .pem 檔案後,macOS 需要安裝 openssl ,然後開啟 終端app —— 輸入 openssl x509 -subject_hash_old -in Charles根證書檔案.pem 回車結果如下,圈起來的這串字元很重要: d2479ff1

    3. 上一步完成後,將下載的 charles-proxy-ssl-proxying-certificate.pem 重新命名為 d2479ff1.0 ,將 d2479ff1.0 檔案放到手機內。

    4. 手機端安裝 MT檔案管理器 ,開啟授予 root 許可權,使用 MT檔案管理器複製到 /system/etc/security/cacerts/ 資料夾內,重啟手機,在設定內搜尋 加密與憑據—— 開啟後找到 信任的憑據 開啟 —— 在系統部分可以找到 詳細資訊為 Charles Proxy CA (……) 的證書,代表成功匯入證書到系統中。 可使用 Charles 抓取 HTTPS 協議。

利用 Magisk 匯入證書

自 Android O(8.0)以來,即使是獲取了 root 許可權,也很難修改系統分割槽檔案,無法進行讀寫。且當下手機 root 方式都是利用Magisk修補 boot ,Magisk 還可以利用旁載的方式載入各種自定義模組,包括且不限於修改、替換系統檔案。那麼在這裡我們可以根據上文所訴,建立一個 Magisk 補丁包,用以匯入證書檔案到根目錄。
首先還是需要安裝Charles以及 OpenSSL( Windows 推薦使用choco install openssl 命令安裝,需使用帶管理員許可權的 powershell )

匯出證書檔案

依次點選 charles -> help -> SSL Proxying -> Save Charles Root …… 選擇位置匯出 Charles 證書檔案

轉換證書檔案

命令列切換到證書所在資料夾,執行:


openssl x509 -subject_hash_old -in 證書檔案.pem

將證書檔案改名為 d2479ff1.0 (以上文為例,字尾為 .0 )

建立 Magisk 模組

首先需要 Magisk 模組模板 magisk-module-template ,解壓後文件列表為:


└─magisk-module-template-master │customize.sh │module.prop │post-fs-data.sh │README.md │service.sh │system.prop │ ├─META-INF │└─com │ └─google │ └─android │ update-binary │ updater-script │ └─system #內部資料夾為自建 └─etc └─security └─cacerts

上圖詳細檔案說明詳見Developer Guides這裡我們關注 system 資料夾及子資料夾即可。模板檔案是僅有 system 而沒有其子資料夾的,system/etc/security/cacerts/ 剛好對應著我們本來要放證書的地方,即系統證書所在目錄.此時將我們的證書檔案放到 cacerts 資料夾內,將整個資料夾壓縮為 zip 檔案,放入手機內,在 Magisk 內刷入即可,驗證方式如上。