手机抓包工具汇总
首先,我们需要拿起手机并访问网络。下面是我在iOS设备上使用Safari访问百度的包信息的截图。没错,HTTPS也是可以解密的,可以参考Charles的官方文档SSL Proxying来实现。
Fiddler的操作也类似,网上有很多教程,这里就不详细介绍了。接下来,我们要介绍一些进阶工具。有些应用程序比较调皮,不使用操作系统的HTTP代理。还有一些应用程序(如游戏)直接使用TCP协议,无法使用HTTP代理进行抓包。虽然Charles支持SOCKS代理,但无法分析TCP包。这时就需要使用tcpdump和Wireshark这两个强大的工具了。另外,还有一些应用程序可以直接在Android上运行进行抓包,非常方便。还可以使用透明代理来处理那些不走系统代理的应用程序,我在一篇名为"mitmproxy应用(一)基础代理"的文章中介绍过这个方法。
移动设备支持
接下来是关于移动设备的支持情况。操作系统是否越狱或者root移动设备,以及在Android和iOS上的代理服务器和分析工具的支持情况。
- Android:
- PacketCapture:不支持
- tPacketCapture:不支持
- tcpdump:支持
- iOS:
- rvictl:不支持
代理服务器+分析工具
下面是关于代理服务器和分析工具在不同操作系统上的支持情况:
- Windows:Wireshark
- macOS:Wireshark
- Android:支持抓包的App(无需Root权限):PacketCapture和tPacketCapture可以直接安装在Android设备上,它们会在设备上启动一个VPN,将所有的网络流量都经过VPN,从而实现抓包。这两个App在安装时不需要Root权限。包内容可以保存为PCAP格式,然后传输到桌面环境中使用Wireshark打开进行分析。Charles也可以打开PCAP格式,但只能分析其中的HTTP协议内容。
1# 检查设备是否连接
2adb devices
3# 登入移动设备
4adb shell
5# 切换到 Root 用户
6su
7# 修改文件夹权限
8chmod 777 /data/local/
9# 退出移动设备
10exit
11# 上传前面下载的 tcpdump 文件到移动设备
12adb push ~/Downloads/tcpdump /data/local/
13# 登入移动设备
14adb shell
15# 切换到 Root 用户
16su
17# 赋予 tcpdump 执行权限
18chmod 777 /data/local/tcpdump
19# 改回文件夹权限
20chmod 775 /data/local/
21# 开始抓包,结果存到 SD 卡的 tcpdump.pcap 文件
22/data/local/tcpdump -p -vv -s 0 -w /sdcard/tcpdump.pcap
下面是Packet Capture和tPacketCapture的抓包界面截图。Packet Capture目前只能保存单个包,有些不太方便。而tPacketCapture可以直接将包内容保存到文件中。
Android - 使用tcpdump抓包(需要Root权限)
在Android上安装专门为Android设计的tcpdump,然后启动它来抓包。这种方法比较简单粗暴,但需要有Root权限。将已Root的Android设备通过数据线连接到电脑,并开启USB调试。
此时,您可以在手机上进行正常操作。当抓包结束时,使用Ctrl+C来终止tcpdump的执行,并将/sdcard/tcpdump.pcap复制到桌面环境中,然后使用Wireshark打开进行分析。
1rvictl -s xxxxxxxxxxxxxxx
2Starting device xxxxxxxxxxxxxxx [SUCCEEDED] with interface rvi0
iOS - 使用rvictl抓包(无需越狱)
RVI代表Remote Virtual Interface,这是Xcode自带的一个工具,它可以将连接到macOS的iOS设备的网卡虚拟成macOS的网络设备。如果遇到"rvictl: command not found"的提示,可能需要访问App Store,安装Xcode并运行一次。首先,通过数据线连接iOS设备,打开iTunes获取UDID,在保持数据线连接的情况下,执行下面的命令来创建虚拟设备rvi0(xxxx代表设备的UDID)。
然后,打开Wireshark或者tcpdump(macOS自带),选择设备rvi0来抓包。抓包完成后,使用rvictl -x命令取消使用虚拟设备。
更简单的方法
桌面系统上的Wireshark和tcpdump可以对该系统的网络设备进行抓包。因此,我们只需要确保移动设备的所有流量经过某个网络设备,就能获取它传输的所有信息。将桌面设备作为一个热点,让移动设备通过该热点上网,就能实现这一点。无论桌面设备使用有线网络还是无线网络,只需要购买一个无线网卡就能实现热点功能,而无需进行任何配置,就能进行抓包。
其他工具
mitmproxy(中间人代理)是一个使用Python+C实现的开源软件,它提供了命令行界面,并可以在命令行界面进行交互。此外,它还提供了类似于tcpdump的mitmdump工具,并提供了一个可视化分析工具mitmweb。我写了两篇文章介绍了mitmproxy的应用。另一个稍微小众一些的工具是Burp,虽然它是商业软件,但免费版的功能已经足够使用了。苹果提供了一份非常详细的抓包文档,其中提到了许多抓包软件和方法,值得一看:Getting a Packet Trace。
全文完。