前言
- 將爬蟲的爬取過程分為網(wǎng)絡(luò)請(qǐng)求,文本獲取和數(shù)據(jù)提取3個(gè)部分。
- 信息校驗(yàn)型反爬蟲主要出現(xiàn)在網(wǎng)絡(luò)請(qǐng)求階段,這個(gè)階段的反爬蟲理念以預(yù)防為主要目的,盡可能拒絕反爬蟲程序的請(qǐng)求。
- 動(dòng)態(tài)渲染、文本混淆則出現(xiàn)在文本獲取及數(shù)據(jù)提取階段,這個(gè)階段的反爬蟲理念以保護(hù)數(shù)據(jù)為主要目的,盡可能避免爬蟲獲得重要數(shù)據(jù)
- 特征識(shí)別反爬蟲通過客戶端的特征、屬性或用戶行為特點(diǎn)來區(qū)分正常用戶和爬蟲程序的手段
- App網(wǎng)絡(luò)傳輸和數(shù)據(jù)收發(fā)相對(duì)隱蔽,用戶無法直接查看客戶端發(fā)出的請(qǐng)求信息和服務(wù)端返回的響應(yīng)內(nèi)容,也無法直接查看App的代碼,構(gòu)成了反爬蟲
- Python/ target=_blank class=infotextkey>Python常見反爬蟲類型(信息校驗(yàn)型、動(dòng)態(tài)渲染、文本混淆、特征識(shí)別反爬蟲等)
5、App反爬蟲
(1)App抓包軟件
- 可以安裝mitmproxy、charles、fillder三者之一對(duì)手機(jī)抓包
- 原由:借助抓包工具能夠查看App的網(wǎng)絡(luò)請(qǐng)求信息,前提是App使用的網(wǎng)絡(luò)傳輸協(xié)議是HTTP;如果App使用的網(wǎng)絡(luò)傳輸協(xié)議是HTTPS,需要計(jì)算機(jī)和手機(jī)端同時(shí)安裝證書;
- 漏點(diǎn):對(duì)于Android手機(jī)只有版本號(hào)小于7的Android系統(tǒng)才允許在證書得到信任后對(duì)App抓包,高版本的需要刷機(jī)(有風(fēng)險(xiǎn));
- 推薦:選擇使用Android模擬器(一個(gè)能夠在計(jì)算機(jī)上運(yùn)行Android系統(tǒng)的應(yīng)用軟件),模擬器允許用戶安裝任意版本的Android系統(tǒng),在接近真機(jī)體驗(yàn)的同時(shí)還不會(huì)造成任何設(shè)備的損壞;
(2)APK文件反編譯
- 簽名驗(yàn)證是防止惡意連接和避免服務(wù)器端被數(shù)據(jù)欺騙的有效方式之一,也是后端API常用的防護(hù)手段之一;
- 高級(jí)語言的源程序需要通過編譯生成可執(zhí)行文件,編譯就是將編程語言翻譯成計(jì)算機(jī)能夠識(shí)別和處理的二進(jìn)制數(shù)據(jù)的過程;
- 反編譯又名計(jì)算機(jī)軟件反向工程,指的是將軟件應(yīng)用還原成開發(fā)語言代碼的過程;
- APK(Android Application Package)即Android應(yīng)用程序包,如果我們想要查看Android應(yīng)用程序的源碼,就需要使用反編譯手段提取APK中的代碼;
- 借助反編譯軟件Apktool和JADX將APK反編譯成代碼
- 示例:安裝JADX軟件>啟動(dòng)JADX軟件后>點(diǎn)擊“文件”菜單并在下方列表中選擇“打開文件”>選擇對(duì)應(yīng)的APK文件>點(diǎn)擊菜單欄“導(dǎo)航”_“搜索文本”>轉(zhuǎn)到相應(yīng)代碼 ;JADX軟件使用 , jadx下載與使用,jadx安裝包
- App與服務(wù)器的通信使用的也是HTTP協(xié)議和WebSocket協(xié)議,所以基于這兩種網(wǎng)絡(luò)協(xié)議的反爬蟲手段可以應(yīng)用在App上,想要查看App的代碼,必須將對(duì)應(yīng)的APK文件反編譯成代碼
(3)App代碼混淆反爬蟲
- 代碼混淆:將代碼轉(zhuǎn)換成一種功能等價(jià)但人類難以閱讀和理解的文本。混淆指使用簡(jiǎn)短或冗長(zhǎng)且無規(guī)律的字符替代代碼中的方法、類和變量的名稱,在缺乏注釋和混淆映射表的情況下,工程師幾乎無法閱讀項(xiàng)目代碼。
- Anfroid代碼混淆其實(shí)是對(duì)項(xiàng)目中的字符進(jìn)行映射與壓縮。混淆時(shí)會(huì)將代碼中的類名、變量名和函數(shù)名用無意義的簡(jiǎn)短名稱進(jìn)行映射,如:
- # 映射示例:映射前 ————》 映射后
seaking ————》 eclass indexview ————》 class v
- 這樣能夠保證反編譯APK后得到的代碼無法見名知意,令A(yù)PK難以被逆向。Android可以使用ProGuard
- ProGuard是Android官方提供的代碼壓縮和混淆工具,它會(huì)檢測(cè)和移除封裝應(yīng)用中的未使用的類、字段、方法、屬性以及自帶代碼庫(kù)中的未使用項(xiàng)。ProGuard還可以優(yōu)化字節(jié)碼,移除未使用的代碼指令,以及用短名稱混淆其余的類和方法。
- 每次構(gòu)建混淆規(guī)則時(shí),ProGuard會(huì)在/build/outputs/mapping/release/中輸出下列文件。
- """這些文件便于開發(fā)者對(duì)混淆后的代碼進(jìn)行追蹤和調(diào)試,如果mapping,txt該文本被覆蓋或丟失,那么即使是項(xiàng)目開發(fā)者,也無法閱讀混淆過后的代碼"""
dump.txt:說明APK中所有類文件的內(nèi)部結(jié)構(gòu);mapping.txt:提供原始與混淆過的類、方法和字段名稱之間的轉(zhuǎn)換;seeds.txt:列出未進(jìn)行混淆的類和成員;usage.txt:列出打算從APK文件中移除的代碼 - 代碼混淆并不能阻止APK被反編譯,但是可以有效提高他人閱讀程序代碼的難度,進(jìn)而加強(qiáng)對(duì)數(shù)據(jù)的保護(hù)。代碼中的字符串并不會(huì)被混淆
(4)App應(yīng)用加固知識(shí)擴(kuò)展
- 除了Android官方文檔介紹的代碼混淆方法外,App一般從防逆向、防調(diào)試、防篡改和防竊取的角度出發(fā),使用DEX加密、LLVM混淆、內(nèi)存監(jiān)控等手段保護(hù)自己的源代碼和資源
- DEX加密的主要目的是防止App被反編譯。JADX等反編譯工具實(shí)際上是先將DEX文件編譯成Smail語言的代碼,再轉(zhuǎn)換成class文件進(jìn)行閱讀和修改。DEX加密實(shí)際上是用代碼對(duì)Android項(xiàng)目的Classes.dex文件進(jìn)行加密,就像在原來的DEX上面加了一層殼一樣,所以DEX加密又稱為加殼。
(5)App應(yīng)用程序自動(dòng)化測(cè)試工具Appium和Airtest
- Appium提供了滑動(dòng)、觸摸(點(diǎn)擊)、長(zhǎng)按、模擬輸入和文本提取等常見功能;
- Airtest Project也提供了滑動(dòng)、觸摸(點(diǎn)擊)、長(zhǎng)按、模擬輸入和文本提取等常見功能;它還支持“圖碼”混合編程
6、驗(yàn)證碼
- 驗(yàn)證碼






