APP数据采集
目錄
1.App數據抓取分析
2.爬取思路
2.1.抓包
2.2.HOOK技術
3.需要爬的坑
坑一:簽名算法
坑二:http爬取回來的信息和頁面顯示不一致
坑三:模擬器中的坑
坑四:帳號的坑
4.難度評估
1.一星
2.二星
3.三星
4.四星
5.工具
1. 抓包工具
2.反編譯
6.實例/文章
本文內容來自網絡,在自己進行技術調研的手機APP數據采集是網上搜集的資料。
其實所謂抓取APP數據和抓取網頁數據是存在一定的不同,抓取網頁數據可以采用模擬訪問網站然后抓取網頁接收內容的模式進行數據抓取。而APP則更傾向于通過截獲數據傳輸包的形式進行(Wireshark和Fiddler+Python)。
一般來說,我們用WireShark+Fiddler來獲取大部分數據是沒有多大問題的。但這里有個問題是,如果你碰到的是用SSL/TLS等加密手段加密過的網絡數據的時候,往往我們只能束手無策。在過去的話,如果我們擁有的該傳輸會話的私鑰的話我們還是可以將它提供給WireShark來讓其對這些加密數據包進行解密的,但這已經是想當年還用RSA進行網絡數據加密的年代的事情了。當今大家都已經逐漸擁抱前向加密技術PFS的時代了,所以該方法就不再適用了。因為前向加密技術的目的就是讓每個數據交互都使用的是不同的私鑰,所以你像以前RSA時代一樣想只用一個私鑰就能把整個session會話的網絡數據包都破解出來的話是不可能的了(其實可以也通過類似瀏覽器的Session Key功能解決)。
1.App數據抓取分析
凡是可以看到的APP數據都可以抓取。
分析研究過不下300個APP抓包。
50%的app,通過抓包軟件就可以分析出抓取參數并抓取到信息。
30%的app,可能需要適當的反編譯,分析出加密算法并抓取到信息。
10%的app,可能加固,需要脫殼,然后反編譯,分析出加密算法并抓取到信息。
10%的app,通過各式各樣的簽名,證書,設備綁定等方法,隱藏加密算法。
總的來說,沒有不能抓取的app,只是時間成本的問題。
2.爬取思路
1.抓包
2. HOOK
2.1.抓包
有代碼經驗或APP開發的同學都很容易理解,其實很多APP,走的都是webservice通訊協議的方式,并且由于是公開數據,而且大部分是無加密的。所以只要對網絡端口進行監測,對APP進行模擬操作,即可知道APP里面的數據是如何獲取的。
我們只需要寫代碼模擬其請求,無論POST還是GET,即可得到該請求所返回的信息。再通過對返回的信息結構化解析,即可得到我們想要的數據。
public static void main(String[] args) {Spider.create(new GithubRepoPageProcessor())//從https://github.com/****開始抓.addUrl("https://github.com/****")//設置Scheduler,使用Redis來管理URL隊列.setScheduler(new RedisScheduler("localhost"))//設置Pipeline,將結果以json方式保存到文件.addPipeline(new JsonFilePipeline("D:\\data\\webmagic"))//開啟5個線程同時執行.thread(5)//啟動爬蟲.run(); }?
2.2.HOOK技術
HOOK技術是一種走操作系統內核的技術,由于安卓系統是開源的,所以可以借助一些框架修改內核,從而實現你要的功能。HOOK的形式,我們走的是Xposed框架。Xposed是一款可以在不修改任何其他開發者開發的應用(包括系統服務)的情況下,改變程序運行的一個開源框架服務。基于它可以制作出許多功能強大的模塊,以此來達到應用程序按照你的意愿運行的目的。
如果把安卓手機看做一座城堡,那Xposed可以讓你擁有一個上帝視角,城里的運作細節盡收你眼底,還能讓你插一手改變城堡的運作規律。
什么意思呢?簡單的說就是你可以通過他,自動化的控制你的APP。如果將我們的APP開在模擬器上,我們可以通過編碼,通過他告訴APP這一步干什么,下一步干什么。你把它理解成類似按健精靈或游戲打怪外掛就可以了。
而他每走一步,APP與服務端交互的數據,均可獲取下來。這種方式廣泛用于一些成熟的APP。比如某信采集。
public class HookActivity implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {final String packageName = lpparam.packageName;XposedBridge.log("--------------------: " + packageName);try {XposedBridge.hookAllMethods(Activity.class, "onCreate", new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param)throws Throwable {XposedBridge.log("=== Activity onCreate: " + param.thisObject);}});} catch (Throwable error) {XposedBridge.log("xxxxxxxxxxxx: " + error);}}}3.需要爬的坑
坑一:簽名算法
以某信的文章列表頁及某信息頁為例,對其http訪問進行抓包,會發現其url的一個核心參數是我們無法知道如何生成的,這就導致,我們不可能直接用該url進行信息爬取;簽名算法如果無法破解,HTTP這條路就是死路了。
坑二:http爬取回來的信息和頁面顯示不一致
以某信的某信息頁為例,對比直接訪問某信頁面及http爬取的信息,可明顯發現http爬取到的信息較少。造成得兩種方式都用,才能既照顧速度又照顧完整性。
坑三:模擬器中的坑
APP自動識別你的運行環境進行屏蔽,最厲害的還是某信,連你是用模擬器打開還是真機打開,是什么內核的,全部進行限制。曾經見過牛人,找某手機廠商專門定做真機來配合。
坑四:帳號的坑
這個坑就有點大了,要找號、養號,都不是件容易的事情,更慘的是封號,真真讓你一夜回到解放前。
4.難度評估
1.一星
此類app沒有進行特殊的防護,可以直接在網頁訪問app中請求的url
困難點:無
2.二星
此類app使用的cookie和session等技術,對數據的請求需要cookie等信息
困難點:
1、請求頭需要附帶cookie值
3.三星
此類app在發起請求時,在headers中添加md5驗證字段,該字段對請求的url的參數進行特殊的處理然后進行hash;如果想爬這類app,需要對app進行反向編譯,經過大量的代碼閱讀,分析該app的hash算法和參數拼接;
困難點:
1、反編譯
2、Android代碼的閱讀能力
3、花費大量時間和精力也不一定能找到,這是最蛋疼的。。。。
4.四星
此類app對請求發起url請求,后臺收到請求后在返回的數據中,針對有效數據進行加密,所以在用抓包工具進行分析時,無法看到具體的數據;如果想爬取這類app,只能先去反編譯,然后分析出如何對請求數據加密的算法,只有完成了算法的破解才能進行數據的分析。
困難點:
1、無法通過抓包工具對所需數據進行分析
2、反編譯
3、Android代碼的閱讀能力,尋找加密數據的算法
3、花費大量時間和精力也不一定能找到,這是最蛋疼的。。。。
5.工具
1. 抓包工具
?????????????????? mac系統 Wireshark
?????????????????? Mac系統 charles
?????????????????? windows Fiddler
2.反編譯
Apktool,dex2jar,jd-gui-windows
Jadx-gui
能直接反編譯dex文件,方便好用
JD-GUI
需要將dex文件轉到jar文件,可以跳轉函數
JEB
用的較少
3.hook 工具
Xposed
Frida
?
6.實例/文章
【APP逆向-入門級】記一款灰chan直播APP逆向過程
app逆向技巧
[原創]如何使用Xposed+JustTrustMe來突破SSL Pinning
爬蟲手機App——數據采集小攻略
爬取手機APP數據
fiddler 抓包工具詳解(2)
總結
- 上一篇: Opencv 特征训练分类器
- 下一篇: 谭浩强-习题6.7