手机抓包工具汇总【转】

转自:http://blog.zengrong.net/post/2646.html

做移动开发,抓包是基本功。现在的开发者当真是非常幸福,因为抓包工具已经非常成熟了。

在移动设备上抓包,需要下面几个方面的配合:

  1. 移动设备支持;
  2. 代理服务器;
  3. 分析工具。

初级工具

先说个抓 HTTP(HTTPS) 包的例子算是入门啦。

移动设备支持

操作系统 越狱或root 移动设备支持
Android 操作系统自带代理
iOS 操作系统自带代理

代理服务器+分析工具

操作系统 软件
Windows Fiddler
macOS Charles

Fiddler 是 freeware, 它的 macOS 版本已经在进行 beta 测试了,由于采用了 .NET Framework,它的 macOS 版本可以基于 mono 运行。

Charles 是商业软件,它也有 Windows 版本,由于使用 JAVA 编写,它的 Windows 版很容易实现。

既然它们都已经是全平台支持,怎么选就看你了。我目前主要在 macOS 下工作。就介绍 Charles 好了。

Charles 的配置很简单,只需要 在 Proxy->Proxy Settings 对话框中启动 HTTP Proxy,然后在移动设备上设置代理为 macOS 的 IP 地址即可。

手机抓包工具汇总【转】_第1张图片

设置 Charles


手机抓包工具汇总【转】_第2张图片

设置 iOS 的 HTTP 代理


手机抓包工具汇总【转】_第3张图片

设置 Android(小米手机) 的 HTTP 代理


手机抓包工具汇总【转】_第4张图片

手机抓包工具汇总【转】_第5张图片

有些安卓系统的 HTTP 代理设置需要长按 WIFI 名称,单击“修改网络”


接着要做的就是拿起手机访问访问网络。下图是我在 iOS 设备上使用 Safari 访问百度的包信息。是的,HTTPS 也是可以解密的,参见 Charles 的官方文档 SSL Proxying 即可。

手机抓包工具汇总【转】_第6张图片

Fiddler 的操作也类似,网上大把教程,这里就略过了。

进阶工具

有些应用比较调皮,不走操作系统的 HTTP 代理。还有些应用(例如游戏)直接走 TCP 协议,无法使用 HTTP 代理抓包。虽然 Charles 支持 SOCKS 代理,但无法分析 TCP 包。

这就需要祭出大杀器 tcpdump 和 Wireshark 啦。还有一些 App 可以直接运行在 Android 上进行抓包,这也是很方便的啊。

 还可以使用透明代理来处理这些不走系统代理的应用,我在 [mitmproxy 应用(一)基础代理][2652] 一文中作了介绍。

移动设备支持

操作系统 越狱或root 移动设备支持
Android PacketCapture
Android tPacketCapture
Android tcpdump
iOS rvictl

代理服务器+分析工具

操作系统 软件
Windows Wireshark
macOS Wireshark

Android - 支持抓包的 App(不需要 Root 权限)

PacketCapture 和 tPacketCapture 可以直接安装在 Android 设备上,他们会在设备上启动一个 VPN,让所有的网络流量都从 VPN 经过,从而实现抓包。这两个 App 在安装的时候都不需要 Root 权限。

包内容可以保存成 PCAP 格式,将其传到桌面环境中使用 Wireshark 打开分析。Charles 也可以打开 PCAP 格式,但是仅能分析其中的 HTTP 协议内容。

手机抓包工具汇总【转】_第7张图片
手机抓包工具汇总【转】_第8张图片

Packet Capture 抓包界面


手机抓包工具汇总【转】_第9张图片
手机抓包工具汇总【转】_第10张图片

tPacketCapture 抓包界面


Packet Capture 目前只能保存单个包,这略显不便。tPacketCapture 则可以将包内容直接保存到文件中。

Android - 使用 tcpdump 抓包(需要 Root 权限)

在 Android 上安装专用于安卓的 tcpdump ,然后启动它对 Android 的网卡抓包。这个方法很简单粗暴,但需要拥有 Root 权限。

用数据线将 Root 过的 Android 设备连上电脑,并开启 USB 调试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 检查设备是否连接
adb devices
# 登入移动设备
adb shell
# 切换到 Root 用户
su          
# 修改文件夹权限
chmod 777 /data/local/
# 退出移动设备
exit
# 上传前面下载的 tcpdump 文件到移动设备
adb push ~/Downloads/tcpdump /data/local/  
# 登入移动设备
adb shell
# 切换到 Root 用户
su          
# 赋予 tcpdump 执行权限
chmod 777 /data/local/tcpdump
# 改回文件夹权限
chmod 775 /data/local/
# 开始抓包,结果存到 SD 卡的 tcpdump.pcap 文件
/data/local/tcpdump -p -vv -s 0 -w /sdcard/tcpdump.pcap

此时可以在手机上进行正常操作了。抓包结束的时候使用 Ctrl+C 结束 tcpdump 的执行,将 /sdcard/tcpdump.pcap 复制到桌面环境,使用 Wireshark 打开进行分析就 OK 啦。

手机抓包工具汇总【转】_第11张图片

iOS - 使用 rvictl 抓包(不需要越狱)

RVI 代表的意思是 Remote Virtual Interface 。这是 XCode 自带的一个工具,它可以将连接到 macOS 的 iOS 设备的网卡虚拟成 macOS 的网络设备。

若碰到提示 rvictl: command not found ,那么可能你需要访问 App Store ,安装 XCode 并运行一次。

先使用数据线连接 iOS 设备,打开 iTunes 获取 UDID,在保持数据线连接的情况下,执行下面的命令创建虚拟设备 rvi0 (xxxx代表设备的 UDID):

1
2
rvictl -s xxxxxxxxxxxxxxx
Starting device xxxxxxxxxxxxxxx [SUCCEEDED] with interface rvi0

开启 Wireshark 或者 tcpdump (macOS 自带) ,选择设备 rvi0 抓包即可。

抓包完毕后,要用 rvictl -x 取消使用。

更简单的办法

桌面系统上的 Wireshark 和 tcpdump 可以对该系统的网络设备抓包。因此我们只需保证移动设备的所有流量经过某个网络设备,就能得到它传输的所有信息。

把桌面设备变成一个热点,让移动设备通过该热点上网就能做到这点了。无论桌面设备使用有线网络还是无线网络,只需要购买一个无线网卡就能实现热点功能。不用做任何配置,就能抓包了。

其他工具

mitmproxy = Man In The Middle Proxy,这个名字相当的拉风啊。它是使用 Python + C 实现的开源软件。

mitmprxoy 是基于命令行界面的,但同时它可以在命令行界面进行交互。 另外,它也提供了一个类似于 tcpdump 的 mitmdump 工具。为了方便查看,它还提供了 mitmweb 这个可视化分析工具。

我写了两篇文章来介绍 mitmproxy 的应用。

  • mitmproxy 应用(一)基础代理
  • mitmproxy 应用(二)基础代理

另一个稍微小众一点的工具 burp 虽然是商业软件,但免费版提供的功能已经够用了。

苹果提供了一个相当详细的如何抓包的文档,其中提到了许多抓包软件和方法,值得一看:Getting a Packet Trace 。

你可能感兴趣的:(手机抓包工具汇总【转】)