移动设备抓包

本文主要以 iOS 为例,演示如何使用 Charles 和 Wireshark 在移动设备上抓取 HTTPS、HTTPS、TCP 等协议的数据包。

以下称 PC 为抓包所用的计算机,手机为被抓包的移动设备。

1. 使用 Charles 抓取 HTTP

首先安装 Charles,下载地址:官网

使用 Charles 抓包要求 PC 和 手机必须位于同一个局域网下。

1.1. 配置 Charles

打开 Charles,菜单 Proxy > Proxy Settings... 进入代理设置,打开代理服务器。可以指定代理服务器运行的端口,这里使用默认端口 8888

image-20190202135416291

接下来获取 Charles 代理服务器局域网 IP,也就是本机在局域网的 IP。macOS 可以打开 System Preferences > Network 中查看,当然也可以运行 ifconfig 查看。

image-20190202140155578

至此,我们知道了 Charles 的代理服务器的地址是 192.168.31.110:8888

1.2. 配置手机

手机连接 PC 所在局域网的 WiFi,并配置代理服务器。iOS 示例如下:

IMG_89C954C61847-1

1.3. 开始抓包

此时直接从手机发起任何 HTTP 请求即可,PC 上的 Charles 会显示所有 HTTP 数据包。若想要停止抓包,请关闭 Charles 并在手机上取消使用代理服务器。

image-20190202141643329

2. 使用 Charles 抓取 HTTPS

为了使 Charles 能够成为中间人抓取 HTTPS,必须首先安装并信任 Charles 签发的 CA 证书。

2.1. 设置代理服务器

首先按照上一步提到的步骤,打开 Charles 的代理服务器,并配置手机连接该代理服务器。只有这样,才能下载 Charles 签发的证书。

2.2. 安装证书

在手机上访问网页 chls.pro/ssl,iOS 上注意使用 Safari 打开该页面才能正常显示证书。

IMG_F9AF399C1462-1

注意,安装时需要输入手机密码。

2.3. 信任证书

iOS 进入设置 > 通用 > 关于本机 > 证书信任设置,并设置对 Charles 证书的信任。

IMG_DB6EB44D9B15-1

2.4. 配置 Charles

默认 Charles 不会代理任何 HTTPS 请求,需要在 Proxy > SSL Proxying Setting... 中打开 HTTPS 代理:

image-20190202143046675

注意,Charles 代理 HTTPS 采用白名单机制,只有名单中的地址才会被代理 HTTPS 协议。如果想代理全部地址的 HTTPS,在添加地址时只需要在 Host 输入 * 即可。

image-20190202143212206

2.5. 开始抓包

此时直接从手机发起任何 HTTPS 请求即可,PC 上的 Charles 会显示所有 HTTPS 数据包。若想要停止抓包,请关闭 Charles 并在手机上取消使用代理服务器。

image-20190202143459351

3. 使用 Wireshark 抓取

首先安装 Wireshark,下载地址:官网

Wireshark 可以监听任何网卡中的所有网络流量,因此既然我们要监听手机上的网络流量,就需要建立一个映射到手机上的虚拟网卡。

3.1. 安装 Xcode

由于建立虚拟网卡需要使用命令 rvictl,这是 Xcode 工具链之一,所以需要安装 Xcode。可以从从 App Store 或 这里 下载并安装 Xcode

下载并安装之后,请至少运行一次 XcodeXcode 会自动安装必要的工具。

Screen Shot 2019-02-02 at 14.58.32

3.2. 获取设备 UDID

首先,需要获取设备的 UDID。将手机通过数据线连接电脑,打开 iTunes,单击 iPhone 的序列号:

image-20190202145132368

设备的 UDID 就会出现,右键可以复制:

image-20190202145246877

3.3. 配置虚拟网卡

在终端运行命令:

1
2
3
$ rvictl -s [YOUR UDID]

Starting device [YOUR UDID] [SUCCEEDED] with interface rvi0

可以看到,虚拟网卡 rvi0 已经建立。

3.4. 开始抓包

打开 Wireshark,选择虚拟网卡 rvi0 即可开始抓包。

image-20190202151027197

在手机上发送任意数据包即可。

image-20190202152150992

3.5. 停止抓包

停止抓包后,除了关闭 Wireshark,还需要移除虚拟网卡。

在终端运行命令:

1
2
3
$ rvictl -x [YOUR UDID]

Stopping device [YOUR UDID] [SUCCEEDED]