之前也抓過一些app,數據都比較好取,也沒有研究的太深,畢竟還有android 模擬器+ appium 的方法。直到遇見了一款app ,具體名字就不說了,它安裝在模擬器上竟然打不開 !!第一次遇見上網查了許久 ,換了好幾個模擬器都不行,最后猜測是apk里設置了檢測模擬器的機制(這里沒有再往下研究有可能是設置問題 等等,下次有時間在研究這一方面看到底模擬器與真機的區別)。
軟件用手機代理抓包發送request請求時,發現請求頭中有個特殊的參配,每次請求都有變化,猜測是app中的一個加密算法 ,有可能在apk中找到。所以本次抓取思路:
1.將apk 反編譯 成java 文件
2.從java 文件中找到生成字段的代碼,將其修改為可讀的java程序(java好長時間沒用過,還好大部分都還記得)
3.將java代碼 改為python 代碼(本來想從網上找找有沒有python 執行java的方法 但安裝完發現麻煩是一方面,主要還是不太好用)
4.嘗試模擬請求獲取數據
具體過程如下:
首先,抓包工具使用的是Burp Suite , 先使用代理抓取手機端的具體請求--->查看header --->使用BurpSuite 工具中的Repeat--->在raw 上修改參數,刪除參數--->得到必需字段 為Access_tk (Burp Suite 的使用安裝下載自行百度)
之后,開始反編譯apk.反編譯工具在網上有兩種,一種是Android Killer 這是一個集成好的反編譯工具直接安裝即可使用 使用鏈接 https://www.cnblogs.com/common1140/p/5198460.html 適用於 簡單的app ,如果在apk里加了防止反編譯的化就不太好用,但它的搜索很好用,可以直接尋找文件中的字段,通過它 我們可以找到我們點擊的頁面 從而找到響應的方法名
第二種就是網上常見的反編譯思路 :
1、android-apktool 主要是進行反編譯的
2、dex2jar-0.0.9.15 將反編譯后的classes.dex文件轉化為jar
3、jd-gui-0.3.6.windows 對第2步獲得的jar,進行查看
具體安裝工程參照下面的作者https://blog.csdn.net/lmj623565791/article/details/23564065 (注:不需要在反編譯回去)
剩下的就是在文件夾中尋找了 最后在一個util包中 找到一個headers.java的文件 ,文件中剛好有生成的規則,具體規則就不放了 ,放一張規則中使用的md5加密算法。
最后完善代碼 ,修改為python 。 可以成功獲取數據。
注意:
1. 在查找文件中,可以通過名字查找。像有一些問價你就可以逃過去不用在看了,而且查找時要有目標,優先查看文件帶header,http,request,response 的文件這樣效率會很快
2. 說個scrapy Request 的坑,使用Request 會自動修改headers中參數名的大小寫,這個坑使我一度以為我缺了什么參數 導致請求不成功,其實就是因為一個字母大寫服務器端就不認了。
最后這是本人原創 要轉載請附上原始鏈接 ,有別的想法歡迎留言一起討論。