一键抓包

中间人一键抓包功能,可以全自动的在设备上开启全局中间人,他与您常用的工具不同之处在于,您无需顾及证书安装设置代理等问题,也无需担心系统不同版本,抓包方法有区别这些问题。他可以无缝应用于安卓 6.0 - 14,我们已经为您处理好了一切,您只需要关心具体业务。 并且支持实时的改包和截获,相比如常用的 GUI 界面程序更适合您作为实际业务使用而不仅仅是 "抓个包看看"。

除此之外,我们可以向您保证没有抓不到的包(证书固定除外),抓包成功率也比常规软件的方法高。您可以截获应用的 http/s 流量,当然也可以包括全局的 DNS 请求。它可以自动应用及撤销中间人,退出脚本后设备及网络也将恢复它原来的样子,您不必做任何其他设置,脚本同时支持国际中间人抓包(通过上游代理实现)让您可以轻松抓取国外软件。

注意

不论您是哪种系统的用户,开始抓包前,为了确保准确无误一次完成请临时彻底关闭您的网络防火墙

前期准备

首先确保当前电脑与设备在同一个网段,或者具备 USB 连接,我们后面假设 192.168.0.2 为运行了 FIRERPA 的手机设备 IP。其次,确保您已正常克隆项目工具代码以及安装了相关依赖,在命令行验证 mitmproxy 已安装成功(可在命令行输入 mitmdump 进行验证)。

如果您没有 Python 也不熟悉什么克隆和依赖,您可以在我们的发布页面下载到 startmitm.exe,他是 startmitm.py 的打包,您可以在不安装 Python 的情况下执行抓包,这是一个控制台程序,命令参数与 startmitm.py 相同(该文件可能会报毒,请自行决定是否使用)。

基础抓包

提示

您抓包的应用可能存在 SSL PINNING(证书固定)或者是 QUIC 协议,这两种情况都可能影响抓包效果。我们会自动强制 QUIC 降级,但是由于可能存在 FallBack 时间,应用可能会以一种非常卡顿的网络展示,请稍等一会。存在证书固定的应用则无法直接抓包,您需要配合逆向编写 frida 脚本来绕过 SSL PINNING 逻辑。

您可以通过如下命令快速的进行抓包,这是最简单的使用方法。

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协议的代理作为上游代理。DNS 流量也会经过上游代理,但是需要指定上游 DOH-DNS,使用该模式将同时开启 DNS 抓包。

小技巧

上游代理模式需要确保 mitmproxy 的版本 >= 9.0.0(且 Python>=3.9)。

DOH 指的是 DNS-Over-HTTP,建议使用的 DNS 有如下几个,您可以依据情况选择。

地区 DNS 提供商 DOH 地址
国外 Cloudflare DNS https://1.1.1.1/dns-query
国外 Google DNS https://dns.google/dns-query
国内 AliDNS https://dns.alidns.com/dns-query

因为使用了 DOH 进行 DNS 解析,所以一些污染问题将不复存在,您也可以使用此模式进行国际抓包,比如一下命令通过本机克拉西软件的 7890 端口进行国际网络抓包。

python3 -u startmitm.py 192.168.0.2 --upstream http://127.0.0.1:7890 --dns https://dns.google/dns-query

如果是使用国内代理使用 upstream 模式时,那么建议将 DNS 设置为 alidns。

python3 -u startmitm.py 192.168.0.2 --upstream http://x.x.x.x:8080 --dns https://dns.alidns.com/dns-query

如果上游 HTTP 代理需要登录认证,请按以下命令并替换 USER:PASSWORD

python3 -u startmitm.py 192.168.0.2 --upstream http://USER:PASSWORD@x.x.x.x:8080 --dns https://dns.alidns.com/dns-query

DNS抓包

该功能可以让您方便的进行 DNS 抓包,当然,开启 DNS 抓包也会同时开启普通抓包,您可以截获应用的 DNS 查询信息。以下命令启动 DNS 抓包,并指定上游 DNS 为 114.114.114.114。

小技巧

上游代理模式需要确保 mitmproxy 的版本 >= 9.0.0(且 Python>=3.9)。

python3 -u startmitm.py 192.168.0.2 --dns 114.114.114.114

启动 DNS 抓包,但上游 DNS 使用了非标准的端口如 5353。

python3 -u startmitm.py 192.168.0.2 --dns 192.168.0.100:5353