在iOS设备上进行抓包(补充)

之前我一般是通过wifi连入我的iMac,然后使用HttpScoop或者Charles来进行数据抓取及分析。前者非常好用,在调协议时我的必备工具,就是更新太慢,2.0版本老不出来。后者没用过,听说是java的。而且价格也太贵,前者15美刀,后者50美刀。

Wireshark有装,但是界面实在让人提不起来胃口使用,所以装了就删除了。 HttpScoop虽然好用,但是只适用于http协议,对于socket通讯无能为力。

今天在RESOW看到这篇文章,介绍利用XCode内置工具即可实现对所有类型的数据包进行抓取、查看。

(以下内容转载自RESOW)

可能出于各种需要,你需要在iOS上抓取数据包,比如查看一下安装的软件是否私自上传了什么东西,或者研究一下如何实现某些功能等等。

关于iOS上抓包目前有很多方法,可以看Apple Technical Q&A 1176,里面介绍的内容很全面,有工具的介绍和几种支持方法的具体做法。

不过QA所述没有包含完整的流程,缺失了一些步骤;另外网络上常用的方法是通过HTTP Proxy方式抓包,这种方式的缺点是无法抓取EDGE/3G的数据包,如果WIFI无法设置代理那么这种方式也就没有办法了。

下面要介绍的方式就解决了这个问题。

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

Apple在iOS5.0以上增加了RVI(Remote Virtual Interface),打开它非常简单,只需要把iOS设备通过usb连接到Mac上,然后打开“终端”,输入

rvictl -s [Your Device's UDID]   

然后在终端上会显示

Starting device ********** [SUCCEEDED]

字样

如果这一步产生了什么错误的话,可能是没有安装XCode或者UDID输入错误

接下来在终端可以使用

ifconfig -l

查看当前Mac上的接口,比如(不同Mac可能会有差异):

lo0 gif0 en0 en1 fw0 rvi0

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

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

解释一下上面重要参数的含义:

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

当tcpdump运行之后,你可以在iOS设备上开始浏览你想抓取的App,期间产生的数据包均会保存到dump.pcap文件中,当想结束抓取时直接终止tcpdump即可

接下来就是需要处理抓取的数据,目前通过tcpdump保存的dump.pcap保存的是原始数据,但是一些常用的抓包软件(比如Chales)是解析不了的,所以需要做一个转换。

打开终端,我们需要使用tcprewrite这款工具,如果没有安装的话,可以通过HomeBrew快速安装

brew install tcpreplay

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

tcprewrite –dlt=enet –enet-dmac=00:11:22:33:44:55 –enet-smac=66:77:88:99:AA:BB –infile=dump.pcap –outfile=dumpFinal.pcap

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

屏幕快照 2013 03 05 上午11 07 551

---------------- 最近在这里看到一篇相似题材的文章。前面介绍的方案大致相同,后面倒是介绍了一下,使用HAR来查看http包。也收录在这里做为补充吧。
posted @ 2013-03-25 09:41 wupher 阅读(...) 评论(...) 编辑 收藏