偷懶了一陣,今天寫篇抓取APP的文章,用最簡單的Hook方法抓取APP。
抓APP有三個麻煩的地方,一個是APP脫殼,二個是抓包問題,三個是請求頭裡signature/token的還原。前兩個問題要好一點,有現成的工具使用,絕大部分APP都能搞定。第三個問題sig/token還原是最麻煩的,沒有一個工具能自動化搞定,有的生成sig/token的程式碼寫在Java層裡,有的寫在Native層裡。還原出生成邏輯,還是比較考驗你的基本功。
對於大部分爬蟲er來說,還是比較棘手。有沒有一種方法/工具直接呼叫APP裡的token生成程式碼,而不去還原生成邏輯呢?
嗯,是有的,如果token是在so檔案裡,最強大的工具莫過於Unicorn;也有使用AndServer充當Web Server把待抓取APP以http介面的形式暴露給開發者。不過這兩種形式,我認為對於爬蟲選手來說,還是比較繁複,配置和使用麻煩,可能還要自己編譯apk,在開發除錯階段費時。
還有一種直接呼叫app裡so程式碼或java程式碼的方式是Frida rpc。
終於鋪墊完了。
frida是個全能Hook框架,iOS/Mac/Windows/Linux/Android全能Hook,frida rpc可以直接呼叫上述作業系統程式碼,開發語言是Python+Javascript,對於爬蟲er來說,這兩門語言應該都比較熟悉,容易上手使用。
文字描述比較繁瑣,直接上程式/圖示,更容易理解。
下圖是某個APP的程式碼
從上圖可以看到需要呼叫getAS方法,它會返回一個字串,這個字串就是signature。但是getAS在libnative-lib.so檔案裡。我們不用去分析這個so檔案,當作一個黑匣子,直接使用frida rpc來呼叫getAS方法即可。
上述是使用JS程式碼進行Hook,寫好後用frida注入到裝置裡,用Python直接呼叫getas這個函式,即可驅動frida呼叫該APP的getAS方法,返回signature。每次你想獲取sig的時候,呼叫一下getas即可,只需幾行程式碼,就可搞定。
它的思路就是Hook住相關的類和方法,讓我們擁有該方法的控制權,然後我們自己來呼叫該方法。
這個過程你要費點時間的地方是構造傳入getAS的形參,從第一張圖可以看到getAS需要傳入兩個引數,一個Context型別,一個String,你需要構造出這兩個型別的引數傳入getAS。
Hook開發的時候,需要寫的程式碼其實較少,只要你找準了Hook點。
上述寫好的獲取signature程式碼,還只能本地呼叫,不能遠端呼叫。如果你的爬蟲程式是執行在內部區域網內,還可以這樣使用,如果是執行在雲伺服器上,想要透過公網遠端呼叫,就還需要用Python構造一個web server,以http的形式把介面暴露出來,供遠端呼叫。
非常無聊中,歡迎撩騷,我的個人微信:
我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。
***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***