一篇文章教你用python逆向抓取App資料
今天繼續給大夥分享一下 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
加密,金鑰是固定的字串
Frida Hook
Java
不太熟,分析不來,直接使用 frida
來寫一段 hook
程式碼看一看 encrypt
函式入參和出參的內容:小編本身就是一名python開發工程師,我自己花了三天時間整理了一套python學習教程,從最基礎的python指令碼到web開發,爬蟲,資料分析,資料視覺化,機器學習,等,這些資料有想要的小夥伴" 點選 " 即可領取
同時來抓包對比:
就得到了這裡的請求 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開發,爬蟲,資料分析,資料視覺化,機器學習,等,這些資料有想要的小夥伴可關注小編,並在後臺私信小編:" 點選 " 即可領取