寫過爬蟲的同學都知道,當我們想對App或者小程序進行抓包時,最常用的工具是Charles、Fiddler或者MimtProxy。但這些軟件用起來非常復雜。特別是當你花了一兩個小時把這些軟件搞定的時候,別人只用了15分鐘就已經手動把需要的數據抄寫完成了。
我的需求
如果你不是專業的爬蟲開發者,那么大多數時候你的抓包需求都是很小的需求,手動操作也不是不能。這種時候,我們最需要的是一種簡單快捷的,毫不費力的方法來解放雙手。
例如我最近在玩《塞爾達傳說——王國之淚》,我有一個小需求,就是想找到防御力最大的帽子、衣服和褲子來混搭。這些數據,在一個叫做『Jump』的App上面全都有,如下圖所示:
圖片
防具總共也就幾十個,肉眼一個一個看也沒問題,就是費點時間而已。那么,如果我想高效一些,有沒有什么簡單辦法通過抓包再加上Python/ target=_blank class=infotextkey>Python寫幾行代碼來篩選,快速找到我想要的數據呢?
手機上的操作
實際上,方法非常簡單。我們只需要在手機上安裝一個App,叫做『Stream』,如下圖所示:
圖片
這個軟件在App Store國區就可以下載。
第一次打開這個App的時候,我們設置一下根證書,點擊下圖中箭頭指向的這個按鈕:
圖片
他會一步一步指導你安裝根證書。整個過程不超過30秒,這里我就不再贅述了。
安裝完成根證書以后,我們點擊『開始抓包』按鈕。此時,手機上面所有的流量就會經過Stream并抓取下來。
我們打開Jump App,找到防具列表,然后不停往下滑動屏幕,直到滑到最下面。
然后回到Stream,點擊『停止抓包』按鈕。抓包過程就完成了。
我們點擊『抓包歷史』按鈕,找到剛剛抓到的數據包,如下圖所示:
圖片
按域名進行篩選,方便找到Jump App發送的HTTP請求。如下圖所示:
圖片
打開請求以后,點擊『響應』-『查看響應』按鈕,如下圖所示:
圖片
我們就能看到如下圖所示請求體,這確實就是防具對應的數據包,如下圖所示:
圖片
我們現在,需要使用篩選功能,選出所有獲取防具信息的后端請求。所以先到『請求選項卡』,查看一下URL的規律,如下圖所示:
圖片
回到請求列表頁,點擊右上角的放大鏡進行篩選,如下圖所示:
圖片
篩選以后,只有5個請求了,如下圖所示:
圖片
最后一步,我們點擊右上角的『編輯』按鈕,選中所有請求,并點擊右下角的『導出HAR』,如下圖所示:
圖片
大家可以使用AIrDrop或者微信發送到電腦上。到此為止,手機上的所有操作就已經結束了。接下來我們來到電腦上,寫一段Python代碼來解析這個HAR文件。
寫一點點代碼
這段代碼非常簡單,大家可以直接復制:
import json
import brotli
import base64
from haralyzer import HarParser
with open('/Users/kingname/Downloads/Stream-2023-07-06 22:08:44.har') as f:
har_parser = HarParser(json.loads(f.read()))
data = har_parser.har_data
entries = data['entries']
for entry in entries:
text = entry['response']['content']['text']
content = brotli.decompress(base64.b64decode(text)).decode()
info = json.loads(content)
print(info)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
運行效果如下圖所示:
圖片
這里我們使用了兩個第三方庫,分別是haralyzer和brotli。其中的haralyzer是用來解析HAR文件;brotli是用來對數據進行解壓縮。
在一般情況下,其他網站的HAR解析,代碼到text = entry['response']['content']['text']就可以了。返回的text直接就是人眼可讀的內容了。但Jump稍微特殊一些,因為它返回的內容經過壓縮,所以獲取到的是Base64字符串。如果我們直接打印,就會看到:
圖片
這個Base64不能直接解碼,因為解了以后是二進制信息。從之前Stream的響應Headers里面,我們可以看到這個數據是經過br壓縮的,如下圖所示:
圖片
所以需要使用brotli解壓縮:brotli.decompress(base64.b64decode(text)).decode()。
現在你已經拿到返回數據的JSON信息了。那么接下來要對數據進行怎么樣的處理,都不再是問題了。
總結
- 安裝Stream并設置根證書
- 打開抓包功能
- 打開目標App或者微信小程序,讓流量經過Stream
- 關閉抓包功能,從抓包歷史里面找到目標請求的URL規則
- 篩選出所有需要的請求,導出為HAR文件
- 使用Python解析HAR文件
當你熟練以后,整個過程不超過3分鐘就能完成。