一鍵抓包

中間人一鍵抓包功能可以全自動地在裝置上開啟全域中間人抓包。與其他常用工具相比,您無需關心 安裝中間人憑證設定代理 等問題,也無需擔心因系統版本不同導致抓包方法差異。它可以適配多種 Android 版本,我們已經為您處理好了一切,它還支援即時改包與截獲。

除此之外,抓包成功率也比一般軟體更高。您可以截獲應用程式的 HTTP/HTTPS 流量。腳本能夠自動啟用和撤銷中間人抓包,退出腳本後裝置與網路即恢復原狀,您無需進行任何額外設定。同時,腳本也支援國際中間人抓包,可以指定上游代理,讓您可以輕鬆抓取國外應用。

注意

不論您使用的是哪種作業系統,為確保一次成功,請在開始抓包前臨時徹底關閉您的網路防火牆

前期準備

首先,請確保目前電腦與裝置處於同一網段,或已透過 USB 連線。下文假設執行 FIRERPA 的手機裝置 IP 為 192.168.0.2。其次,請確認您已正確在 PC 端完成 工具準備,並在命令列中驗證 mitmproxy 已安裝成功(可在終端機執行 mitmdump 進行驗證)。

如果您沒有 Python 環境且不熟悉克隆與依賴管理,可在我們的發佈頁面下載 startmitm.exe。它是 startmitm.py 的打包版本,讓您無需安裝 Python 即可執行抓包。這是一個主控台程式,指令參數與 startmitm.py 相同(該檔案可能會被防毒軟體誤報,請自行決定是否使用)。

基礎抓包

提示

您抓包的應用可能存在 SSL PINNING(憑證固定)或使用 QUIC 協議,這兩種情況都可能影響抓包效果。我們會自動強制 QUIC 降級,但受回退握手時間影響,應用可能會短暫出現卡頓,請稍等片刻。如果應用採用了憑證固定,則無法直接抓包,您需要配合逆向工程編寫 Frida 腳本來繞過 SSL PINNING 邏輯。

您可以使用如下指令快速開始抓包

python3 -u startmitm.py 192.168.0.2

您只需按下一次 Ctrl+C 組合鍵即可退出抓包。

共享抓包

如果您希望與區域網路內的夥伴一起分析,請執行如下指令,然後讓對方用瀏覽器訪問 http://您的IP位址:7890,即可看到與您相同的抓包介面,共同輕鬆分析。

python3 -u startmitm.py 192.168.0.2 --web-port 7890 --web-host 0.0.0.0

特定應用

如果您只需截獲特定應用程式的流量,而非系統全域流量,可在 IP 位址後附加 :套件名稱。以下範例僅截獲 com.some.package 的流量。

python3 -u startmitm.py 192.168.0.2:com.some.package

即時修改

您可以即時修改應用程式的請求與回應資料,該功能基於 mitmproxy 的事件鉤子實現。您需要根據 mitmproxy 的 API 自行編寫鉤子腳本。關於如何編寫鉤子腳本,請參考 mitmproxy 官方文件 docs.mitmproxy.org/stable/addons-examples 以及範例程式碼 mitmproxy/examples/contrib

假設您編寫的鉤子腳本為 http_flow_hook.py,請使用以下指令應用該腳本。

python3 -u startmitm.py 192.168.0.2 -s http_flow_hook.py

不同網路

如果您的手機與目前電腦不在同一網路,但可以物理接觸裝置,您也可以透過 USB ADB 的方式進行抓包。請確保裝置已透過 USB ADB 接入電腦並已正確授權。

如果電腦只連接了一臺 ADB 裝置,請執行以下指令,localhost 表示針對該 ADB 裝置抓包。

python3 -u startmitm.py localhost

如果連接了多臺 ADB 裝置,您需要指定裝置的序列號,可從 adb devices 的輸出中獲取。

python3 -u startmitm.py localhost --serial bfde362

如果您的網路環境更為苛刻,例如手機與電腦既不在同一網路,也無法物理接觸,但只要能訪問 FIRERPA 的連接埠,同樣可以抓包。常見場景包括:透過內建 frp 服務將 FIRERPA 轉發至遠端伺服器,此時您與 FIRERPA 之間僅有一個連接埠可以直接連線,其他連接埠無法互通。手機無法訪問本機任何連接埠,本機也只能訪問手機的 FIRERPA 連接埠。這種情況需要採用以下方式。

首先,使用 adb_pubkey.py 或自行呼叫介面將您本機的 ADB 公鑰安裝到裝置上。安裝完成後,執行 connect,其中 x.x.x.x 為可連接到裝置 65000 連接埠的 IP 位址,請根據實際情況修改。

adb connect x.x.x.x:65000

然後,執行如下指令即可

python3 -u startmitm.py localhost

如果有多個 adb 裝置,也可以像這樣,這裡的 --serial 參數為 ADB connect 的位址(如 x.x.x.x:65000),而非裝置序列號。

python3 -u startmitm.py localhost --serial x.x.x.x:65000

上游代理/國際抓包

startmitm 本身會啟動 mitmproxy 作為代理服務,預設情況下所有流量均由 mitmproxy 從本機網卡發出。如果您希望流量透過上游代理發出,而非直連本機,可以指定上游代理,但僅支援 HTTP協議的上游代理。同時,您還需要指定一個支援 TCP 查詢的上游 DNS,以避免 DNS 汙染。

python3 -u startmitm.py 192.168.0.2 --upstream http://127.0.0.1:7890 --proxy-dns 8.8.8.8

若上游 HTTP 代理需要認證,請按以下格式替換 USER:PASSWORD

python3 -u startmitm.py 192.168.0.2 --upstream http://USER:PASSWORD@x.x.x.x:8080 --proxy-dns 8.8.8.8

這樣裝置流量將會透過上游代理發出,並將裝置的所有 DNS 查詢透過代理傳送至 8.8.8.8。