搞定某APP的TCP抓包,並直接呼叫so檔案進行Hook抓取

王平發表於2018-12-19

APP抓包比較繁瑣,尤其是對方優先走socket,發TCP包,而不是走應用層發http/https協議。這種抓包更煩躁,絕大部分利用中間人攻擊原理這種代理抓包軟體都抓不到tcp請求,代理抓包軟體大都只能抓應用層協議。

今天寫篇搞定發TCP包的APP和實現Hook抓取的文章。

搞定某APP的TCP抓包,並直接呼叫so檔案進行Hook抓取

抓TCP包常用的工具是wireshark和tcpdump。tcpdump可以執行在手機上抓包,但沒有介面,wireshark有介面,過濾資料包較方便,就用這兩個工具來打配合抓TCP包吧。

tcpdump是命令列工具,執行起來是這樣子。

tcpdump capture

把抓完的資料包儲存為pcap格式,並拉到本地電腦上來,用wirseshark開啟該檔案,過濾出相應APP的資料包。

wireshark 過濾

用TCP流開啟Continuation Data,裡面絕大部分都是亂碼,因為tcp裡的資料是對方的私有協議或有加密,沒辦法解析。

tcp stream

通過觀察還是有一些可見字元,諸如:”b” “s”等等,這給了一絲線索。使用反編譯工具開啟apk,用萬能的搜尋大法,在程式碼裡各種搜尋這些可見字元,找到了如下程式碼。

review code

已經找到看似有用的程式碼啦,等等,我們上面一頓猛如虎的操作的用意是什麼呢

我們是想通過抓取TCP包,觀察包裡的資料,給我們線索。用這些線索來找到APP發TCP的程式碼位置,通過Hook手段不讓該APP發TCP,迫使其發http(s)協議,然後可以使用代理抓包軟體正常抓包。定位到如上程式碼了,就寫段Hook程式碼,Hook上述方法,把呼叫堆疊列印出來,碰碰運氣,看能否追蹤到傳送資料包的程式碼位置。

frida hook stack

通過下面列印出來的呼叫堆疊,

calltrace

再一頓猛點,運氣不錯,定位到一段可疑程式碼(如下),大大的socketConnected字樣非常顯眼,猜也能猜到它的作用。

socket code

isSocketConnected為true就會進入if語句,為false就不會進入if語句。果斷Hook isSocketConnected方法讓它返回false,不進入if語句裡。

hook socket connect

這時再來開啟Fiddler抓包軟體抓包試試?bingo,關閉tcp成功,抓到http協議啦。

fiddler capture

抓到包是關鍵一步,接下來就該模擬請求引數去抓資料了。But,請求的引數裡如下引數隨便構造會請求失敗,那就只有繼續Hook咯,在程式碼裡找到引數構造的地方。

param gen

還是那個套路,先用搜尋大法一頓搜,運氣不錯,搜到引數構造的地方。

frida call so method

一頓驚喜後,發現該方法是寫在so檔案裡,難不成要去分析so檔案?NO,才不想去分析so檔案,直接用Hook大法呼叫so裡的方法就好啦。嗯,管他三七二十一,先擼幾行Hook程式碼搞一搞。

frida hook

Hook開發,難點是找對Hook點,Hook點找對後,程式碼非常簡短和優美。嗯,幾行程式碼搞定,直接Hook呼叫so檔案裡的方法。程式執行一下試試?

crawl result

還不錯的樣子。

嗯,Hook開發相對來說要麻煩一點,需要逆向思維,別人的程式碼你正著看,大概率是懵圈的,因為程式碼都被混淆成abc啦,要靠線索和經驗去找程式碼片段,從結果反向推導對方可能的程式邏輯,再輔與Hook的手段列印程式執行時的資料和呼叫堆疊等手段來排除和尋找程式碼確切的位置。

嗯,小聲說一句,我有在教爬蟲,主要教大規模抓取技巧/Hook抓取/爬蟲技術掙被動收入的一些方法,自認為反響還不錯,感興趣可以加我微信,麻煩備註:學習 ,嘿

contact

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章