抓包獲取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)手機連上代理後,對https://u.y.qq.com特別處理,可以看到歌手信息:
(5)演示:獲取「抖音短視頻」的歌曲下載鏈接
小白:我知道!這個抖音短視頻很好玩的,所有歌曲都只是副歌部分。它的下載鏈接是可以用的嗎?歌曲是否加密了?
小程:可以用,歌曲至少現在是沒有加密的。
抖音,大概有50幾萬首歌曲。
可以通過搜索介面或者分類歌曲介面,來取得歌曲列表信息。歌曲列表信息是json格式的內容,其中包括這樣的信息:
"play_url": { "url_list": [ "http://p3.pstatp.com/obj/29c90000eb8b5ca6fff2" ], "uri": "29c90000eb8b5ca6fff2"},
url_list就是歌曲下載鏈接。除了這個,還可以找到歌手名、歌曲名等。
小白:為什麼不詳細說說請求鏈接是什麼呀?
小程:因為演示只是為了學習,不應該涉及太多商業的內容。小白:我去!
推薦閱讀: