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

崔慶才丨靜覓發表於2018-04-13

Charles是一個網路抓包工具,我們可以用它來做App的抓包分析,得到App執行過程中發生的所有網路請求和響應內容,這就和Web端瀏覽器的開發者工具Network部分看到的結果一致。

相比Fiddler來說,Charles的功能更強大,而且跨平臺支援更好。所以我們選用Charles作為主要的移動端抓包工具,用於分析移動App的資料包,輔助完成App資料抓取工作。

一、本節目標

本節我們以京東App為例,通過Charles抓取App執行過程中的網路資料包,然後檢視具體的Request和Response內容,以此來了解Charles的用法。

二、準備工作

請確保已經正確安裝Charles並開啟了代理服務,手機和Charles處於同一個區域網下,Charles代理和CharlesCA證照設定好。

三、原理

首先Charles執行在自己的PC上,Charles執行的時候會在PC的8888埠開啟一個代理服務,這個服務實際上是一個HTTP/HTTPS的代理。

確保手機和PC在同一個區域網內,我們可以使用手機模擬器通過虛擬網路連線,也可以使用手機真機和PC通過無線網路連線。

設定手機代理為Charles的代理地址,這樣手機訪問網際網路的資料包就會流經Charles,Charles再轉發這些資料包到真實的伺服器,伺服器返回的資料包再由Charles轉發回手機,Charles就起到中間人的作用,所有流量包都可以捕捉到,因此所有HTTP請求和響應都可以捕獲到。同時Charles還有權力對請求和響應進行修改。

四、抓包

初始狀態下Charles的執行介面如下圖所示。

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

Charles會一直監聽PC和手機發生的網路資料包,捕獲到的資料包就會顯示在左側,隨著時間的推移,捕獲的資料包越來越多,左側列表的內容也會越來越多。

可以看到,圖中左側顯示了Charles抓取到的請求站點,我們點選任意一個條目便可以檢視對應請求的詳細資訊,其中包括Request、Response等內容。

接下來清空Charles的抓取結果,點選左側的掃帚按鈕即可清空當前捕獲到的所有請求。然後點選第二個監聽按鈕,確保監聽按鈕是開啟的,這表示Charles正在監聽App的網路資料流,如下圖所示。

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

這時開啟手機京東,注意一定要提前設定好Charles的代理並配置好CA證照,否則沒有效果。

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

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

不斷上拉載入評論,可以看到Charles捕獲到這個過程中京東App內發生的所有網路請求,如下圖所示。

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

左側列表中會出現一個api.m.jd.com連結,而且它在不停閃動,很可能就是當前App發出的獲取評論資料的請求被Charles捕獲到了。我們點選將其展開,繼續上拉重新整理評論。隨著上拉的進行,此處又會出現一個個網路請求記錄,這時新出現的資料包請求確定就是獲取評論的請求。

為了驗證其正確性,我們點選檢視其中一個條目的詳情資訊。切換到Contents選項卡,這時我們發現一些JSON資料,核對一下結果,結果有commentData欄位,其內容和我們在App中看到的評論內容一致,如下圖所示。

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

這時可以確定,此請求對應的介面就是獲取商品評論的介面。這樣我們就成功捕獲到了在上拉重新整理的過程中發生的請求和響應內容。

五、分析

現在分析一下這個請求和響應的詳細資訊。首先可以回到Overview選項卡,上方顯示了請求的介面URL,接著是響應狀態Status Code、請求方式Method等,如下圖所示。

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

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

接下來點選Contents選項卡,檢視該請求和響應的詳情資訊。

上半部分顯示的是Request的資訊,下半部分顯示的是Response的資訊。比如針對Reqeust,我們切換到Headers選項卡即可看到該Request的Headers資訊,針對Response,我們切換到JSON TEXT選項卡即可看到該Response的Body資訊,並且該內容已經被格式化,如下圖所示。

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

由於這個請求是POST請求,我們還需要關心POST的表單資訊,切換到Form選項卡即可檢視,如下圖所示。

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

這樣我們就成功抓取App中的評論介面的請求和響應,並且可以檢視Response返回的JSON資料。

至於其他App,我們同樣可以使用這樣的方式來分析。如果我們可以直接分析得到請求的URL和引數的規律,直接用程式模擬即可批量抓取。

六、重發

Charles還有一個強大功能,它可以將捕獲到的請求加以修改併傳送修改後的請求。點選上方的修改按鈕,左側列表就多了一個以編輯圖示為開頭的連結,這就代表此連結對應的請求正在被我們修改,如下圖所示。

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

我們可以將Form中的某個欄位移除,比如這裡將partner欄位移除,然後點選Remove。這時我們已經對原來請求攜帶的Form Data做了修改,然後點選下方的Execute按鈕即可執行修改後的請求,如下圖所示。

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

可以發現左側列表再次出現了介面的請求結果,內容仍然不變,如下圖所示。

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

刪除Form表單中的partner欄位並沒有帶來什麼影響,所以這個欄位是無關緊要的。

有了這個功能,我們就可以方便地使用Charles來做除錯,可以通過修改引數、介面等來測試不同請求的響應狀態,就可以知道哪些引數是必要的哪些是不必要的,以及引數分別有什麼規律,最後得到一個最簡單的介面和引數形式以供程式模擬呼叫使用。

七、結語

以上內容便是通過Charles抓包分析App請求的過程。通過Charles,我們成功抓取App中流經的網路資料包,捕獲原始的資料,還可以修改原始請求和重新發起修改後的請求進行介面測試。

知道了請求和響應的具體資訊,如果我們可以分析得到請求的URL和引數的規律,直接用程式模擬即可批量抓取,這當然最好不過了。

但是隨著技術的發展,App介面往往會帶有金鑰,我們並不能直接找到這些規律,那麼怎麼辦呢?接下來,我們將瞭解利用Charles和mitmdump直接對接Python指令碼實時處理抓取到的Response的過程。


本資源首發於崔慶才的個人部落格靜覓: Python3網路爬蟲開發實戰教程 | 靜覓

如想了解更多爬蟲資訊,請關注我的個人微信公眾號:進擊的Coder

weixin.qq.com/r/5zsjOyvEZ… (二維碼自動識別)


相關文章