App抓包其實沒那麼複雜!Charles來幫你搞定

Charles是一個網絡抓包工具,咱們能夠用它來作App的抓包分析,獲得App運行過程當中發生的全部網絡請求和響應內容,這就和Web端瀏覽器的開發者工具Network部分看到的結果一致。
api

相比Fiddler來講,Charles的功能更強大,並且跨平臺支持更好。因此咱們選用Charles做爲主要的移動端抓包工具,用於分析移動App的數據包,輔助完成App數據抓取工做。瀏覽器

1、本節目標

本節咱們以京東App爲例,經過Charles抓取App運行過程當中的網絡數據包,而後查看具體的Request和Response內容,以此來了解Charles的用法。
服務器

2、準備工做

請確保已經正確安裝Charles並開啓了代理服務,手機和Charles處於同一個局域網下,Charles代理和CharlesCA證書設置好。
網絡

3、原理

首先Charles運行在本身的PC上,Charles運行的時候會在PC的8888端口開啓一個代理服務,這個服務其實是一個HTTP/HTTPS的代理。
併發

確保手機和PC在同一個局域網內,咱們可使用手機模擬器經過虛擬網絡鏈接,也可使用手機真機和PC經過無線網絡鏈接。app

設置手機代理爲Charles的代理地址,這樣手機訪問互聯網的數據包就會流經Charles,Charles再轉發這些數據包到真實的服務器,服務器返回的數據包再由Charles轉發回手機,Charles就起到中間人的做用,全部流量包均可以捕捉到,所以全部HTTP請求和響應均可以捕獲到。同時Charles還有權力對請求和響應進行修改。ide

4、抓包

初始狀態下Charles的運行界面以下圖所示。
工具

圖片

Charles會一直監聽PC和手機發生的網絡數據包,捕獲到的數據包就會顯示在左側,隨着時間的推移,捕獲的數據包愈來愈多,左側列表的內容也會愈來愈多。測試

能夠看到,圖中左側顯示了Charles抓取到的請求站點,咱們點擊任意一個條目即可以查看對應請求的詳細信息,其中包括Request、Response等內容。spa

接下來清空Charles的抓取結果,點擊左側的掃帚按鈕便可清空當前捕獲到的全部請求。而後點擊第二個監聽按鈕,確保監聽按鈕是打開的,這表示Charles正在監聽App的網絡數據流,以下圖所示。

圖片

這時打開手機京東,注意必定要提早設置好Charles的代理並配置好CA證書,不然沒有效果。

打開任意一個商品,如iPhone,而後打開它的商品評論頁面,以下圖示。

不斷上拉加載評論,能夠看到Charles捕獲到這個過程當中京東App內發生的全部網絡請求,以下圖所示。

左側列表中會出現一個api.m.jd.com連接,並且它在不停閃動,極可能就是當前App發出的獲取評論數據的請求被Charles捕獲到了。咱們點擊將其展開,繼續上拉刷新評論。隨着上拉的進行,此處又會出現一個個網絡請求記錄,這時新出現的數據包請求肯定就是獲取評論的請求。

爲了驗證其正確性,咱們點擊查看其中一個條目的詳情信息。切換到Contents選項卡,這時咱們發現一些JSON數據,覈對一下結果,結果有commentData字段,其內容和咱們在App中看到的評論內容一致,以下圖所示。

圖片

這時能夠肯定,此請求對應的接口就是獲取商品評論的接口。這樣咱們就成功捕獲到了在上拉刷新的過程當中發生的請求和響應內容。

5、分析

如今分析一下這個請求和響應的詳細信息。首先能夠回到Overview選項卡,上方顯示了請求的接口URL,接着是響應狀態Status Code、請求方式Method等,以下圖所示。

圖片

這個結果和本來在Web端用瀏覽器開發者工具內捕獲到的結果形式是相似的。

接下來點擊Contents選項卡,查看該請求和響應的詳情信息。

上半部分顯示的是Request的信息,下半部分顯示的是Response的信息。好比針對Reqeust,咱們切換到Headers選項卡便可看到該Request的Headers信息,針對Response,咱們切換到JSON TEXT選項卡便可看到該Response的Body信息,而且該內容已經被格式化,以下圖所示。

圖片

因爲這個請求是POST請求,咱們還須要關心POST的表單信息,切換到Form選項卡便可查看,以下圖所示。

圖片

這樣咱們就成功抓取App中的評論接口的請求和響應,而且能夠查看Response返回的JSON數據。

至於其餘App,咱們一樣可使用這樣的方式來分析。若是咱們能夠直接分析獲得請求的URL和參數的規律,直接用程序模擬便可批量抓取。

6、重發

Charles還有一個強大功能,它能夠將捕獲到的請求加以修改併發送修改後的請求。點擊上方的修改按鈕,左側列表就多了一個以編輯圖標爲開頭的連接,這就表明此連接對應的請求正在被咱們修改,以下圖所示。

圖片

咱們能夠將Form中的某個字段移除,好比這裏將partner字段移除,而後點擊Remove。這時咱們已經對原來請求攜帶的Form Data作了修改,而後點擊下方的Execute按鈕便可執行修改後的請求,以下圖所示。

圖片

能夠發現左側列表再次出現了接口的請求結果,內容仍然不變,以下圖所示。

圖片

刪除Form表單中的partner字段並無帶來什麼影響,因此這個字段是可有可無的。

有了這個功能,咱們就能夠方便地使用Charles來作調試,能夠經過修改參數、接口等來測試不一樣請求的響應狀態,就能夠知道哪些參數是必要的哪些是沒必要要的,以及參數分別有什麼規律,最後獲得一個最簡單的接口和參數形式以供程序模擬調用使用。

7、結語

以上內容即是經過Charles抓包分析App請求的過程。經過Charles,咱們成功抓取App中流經的網絡數據包,捕獲原始的數據,還能夠修改原始請求和從新發起修改後的請求進行接口測試。

知道了請求和響應的具體信息,若是咱們能夠分析獲得請求的URL和參數的規律,直接用程序模擬便可批量抓取,這固然最好不過了。

可是隨着技術的發展,App接口每每會帶有密鑰,咱們並不能直接找到這些規律,那麼怎麼辦呢?接下來,咱們將瞭解利用Charles和mitmdump直接對接Python腳本實時處理抓取到的Response的過程。

相關文章
相關標籤/搜索