首頁>技術>

今天繼續給大夥分享一下 Python 爬蟲的教程,這次主要涉及到的是關於某 APP 的逆向分析並抓取資料,關於 APP 的反爬會麻煩一些,比如 Android 端的程式碼寫完一般會進行打包並混淆加密加固,所以除了抓包之外,還需要對 APP 進行查殼脫殼反編譯等操作。

接下來由「小帥b的朋友:Houser」 給大家演示一下,如何逆向抓取 APP 資料,給你參考一下思路:

所需裝置和環境:

裝置:安卓手機

抓包:

fiddler+xposed+JustTrustme

查殼:ApkScan-PKID

脫殼:frida-DEXDump

反編譯:jadx-gui

hook:frida

抓包

手機安裝app,設定好代理,開啟 fiddler 先來抓個包,發現這個 app 做了證書驗證,fiddler 開啟之後 app提示連線不到伺服器:

那就是 app 做了 SSL pinning 證書驗證,解決這種問題一般都是安裝 xposed 框架,裡面有一個 JustTrustme 模組,它的原理就是hook,直接繞過證書驗證類,安裝方法大家百度吧。

之後再開啟app,可以看到成功抓到了包:

先簡單分析一下,可以看到請求體中 formdata 是密文,響應內容也是密文,這個請求和響應中有用資訊非常少,甚至都不知道在 jadx-gui 裡怎麼搜尋,請求體中 formdata 是以兩個等號結尾的,應該是個 base64 編碼,其他一概不知。。。

脫殼反編譯

那先來反編譯,在這之前,通常是先用查殼工具檢查一下 app 是否加固,開啟 ApkScan-PKID ,把 app 拖入:

可以看到這個 app 使用了 360 加固,真是層層設限啊!!這裡使用frida-DEXDump來脫殼,可以到 github 上下載 frida-DEXDump 的原始碼,完成之後開啟專案所在資料夾,在當前位置開啟命令列執行以下命令:

python main.py

等待脫殼完成,可以看到當前專案中生成了一個對應資料夾,裡面有很多dex檔案:

下面用 jadx-gui 開啟 dex 檔案,一般先從最大的檔案開始依次搜尋關鍵字,我們知道 java 中使用 base64 是有 BASE64Encoder 關鍵字的,因為抓包得到的資訊非常少,在這裡就只能搜尋這個關鍵字了,搜到第四個dex中,得到了疑似加密處:

可以看到是使用了一個 aes 加密,金鑰是固定的字串。

Frida Hook

Java不太熟,分析不來,直接使用 frida 來寫一段 hook 程式碼看一看 encrypt 函式入參和出參的內容:

同時來抓包對比:

就得到了這裡的請求 data 入引數據:

pageIndex:當前頁碼

pageSize:當前頁對應的資料條數

typeId 和 source 是固定的, 接下來再來 hook decrypt 函式,對比抓包和 hook 結果:

結果是一樣的,至此,我們逆向分析就完成了。

總結一下請求和響應過程,就是請求體中的 data 經過 encrypt 函式加密傳參,改變 pageIndex 就可以得到每頁資料,響應是經過 decrypt 函式加密顯示,那我們只需要在 python 中實現這個 aes 加密解密過程就行了,從反編譯的 java 程式碼中可以看出金鑰是固定的:wxtdefgabcdawn12,沒有 iv 偏移。

請求

直接上程式碼:

執行程式碼,成功拿到資料:

ok,以上就是逆向 app 爬蟲的全部內容,可以看到,現在資料加密已經很普遍了,隨便一個很小的 app 都有好幾道資料保護機制,這次只涉及到 java 層的加密,下次來講講 native 層加密的 hook 方法、frida-rpc 主動呼叫以及逆向神器 inspeckage 的應用。

收穫更多騷操作

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • OAuth2.0協議入門(一)