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 :
- Charles 主介面點選 help —— SSL Porxying —— Install Charles Root Certificate ,預設安裝即可完成安裝。
- 正如前面所說,安裝完以後還需要讓系統信任這個證書,具體做法:在所有程式中找到 鑰匙串訪問 —— 左欄下方 —— 點選證書 —— 雙擊 Charles Proxy CA ——信任 ,可以將所有的選項都設定為 始終信任。即可成功開啟對 HTTPS 協議的捕獲。
-
IOS :
- 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 內設定。
- 手機或者其它裝置要和抓包主機連線到同一區域網(網路頻段也有影響),開啟 設定 —— 無線區域網 —— 點選與抓包主機同一個區域網的那個 Wi-Fi 拉到底部 —— HTTP 代{過}{濾}理 —— 配置代{過}{濾}理 —— 手動 —— 伺服器填前面的 192.168.1.6 埠填 8888 —— 右上角儲存 。
- 回到主介面,開啟 Safari 瀏覽器,在位址列輸入前面的 chls.pro/ssl 開啟。Charles 會彈出是否允許連線,點選 Allow 。手機上允許下載一個配置描述檔案,下載完成後關閉。
- 手機開啟設定 —— 通用 —— 拉到底部找到 描述檔案 開啟 —— 點選 Charles Proxy CA(……)—— 右上角安裝 —— 輸入密碼再次安裝 —— 完成後拉到上面找到 關於本機 進入 —— 拉到底部找到 證書信任設定 進入 —— 開啟 針對根證書啟用完全信任。
- 完成以上步驟後,即可抓取 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 系統根目錄內。
-
Charles 主介面點選help —— SSL Porxying ——Save Charles Root Certificate ,選擇儲存為 .pem 檔案,以下只講這種檔案的轉換方法。.cer 檔案轉換方法請自行尋找,歡迎交流。
-
儲存好 .pem 檔案後,macOS 需要安裝 openssl ,然後開啟 終端app —— 輸入 openssl x509 -subject_hash_old -in Charles根證書檔案.pem 回車結果如下,圈起來的這串字元很重要: d2479ff1
-
上一步完成後,將下載的 charles-proxy-ssl-proxying-certificate.pem 重新命名為 d2479ff1.0 ,將 d2479ff1.0 檔案放到手機內。
-
手機端安裝 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 內刷入即可,驗證方式如上。