一日一技:iOS 抓包最簡單方案
攝影:產品經理
大螃蟹
寫過爬蟲的同學都知道,當我們想對 App 或者小程序進行抓包時,最常用的工具是 Charles、Fiddler 或者 MimtProxy。但這些軟件用起來非常複雜。特別是當你花了一兩個小時把這些軟件搞定的時候,別人只用了 15 分鐘就已經手動把需要的數據抄寫完成了。
我的需求
如果你不是專業的爬蟲開發者,那麼大多數時候你的抓包需求都是很小的需求,手動操作也不是不能。這種時候,我們最需要的是一種簡單快捷的,毫不費力的方法來解放雙手。
例如我最近在玩《塞爾達傳說——王國之淚》,我有一個小需求,就是想找到防禦力最大的帽子、衣服和褲子來混搭。這些數據,在一個叫做『Jump』的 App 上面全都有,如下圖所示:
防具總共也就幾十個,肉眼一個一個看也沒問題,就是費點時間而已。那麼,如果我想高效一些,有沒有什麼簡單辦法通過抓包再加上 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)
運行效果如下圖所示:
這裏我們使用了兩個第三方庫,分別是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 分鐘就能完成。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/mO_3Mi8MgiUZsJMvM9Ae8A