一键抓包¶
中间人一键抓包功能可以全自动地在设备上开启全局中间人抓包。与其他常用工具相比,您无需关心 安装中间人证书 和 设置代理 等问题,也无需担心因系统版本不同导致抓包方法差异。它可以适配多种 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。