在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.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容