一鍵抓包¶
中間人一鍵抓包功能,可以全自動地在裝置上開啟全域中間人,它與您常用的工具不同之處在於,您無需顧及憑證安裝和設定代理等問題,也無需擔心不同系統版本,抓包方法有所區別這些問題。它可以無縫應用於 Android 6.0 - 14,我們已經為您處理好了一切,您只需要專注於具體業務。 並且支援即時的改包和攔截,相較於常用的 GUI 介面程式,它更適合您作為實際業務使用,而不僅僅是「抓個包看看」。
除此之外,我們可以向您保證沒有抓不到的包(憑證綁定除外),抓包成功率也比常規軟體的方法高。您可以攔截應用程式的 http/s 流量。它可以自動應用及撤銷中間人,退出腳本後,裝置及網路也將恢復原狀,您不必做任何其他設定,腳本同時支援國際中間人抓包(透過上游代理實現),讓您可以輕鬆抓取國外軟體。
注意
前期準備¶
首先確保當前電腦與裝置在同一個網段,或者具備 USB 連接,我們後面假設 192.168.0.2 為執行了 FIRERPA 的手機裝置 IP。其次,確保您已正常克隆專案工具程式碼以及安裝了相關依賴,在命令列驗證 mitmproxy 已安裝成功(可在命令列輸入 mitmdump 進行驗證)。
如果您沒有 Python 也不熟悉什麼是克隆和依賴,您可以在我們的發布頁面下載到 startmitm.exe,它是 startmitm.py 的打包檔,您可以在不安裝 Python 的情況下執行抓包,這是一個主控台應用程式,指令參數與 startmitm.py 相同(該檔案可能會被防毒軟體報毒,請自行決定是否使用)。
基礎抓包¶
提示
您可以透過如下指令快速進行抓包,這是最簡單的使用方法。
python3 -u startmitm.py 192.168.0.2
重要
按下一次組合鍵 CONTROL + 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 序號,請從指令 adb devices 的輸出中尋找。
python3 -u startmitm.py localhost --serial bfde362
如果您的環境更嚴苛,例如手機與當前電腦既不在同一網路下,也無法實體接觸裝置,但是只要您可以存取 FIRERPA 的連接埠,也可以進行中間人。這種情況通常為:您使用了內建 frp 服務將 FIRERPA 轉發到遠端伺服器,或者您自行透過某種方式將 FIRERPA 的 65000 連接埠轉發到某個地方。在這種情況下,您和 FIRERPA 之間僅有這一個連接埠可以直接通訊,其他連接埠是無法互相存取的。在這種情況下,手機無法存取到本機的任何連接埠,本機也只能存取到手機的 FIRERPA 連接埠(或者手機有公用 IP,但本機在內網),這樣就需要透過以下方式來進行。(OpenVPN 網路互通,不屬於以上情況)
這時,需要透過下面這種組合方式來進行。首先,使用 adb_pubkey.py 或自行呼叫介面將自身的 ADB 公鑰安裝到裝置上,安裝完畢後繼續執行以下過程,其中 x.x.x.x 為可以連接到 65000 連接埠的 IP 或 127.0.0.1,請依實際情況修改。
adb connect x.x.x.x:65000
最後,按照和上文一樣的方法,透過 USB 抓包來操作。
python3 -u startmitm.py localhost
或者像下面這樣,這裡的 serial 是 adb connect 的位址而不是十六進位序號了。
python3 -u startmitm.py localhost --serial x.x.x.x:65000
上游代理/國際抓包¶
startmitm 本身會啟動 mitmproxy 作為代理服務,預設情況下,流量都是 mitmproxy 從本機網卡發出的,如果您需要流量透過一個上游代理發出而不是本機,可以使用如下方式指定上游代理,僅支援 HTTP 協定的代理作為上游代理。同時您需要指定一個支援 TCP 查詢的上游 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
以上所有指令將會把裝置流量從 upstream 代理發出,並且將本機所有 DNS 查詢透過代理傳送到 8.8.8.8。