iOS 抓包之rvictl


在此之前我都是通过wifi连入我的mac,通过Charles来进行数据抓取及分析,但是其只适用于http协议,对于socket通讯无能为力。 使用XCode内置工具rvictl 即可实现对所有类型的数据包进行抓取、查看。

需求:iOS系统要求5.0以上,拥有Mac OS 并且安装XCode

rvictl 抓包步骤:

  • 使用USB数据线将iOS设备连接到MAC上 首先需要获得iOS设备的UDID,使用Xcode的Organizer查看
  • 创建RVI接口

    $ rvictl -s 你设备的UUID

    此时会输出 Starting device 265d34997640921b66d69b807f774f11ce3404bd [SUCCEEDED] with interface rvi0

  • 接下来在终端可以使用 ifconfig -l查看当前Mac上的接口,比如(不同Mac可能会有差异):

    $ ifconfig -l
    lo0 gif0 stf0 EHC26 XHC20 EHC29 fw0 en0 en2 en1 p2p0 awdl0 bridge0 bridge100 utun0 utun1 utun2 utun3 en4 rvi0
  • 查看是否创建成功

    $ ifconfig rvi0
    rvi0: flags=3005<UP,DEBUG,LINK0,LINK1> mtu 0

    其中rvi0就是Remote Virtual Interface,这也就意味着在你的Mac上虚拟了一个iOS设备接口,接下来就是通过tcpdump抓取这个接口上的数据包

  • 在mac上用抓包工具wireshark或tcpdump等工具抓包分析, 并保存文件为保存到当前目录的dump.pcap中

    $ sudo tcpdump -i rvi0 -n -s 0 -w dump.pcap tcp

    tcpdump参数解释: -i rvi0 选择需要抓取的接口为rvi0(远程虚拟接口) -s 0 抓取全部数据包 -w dump.pcap 设置保存的文件名称 tcp 只抓取tcp包

开始抓取时终端会输出:

$ sudo tcpdump -i rvi0 -n -s 0 -w dump.pcap tcp
Password:
tcpdump: WARNING: rvi0: That device doesn't support promiscuous mode
(BIOCPROMISC: Operation not supported on socket)
tcpdump: listening on rvi0, link-type PKTAP (Apple DLT_PKTAP), capture size 262144 bytes

此时dump.pcap文件已经生成,可以双击使用wireshark查看。

  • 停止抓包, 终端中按ctrl+C,然后终端输入以下关闭虚拟接口:
    $ rvictl -x iOS设备的UUID

当tcpdump运行之后,你可以在iOS设备上开始浏览你想抓取的App,期间产生的数据包均会保存到dump.pcap文件中,当想结束抓取时直接终止tcpdump即可 接下来就是需要处理抓取的数据,目前通过tcpdump保存的dump.pcap保存的是原始数据,但是一些常用的抓包软件(比如Chales)是解析不了的,所以需要做一个转换。 打开终端,我们需要使用tcprewrite这款工具,如果没有安装的话,可以通过HomeBrew快速安装

brew install tcpreplay

我们需要的tcprewrite是tcpreplay套件中的一个工具,当安装完成后,输入

tcprewrite --enet-dmac=00:55:22:AF:C6:37 --enet-smac=00:44:66:FC:29:AF --infile=dump.pcap --outfile=output.pcap

如果没有报错就说明转换成功,之后使用Chales打开dumpFinal.pcap就可以查看到刚才的数据包了。

  • 如果mac没有安装tcpdump,可以进入官网下载并安装

tcpdump官网下载 其依赖libpcap 官网有下载 安装 libpcap 和 tcpdump

$ cd libpcap-1.7.4
$ ./configure
$ make
$ sudo make install

$ cd tcpdump-4.7.4
$ ./configure
$ make
$ sudo make install

附件: