之前我一般是通過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就可以查看到剛才的資料包了。
----------------
最近在這裡看到一篇相似題材的文章。前面介紹的方案大致相同,後面倒是介紹了一下,使用HAR來查看http包。也收錄在這裡做為補充吧。