如何使用Python逆向抓取APP數(shù)據(jù)
今天給大伙分享一下 Python 爬蟲的教程,這次主要涉及到的是關(guān)于某 APP 的逆向分析并抓取數(shù)據(jù),關(guān)于 APP 的反爬會(huì)麻煩一些,比如 Android 端的代碼寫完一般會(huì)進(jìn)行打包并混淆加密加固,所以除了抓包之外,還需要對(duì) APP 進(jìn)行查殼脫殼反編譯等操作。
所需設(shè)備和環(huán)境:
設(shè)備:安卓手機(jī)
抓包:
fiddler+xposed+JustTrustme
查殼:ApkScan-PKID
脫殼:frida-DEXDump
反編譯:jadx-gui
hook:frida
抓包
手機(jī)安裝app,設(shè)置好代理,打開(kāi) fiddler 先來(lái)抓個(gè)包,發(fā)現(xiàn)這個(gè) app 做了證書驗(yàn)證,fiddler 開(kāi)啟之后 app提示連接不到服務(wù)器:
那就是 app 做了 SSL pinning 證書驗(yàn)證,解決這種問(wèn)題一般都是安裝 xposed 框架,里面有一個(gè) JustTrustme 模塊,它的原理就是hook,直接繞過(guò)證書驗(yàn)證類,安裝方法大家百度吧。
之后再打開(kāi)app,可以看到成功抓到了包:
先簡(jiǎn)單分析一下,可以看到請(qǐng)求體中 formdata 是密文,響應(yīng)內(nèi)容也是密文,這個(gè)請(qǐng)求和響應(yīng)中有用信息非常少,甚至都不知道在 jadx-gui 里怎么搜索,請(qǐng)求體中 formdata 是以兩個(gè)等號(hào)結(jié)尾的,應(yīng)該是個(gè) base64 編碼,其他一概不知。。。
脫殼反編譯
那先來(lái)反編譯,在這之前,通常是先用查殼工具檢查一下 app 是否加固,打開(kāi) ApkScan-PKID ,把 app
可以看到這個(gè) app 使用了 360 加固,真是層層設(shè)限?。?!這里使用frida-DEXDump來(lái)脫殼,可以到 github 上下載 frida-DEXDump 的源代碼,完成之后打開(kāi)項(xiàng)目所在文件夾,在當(dāng)前位置打開(kāi)命令行運(yùn)行以下命令:
python main.py
等待脫殼完成,可以看到當(dāng)前項(xiàng)目中生成了一個(gè)對(duì)應(yīng)文件夾,里面有很多dex文
下面用 jadx-gui 打開(kāi) dex 文件,一般先從最大的文件開(kāi)始依次搜索關(guān)鍵字,我們知道 java 中使用 base64 是有 BASE64Encoder 關(guān)鍵字的,因?yàn)樽グ玫降男畔⒎浅I?,在這里就只能搜索這個(gè)關(guān)鍵字了,搜到第四個(gè)dex中,得到了疑似加密處:
可以看到是使用了一個(gè) aes 加密,密鑰是固定的字符串。
Frida Hoo
Java不太熟,分析不來(lái),直接使用 frida 來(lái)寫一段 hook 代碼看一看 encrypt 函數(shù)入?yún)⒑统鰠⒌膬?nèi)容:
同時(shí)來(lái)抓包對(duì)比:
就得到了這里的請(qǐng)求 data 入?yún)?shù)據(jù):
pageIndex:當(dāng)前頁(yè)碼
pageSize:當(dāng)前頁(yè)對(duì)應(yīng)的數(shù)據(jù)條數(shù)
typeId 和 source 是固定的, 接下來(lái)再來(lái) hook decrypt 函數(shù),對(duì)比抓包和 hook 結(jié)果:
結(jié)果是一樣的,至此,我們逆向分析就完成了。
總結(jié)一下請(qǐng)求和響應(yīng)過(guò)程,就是請(qǐng)求體中的 data 經(jīng)過(guò) encrypt 函數(shù)加密傳參,改變 pageIndex 就可以得到每頁(yè)數(shù)據(jù),響應(yīng)是經(jīng)過(guò) decrypt 函數(shù)加密顯示,那我們只需要在 python 中實(shí)現(xiàn)這個(gè) aes 加密解密過(guò)程就行了,從反編譯的 java 代碼中可以看出密鑰是固定的:wxtdefgabcdawn12,沒(méi)有 iv 偏移。
請(qǐng)求
直接上代碼:
運(yùn)行代碼,成功拿到數(shù)據(jù):
到此這篇關(guān)于如何使用Python逆向抓取APP數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Python逆向抓取APP數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中的多線程實(shí)例(簡(jiǎn)單易懂)
這篇文章主要介紹了Python中的多線程實(shí)例,一個(gè)CPU,將時(shí)間切成一片一片的,CPU輪轉(zhuǎn)著去處理一件一件的事情,到了規(guī)定的時(shí)間片就處理下一件事情,更多的相關(guān)內(nèi)容需要的小伙伴可以參考下面文章詳細(xì)2022-06-06python?argparse的使用步驟(全網(wǎng)最全)
argparse是python的一個(gè)命令行參數(shù)解析包,在代碼需要頻繁修改參數(shù)時(shí),方便使用,主要用法就是在命令行輸入自己想要修改的參數(shù),這篇文章主要介紹了python?argparse的使用步驟(全網(wǎng)最全),需要的朋友可以參考下2023-04-04Python使用PIL進(jìn)行JPEG圖像壓縮的簡(jiǎn)易教程
本文介紹了如何使用Python編程語(yǔ)言和wxPython圖形用戶界面庫(kù)進(jìn)行JPEG圖像的壓縮,通過(guò)添加滑塊控件,我們可以調(diào)整壓縮質(zhì)量,并將壓縮后的照片另存為原來(lái)的名稱加上后綴"壓縮+質(zhì)量數(shù)字"的新文件,需要的朋友可以參考下2023-09-09python3 使用函數(shù)求兩個(gè)數(shù)的和與差
這篇文章主要介紹了python3 使用函數(shù)求兩個(gè)數(shù)的和與差,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2021-05-05利用Python腳本實(shí)現(xiàn)自動(dòng)刷網(wǎng)課
這篇文章主要介紹了利用Python腳本實(shí)現(xiàn)自動(dòng)刷網(wǎng)課,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02Python使用PyMySql增刪改查Mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)
PyMysql是Python中用于連接MySQL數(shù)據(jù)庫(kù)的一個(gè)第三方庫(kù),本文主要介紹了Python使用PyMySql增刪改查Mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01解決pyecharts在jupyter notebook中使用報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了解決pyecharts在jupyter notebook中使用報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06