在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包。也收錄在這里做為補充吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM