抓包神器之--Charles配置和使用手冊

天降大任
charles簡介
Charles 是常用的網(wǎng)絡(luò)封包截取工具, 通過將自己設(shè)置成系統(tǒng)的網(wǎng)絡(luò)訪問代理服務(wù)器,使得所有的網(wǎng)絡(luò)訪問請求都通過它來完成,從而實現(xiàn)了網(wǎng)絡(luò)封包的截取和分析。
Charles 主要功能包括:
截取 Http 和 Https 網(wǎng)絡(luò)封包
支持重發(fā)網(wǎng)絡(luò)請求,方便后端調(diào)試
支持修改網(wǎng)絡(luò)請求參數(shù)
支持網(wǎng)絡(luò)請求的截獲并動態(tài)修改
支持模擬慢速網(wǎng)絡(luò)
主界面介紹

Charles 主要提供兩種查看封包的視圖,分別名為 “Structure” 和 “Sequence”。
- Structure 視圖將網(wǎng)絡(luò)請求按訪問的域名分類。
- Sequence 視圖將網(wǎng)絡(luò)請求按訪問的時間排序。
大家可以根據(jù)具體的需要在這兩種視圖之前來回切換。請求多了有些時候會看不過來,Charles 提供了一個簡單的 Filter 功能,可以輸入關(guān)鍵字來快速篩選出 URL 中帶指定關(guān)鍵字的網(wǎng)絡(luò)請求。

對于某一個具體的網(wǎng)絡(luò)請求,你可以查看其詳細(xì)的請求內(nèi)容和響應(yīng)內(nèi)容。如果請求內(nèi)容是 POST 的表單,Charles 會自動幫你將表單進(jìn)行分項顯示。如果響應(yīng)內(nèi)容是 JSON 格式的,那么 Charles 可以自動幫你將 JSON 內(nèi)容格式化,方便你查看。如果響應(yīng)內(nèi)容是圖片,那么 Charles 可以顯示出圖片的預(yù)覽。
夜魅以求
下載
說明
charles是收費軟件,有條件者請選擇正規(guī)渠道下載并付費授權(quán)使用
下載地址:https://www.charlesproxy.com/
windows端
筆者開發(fā)電腦為mac,windows端沒有收藏鏈接,不過windows端的charles破解版應(yīng)該很多~
mac端
mac端Charles這里可以推薦個下載網(wǎng)站:未來mac下載
地址:https://mac.orsoon.com/ (非廣告植入)
需要付費會員才可以下載,但某寶上代理會員下載的商家很多,一兩元可以搞定,費用感覺還行~
得心應(yīng)手
charles基礎(chǔ)配置
以下內(nèi)容筆者使用mac端charles4.2.8版本進(jìn)行演示
CA證書安裝
安裝CA證書是為了抓包https請求,完成SSL的證書驗證環(huán)節(jié)
1.電腦下載Charles CA證書

2.安裝證書并設(shè)置為始終信任

訪問權(quán)限列表-白名單設(shè)置
設(shè)置白名單,即設(shè)置允許哪些IP可以通過代理進(jìn)行請求抓包
進(jìn)入Proxy → Access Control settings
點擊add添加運許的IP地址,筆者這里填入了0.0.0.0/0,即允許任意IP。筆者主要用測試手機連接charles代理服務(wù)器抓包進(jìn)行逆向分析,沒有其他特殊用途,這里就不限制IP了。手機連WIFI后IP是通過DHCP隨機分發(fā)的,設(shè)置某個IP作為白名單也不太方便。

charles代理服務(wù)器配置
進(jìn)入Proxy → proxying settings
配置代理服務(wù)器端口
Port:8888 默認(rèn)端口號為8888,若端口被占用需手動更改;筆者8888端口已被其他應(yīng)用占用,這里改為了8899
Enable transparent HTTP proxying(透明HTTP代理):
透明代理使Charles能夠去支持那些不支持HTTP代理服務(wù)器的客戶端,或者說不知道他們正在使用HTTP代理服務(wù)器,例如TCP / IP連接由路由器或防火墻重定向到Charles。

開啟https 443端口代理
基于安全考慮現(xiàn)在的請求接口都是https,http很少見了。因此配置SSL代理來抓包https必不可少。
進(jìn)入Proxy → SSL Proxying settings
IP設(shè)置為通配符*,代表任意服務(wù)器IP,端口設(shè)為443,當(dāng)然端口也可以設(shè)置為*;https的默認(rèn)端口為443,一般來說企業(yè)不會去修改它。當(dāng)然端口配置為*更嚴(yán)謹(jǐn)一些

略知一二
抓包
當(dāng)我們分析一個應(yīng)用,做的第一件事情往往是先抓個包看看,它發(fā)送和接收了哪些數(shù)據(jù)。收包發(fā)包是應(yīng)用的命門,企業(yè)為用戶服務(wù)過程中最為關(guān)鍵的步驟——注冊、瀏覽商品、下單購買、點贊評論、意見反饋等行為,均通過收包發(fā)包來完成。出于網(wǎng)絡(luò)安全的考慮,企業(yè)會對數(shù)據(jù)的收發(fā)包采取安全策略來校驗。試想如果對收包發(fā)包的數(shù)據(jù)沒有校驗,黑灰產(chǎn)業(yè)可以直接制作相應(yīng)的協(xié)議刷工具,脫離應(yīng)用本身進(jìn)行實質(zhì)性業(yè)務(wù)操作,給企業(yè)和用戶帶來巨大的損失。
抓包原理
借用一張圖。原理一言以蔽之:構(gòu)建中間人,發(fā)起中間人攻擊(MITM)。

配置Charles代理構(gòu)成中間人后,本來C/S架構(gòu)的通信過程會“分裂”為兩個獨立的通信過程,app本來驗證的是服務(wù)器的證書,服務(wù)器的證書手機的根證書是認(rèn)可的,直接內(nèi)置的;分裂成兩個獨立的通信過程之后,app驗證的證書就成了Charles的證書,這就是為什么我們抓包前需要安裝在手機端和電腦端均安裝charles證書。
其實這樣的抓包方式在某些情況下也許并不能成功。簡單提兩種情況:
1.安卓系統(tǒng)版本
如果你用的是android手機,會發(fā)現(xiàn)當(dāng)android版本在7.0(包含)以上時,并不能抓到https的接口請求(charles中顯示為unknown)
這是因為谷歌基于數(shù)據(jù)安全考慮,android7.0之后版本不再信任用戶級別證書,只信任系統(tǒng)級別證書。而charles的證書默認(rèn)是安裝在用戶目錄下的。它的證書手機根證書并不認(rèn)可,并不是由手機內(nèi)置的權(quán)威根證書簽發(fā)機構(gòu)簽發(fā)的,所以手機不認(rèn),app也不認(rèn)。
當(dāng)然有防必有攻,是有應(yīng)對策略的:
- 將android版本降低到6.0以下
- 既然7.0之后版本只信任系統(tǒng)級別的CA證書,那我們把charles的證書想辦法移動到系統(tǒng)目錄下就好了。
具體操作可參考:https://www.pianshen.com/article/97291182754/
2.SSL planning證書綁定機制
現(xiàn)象為手機連接代理后,操作app時出現(xiàn)網(wǎng)絡(luò)異常。
一般大廠都很重視軟件安全,他們的應(yīng)用幾乎都有安全策略,SSL planning就是常見的一種。可以簡單理解為在應(yīng)用代碼中還有一層對證書校驗的流程,如果不是自己簽發(fā)的證書直接拒絕服務(wù)。SSL planning機制可以利用Frida或Objection通過hook來應(yīng)對,這里不再展開。
牛刀小試
移動端通過charles代理抓包接口
以蘋果手機 IOS系統(tǒng)為例演示
前置工作
連接charles代理服務(wù)
【注】注意前提條件,電腦和手機必須在同一wifi網(wǎng)絡(luò)下
1.獲取代理服務(wù)器的IP和端口號


2.手機wifi配置代理服務(wù)
點擊你的wifi→配置代理→手動→填入上圖charles彈窗中的服務(wù)器IP和端口號
(android手機對應(yīng)操作應(yīng)該是:長按wifi → 修改網(wǎng)絡(luò) → 高級選項 →代理 → 手動 → 填入上圖charles彈窗中的服務(wù)器IP和端口號)

3.移動端charles證書安裝

根據(jù)彈窗提示,手機瀏覽器輸入chls.pro/ssl這個鏈接進(jìn)行訪問下載移動端charles證書,點擊Allow進(jìn)行下載

證書下載安裝好后,IOS10之后的版本還需要手動操作進(jìn)行證書信任:
設(shè)置→ 通用→ 描述文件與設(shè)備管理 →關(guān)于本機 →證書信息設(shè)置 → 選擇charles證書 → 開啟信任開關(guān)

測試抓包
上述工作完成后,可以測試抓包了,手機訪問某個應(yīng)用,觀察charles是否抓到接口請求
下圖為連接代理后操作微信抓到的數(shù)據(jù)請求

去掉對電腦端請求的抓包
proxy菜單中有一項目macOS Proxy是打鉤的,意思是charles默認(rèn)也會抓取電腦端所有的接口請求
逆向分析場景下我們一般是手機連接代理抓取手機端的請求,電腦端的請求其實是一種干擾。
可再次點擊macOS Proxy將前面的勾去掉,這樣charles就不會再抓取電腦端的請求了。

撥云散霧
遇到的問題和解決策略
1.mac安裝charles后報下圖錯誤

原因不詳
解決方式:終端執(zhí)行如下命令
sudo chown -R root "/Applications/Charles.app/Contents/Resources"
sudo chmod -R u+s "/Applications/Charles.app/Contents/Resources"
2.Android HTTPS抓包報錯:SSL Handshanke:Recevied fatal alert unknown_ca
原因:
Android 7.0版本以上 && targetSdkVersion >= 24,只信任系統(tǒng)證書(即用戶證書不被信任)
解決策略:
Root Android手機,將Charles證書放到系統(tǒng)證書內(nèi)
將APP的公秘鑰導(dǎo)入Charles中(具備APP開發(fā)權(quán)限)
APP編譯為信任用戶證書的版本(具備APP開發(fā)權(quán)限)
使用Xposed的JustTrustMe模塊信任所有證書
使用沙箱應(yīng)用
3.windows下移動端無法連接到代理
現(xiàn)象:移動端訪問chls.pro/ssl,無提示證書下載/保存
排查思路:
確認(rèn)防火墻是否攔截
【控制面板】-【所有控制面板項】-【W(wǎng)indows Defender 防火墻】-【允許的應(yīng)用】
確認(rèn)是否存在【Charles Web Debbuging Proxy】,且是否勾選,對應(yīng)(專用/共用)網(wǎng)絡(luò)是否符合環(huán)境
小具法力
本文簡單介紹了一下charles的基本的配置和用法。
其實charles功能很強大,后續(xù)專門出一篇介紹charles的便捷功能和騷操作,敬請期待~