今天繼續給大夥分享一下 Python 爬蟲的教程,這次主要涉及到的是關於某 APP 的逆向分析並抓取數據,關於 APP 的反爬會麻煩一些,比如 Android 端的代碼寫完一般會進行打包並混淆加密加固,所以除了抓包之外,還需要對 APP 進行查殼脫殼反編譯等操作。
接下來由小編給大家演示一下,如何逆向抓取 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 加密,密鑰是固定的字符串
Java不太熟,分析不來,直接使用 frida 來寫一段 hook 代碼看一看 encrypt 函數入參和出參的內容:
碼字不易廢話兩句:有需要學習資料的或者有技術問題交流可以私信小編「01」
同時來抓包對比:
就得到了這裡的請求 data 入參數據:
pageIndex:當前頁碼 pageSize:當前頁對應的數據條數
typeId 和 source 是固定的, 接下來再來 hook decrypt 函數,對比抓包和hook 結果:
結果是一樣的,至此,我們逆向分析就完成了。
總結一下請求和響應過程,就是請求體中的 data 經過 encrypt 函數加密傳參,改變 pageIndex就可以得到每頁數據,響應是經過 decrypt 函數加密顯示,那我們只需要在 python 中實現這個 aes 加密解密過程就行了,從反編譯的java代碼中可以看出密鑰是固定的:wxtdefgabcdawn12,沒有iv 偏移。
直接上代碼:
運行代碼,成功拿到數據:
可以看到,現在數據加密已經很普遍了,隨便一個很小的app 都有好幾道數據保護機制,這次只涉及到java 層的加密,下次來講講 native 層加密的 hook 方法、frida-rpc 主動調用以及逆向神器inspeckage的應用。
最後,以上內容僅供學習交流,小編本身就是一名python開發工程師,我自己花了三天時間整理了一套python學習教程,從最基礎的python腳本到web開發,爬蟲,數據分析,數據可視化,機器學習,等,這些資料有想要的小夥伴可關注小編,並在後臺私信小編:" 01 " 即可領取