抓包獲取APP的重要信息

網路抓包,這類的術語,大家應該聽過不少了。

不管怎麼表達,本質都是分析網路交互時的數據包,以取得想要的信息。

我們有可能會遇到這樣的場景:「對方這個App是怎麼實現的?它發送的網路請求有沒有帶上時間限制?」、「獲取這個資源的網路地址是什麼,要不要帶token?我能夠模擬發送嗎?」 ...

在研究某個應用程序時,分析網路數據包,往往就是第一個手段。

本文解決一個問題:通過抓包分析出重要信息。

小白:何為抓包?

小程:就是截獲網路上收發的數據包。

小白:網路上那麼多數據包,怎麼知道哪些是有用的?

小程:只截獲目標app的數據包就縮小了範圍,但即便是縮小了範圍,也需要進一步分析與排查。

小白:在垃圾堆里找壞人的行動時間與地點嗎?這是使徒行者2的橋段啊,你有沒有看過?

小程:我在說抓包!不是垃圾堆!不是使徒行者!

小白:你抓,你抓,不要抓急嘛……

抓包的工具有很多,適合在不同的平台上使用。

這裡只介紹charles的使用。

小白:都有什麼樣的抓包工具呢?

小程:比如wireshark、tcpdump、tcpflow、charles、fiddler、sniffer等等。

小白:為什麼只介紹charles,難道其它的不好用嗎?

小白:不是其它的不好用,是我一次只講一個東西!

小白:你......

Charles,是mac上截取網路數據包的工具。

官網:http://www.charlesproxy.com。

(1)破解charles

用破解的charles.jar,覆蓋到程序包內Contents/Java目錄即可(比如4.0.1版本)。

(2)使用charles

charles運行後,就可以看到截獲到的數據包。

charles的視圖分「按結構」跟「按順序(時間先後)」,按順序時可以篩選。

兩個視圖都可以選擇特定的url,再選擇focus,這樣就重點觀察這個url的相關請求與響應,不會跳來跳去。

mac上,抓https包,需要安裝ssl證書:

help->ssl proxying ->install charles root cer..,同時要在keychain中信息這個證書(簡介->信任->ssl設置為始終信任)。

對於https包,確定url後,要右擊選擇enable ssl proxying,才可以做到解密https包

可以右鍵選擇breakpoints,這時會監控這個url的相關行為並下斷點(可以修改發送請求等),在發送請求時、收到回復時、正在接收response body時,都會觸發斷點。觸發斷點後,可以執行「取消(即讓其繼續執行)」、「中止」、「執行」等操作,比如可以修改請求的值後再執行「execute」。

(3)演示:獲取appstore的app的歷史版本

iphone上使用的一些app,新版本還不如舊版本好使。

雖然appstore會把很舊的版本的下載鏈接給隱藏掉,但存貨還是在的。

如何通過itunus拿到某個app的所有歷史版本的信息,並下載到歷史版本呢?

操作如下:

打開charles,再打開itunes並搜索到目標app,再下載這個app,會觀察到https://p23-buy.itunes.apple.com 是目標url,focus這個url。對這個url選擇enable ssl proxying,退出charles。啟動charles,刪除掉itunes上已下載的目標aap,刷新並重新下載。這時,在目標url下面的buyProduct頁面的contents的response部分,會顯示一個array,是一堆id串,這個就是不同版本的下載id(用xml text來查看,可拷貝)。再次刪除已下載的app,並對目標url加上breakpoints,再次下載app。在發送request時會觸發斷點,選擇edit request頁面並選擇xml text查看模式,把下載id替換成目標下載id,之後不斷點擊execute或取消掉斷點再執行。這時,itunes會下載到目標版本的app,之後可以找到對應的ipa,並同步到手機。

以「微信」為例,大概的步驟是這樣的:

(a)下載微信時,在charles上focus目標url,並激活ssl:

(b)刪除已下載的微信,啟動charles後,重新下載微信,留意目標url下面的內容:

(c)刪除已下載的微信,對目標url加上breakpoints,再次下載,修改請求,再execute:

(d)下載到最舊版本的微信:

(4)演示:抓取qq音樂歌手詳情的信息

操作如下:

charles,proxy->proxy setting,port使用8888,勾選enalbe transperent http proxying,開啟代理。help->local ip address,查看charles代理的ip地址。手機,如iphone,wifi信息->http代理,填寫伺服器(charles的代理ip)與埠(8888)。手機會連接上charles,允許它連接。對於https協議,手機上需求安裝ssl的證書:在safari上輸入http://charlesproxy.com/getssl,跳轉安裝證書。鎖定目標url,即可拿到數據。比如,對於iphone上的qq音樂的歌手詳情,目標url是https://u.y.qq.com,focus它,右鍵打開ssl proxy,就可以拿到詳情信息。

大概的演示是這樣的:

(a)charles開啟代理:

(b)手機連上代理後,對u.y.qq.com特別處理,可以看到歌手信息:

(5)演示:獲取「抖音短視頻」的歌曲下載鏈接

小白:我知道!這個抖音短視頻很好玩的,所有歌曲都只是副歌部分。它的下載鏈接是可以用的嗎?歌曲是否加密了?

小程:可以用,歌曲至少現在是沒有加密的。

抖音,大概有50幾萬首歌曲。

可以通過搜索介面或者分類歌曲介面,來取得歌曲列表信息。歌曲列表信息是json格式的內容,其中包括這樣的信息:

"play_url": { "url_list": [ "http://p3.pstatp.com/obj/29c90000eb8b5ca6fff2" ], "uri": "29c90000eb8b5ca6fff2"},

url_list就是歌曲下載鏈接。除了這個,還可以找到歌手名、歌曲名等。

小白:為什麼不詳細說說請求鏈接是什麼呀?

小程:因為演示只是為了學習,不應該涉及太多商業的內容。

小白:我去!


推薦閱讀:

網路數據包的捕獲與分析
登錄抓包逆向分析學習筆記
魯德——C/S架構的性能測試
如何抓取智力超人的數據包

TAG:逆向工程 | 抓包 | iOS |