之前我一般是通過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就可以查看到剛才的數據包了。