一日一技: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)

運行效果如下圖所示:

這裏我們使用了兩個第三方庫,分別是haralyzerbrotli。其中的haralyzer是用來解析 HAR 文件;brotli是用來對數據進行解壓縮。

在一般情況下,其他網站的 HAR 解析,代碼到text = entry['response']['content']['text']就可以了。返回的text直接就是人眼可讀的內容了。但 Jump 稍微特殊一些,因爲它返回的內容經過壓縮,所以獲取到的是 Base64 字符串。如果我們直接打印,就會看到:

這個 Base64 不能直接解碼,因爲解了以後是二進制信息。從之前 Stream 的響應 Headers 裏面,我們可以看到這個數據是經過br壓縮的,如下圖所示:

所以需要使用brotli解壓縮:brotli.decompress(base64.b64decode(text)).decode()

現在你已經拿到返回數據的 JSON 信息了。那麼接下來要對數據進行怎麼樣的處理,都不再是問題了。

總結

  1. 安裝 Stream 並設置根證書

  2. 打開抓包功能

  3. 打開目標 App 或者微信小程序,讓流量經過 Stream

  4. 關閉抓包功能,從抓包歷史裏面找到目標請求的 URL 規則

  5. 篩選出所有需要的請求,導出爲 HAR 文件

  6. 使用 Python 解析 HAR 文件

當你熟練以後,整個過程不超過 3 分鐘就能完成。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/mO_3Mi8MgiUZsJMvM9Ae8A