數(shù)據(jù)的保護和爬取好比是矛和盾矗晃。數(shù)據(jù)需要保護唤崭,但是數(shù)據(jù)產(chǎn)生之后會有大量的爬取需求丸逸。
如何實現(xiàn)數(shù)據(jù)的保護和爬取值得我們思考。
數(shù)據(jù)保護
App方面的保護
- 設備的注冊
- 設備的激活
- 各個數(shù)據(jù)接口的sig保護或者Json和byte的轉(zhuǎn)換
- 運維監(jiān)控系統(tǒng)的搭建猛蔽,監(jiān)控用戶請求異常的報警。屏蔽相關(guān)的device數(shù)據(jù)請求灵寺。
App API接口數(shù)據(jù)保護曼库。
- 使用https雙向驗證,保證數(shù)據(jù)不能被charles替久、fiddler凉泄、mitmproxy給攔截到。其中android可以設置noproxy防止抓包工具抓取蚯根,ios可采用https證書來保證數(shù)據(jù)的安全后众。
- 數(shù)據(jù)sig的保護:可以通過url地址和body串聯(lián),同時使用base64加密颅拦,并且核心加密點使用so文件或者動態(tài)庫蒂誉,在加密的過程中so和app之間雙向驗證。以android舉例距帅,核心加密方法放置在secret()方法放置在A.so文件中右锨,在apk調(diào)用A.so的secret()方法,且secret()方法中會回調(diào)apk驗證簽名是否正確碌秸。
- token的保護:用戶所分配的token和計算出來的sig绍移,來計算tokensig悄窃。
- 接口請求字段的保護:請求的api接口去除基地址外,使用sig混淆蹂窖,計算出sig3轧抗。
通過以上的4層加密,實現(xiàn)了App數(shù)據(jù)的保護瞬测。
web數(shù)據(jù)保護
web端頁面基本上都可以看到源碼;比如是html横媚、css、js等月趟。但web端的數(shù)據(jù)也有一定的數(shù)據(jù)保護策略灯蝴。相關(guān)字段保存在cookie中
- web 對應的web did以及對應的sid隨機生成應對爬蟲大規(guī)模爬取數(shù)據(jù)。
- web打開網(wǎng)頁頻繁時彈出滑塊驗證碼孝宗,實現(xiàn)對爬蟲的攔截穷躁。其中滑塊的驗證碼才使用aes和base64通過滑塊過程計算得到相關(guān)的data,后端驗證其data的正確性。其中js部分已經(jīng)使用webpack混淆打包碳褒。
- web頁面核心數(shù)據(jù)使用指定的字體的加密折砸。比如粉絲關(guān)注量和收藏人數(shù)等。數(shù)字會單獨抽取為ttf字體沙峻,每次獲取該網(wǎng)頁時都會有不同的字體睦授。
其中上述1和3都可以通過對應的腳本來還原對應的接口請求,滑塊的保護策略逆向破解需要一點時間摔寨。
數(shù)據(jù)的爬取
提到數(shù)據(jù)爬取去枷,基本上就需要采用數(shù)據(jù)保護的逆向過程。
App逆向?qū)崿F(xiàn)數(shù)據(jù)爬取
主要過程
- 分析android和ios app是复,抓取對應的接口請求删顶。android設備或者模擬器需要root,安裝xposed或者蒙面淑廊,實現(xiàn)ssl的突破逗余。ios設備需要越獄。
- android 采用的網(wǎng)絡框架基本上都是okhttp季惩;ios采用的基本上AFN录粱。
- 安裝jadx,分析android apk,分析接口画拾,得到加密點啥繁。
- 定位得到的加密點,分析url和header以及body的合并策略青抛,分析接口請求的sig旗闽。
- 使用xposed或者unidebug或者frida、java、python等還原url和header以及body的合并策略或者將對應的url和header以及body送入到so中适室。其中調(diào)用so文件的過程中嫡意,會有so和apk之間的雙向驗證;比如需要apk的簽名亭病。
- 還原設備注冊的邏輯鹅很。這個基本上對應的請求基本上都會是加密的字節(jié)流,需要使用xposed或者hook工具hook對應的方法罪帖。實現(xiàn)對應的設備注冊。
- 設備風控的突破:基本上到了這里基本上是最難的一步邮屁。需要使用IDA工具來定位設備注冊得到的device_id進行激活整袁;使用IDA工具調(diào)試的時候基本上都會有遇到app異常崩潰的問題,因為apk開啟了反調(diào)試的功能佑吝;防止逆向破解坐昙。
sig、設備注冊芋忿、設備激活破解完成之后炸客,APP的接口基本上就可以無限的提取數(shù)據(jù)了。但對應的得到的device_id在大批量的提取數(shù)據(jù)時戈钢,會落入運維的異常報警痹仙。當報警之后,該device_id會被封禁30分鐘-60分鐘殉了。
所以使用App大規(guī)模爬取時开仰,需要無限量的設備池子:激活的device_id。
web端數(shù)據(jù)的爬取
- 分析cookie薪铜,破解對應的web_device_id以及抽取隨機產(chǎn)生sid的js腳本众弓。
- 分析字體信息,實現(xiàn)對字體信息的動態(tài)提取隔箍。
- 分析滑塊驗證碼或者點擊驗證碼等核心邏輯谓娃,還原其激活過程。