python常見反爬蟲類型(App反爬蟲等)

注:筆記大部分來源書本,僅供學習交流:【Python3反爬蟲原理與繞過實戰—韋世東】

  • 將爬蟲的爬取過程分爲網絡請求,文本獲取和數據提取3個部分。
  • 信息校驗型反爬蟲主要出現在網絡請求階段,這個階段的反爬蟲理念以預防爲主要目的,儘可能拒絕反爬蟲程序的請求。
  • 動態渲染、文本混淆則出現在文本獲取及數據提取階段,這個階段的反爬蟲理念以保護數據爲主要目的,儘可能避免爬蟲獲得重要數據
  • 特徵識別反爬蟲通過客戶端的特徵、屬性或用戶行爲特點來區分正常用戶和爬蟲程序的手段
  • APP網絡傳輸和數據收發相對隱蔽,用戶無法直接查看客戶端發出的請求信息和服務端返回的響應內容,也無法直接查看App的代碼,構成了反爬蟲
  • python常見反爬蟲類型(信息校驗型、動態渲染、文本混淆、特徵識別反爬蟲等)

5、App反爬蟲

(1)App抓包軟件
  • 可以安裝mitmproxy、charles、fillder三者之一對手機抓包
  • 原由:藉助抓包工具能夠查看App的網絡請求信息,前提是App使用的網絡傳輸協議是HTTP;如果App使用的網絡傳輸協議是HTTPS,需要計算機和手機端同時安裝證書;
  • 漏點:對於Android手機只有版本號小於7的Android系統才允許在證書得到信任後對App抓包,高版本的需要刷機(有風險);
  • 推薦:選擇使用Android模擬器(一個能夠在計算機上運行Android系統的應用軟件),模擬器允許用戶安裝任意版本的Android系統,在接近真機體驗的同時還不會造成任何設備的損壞;
(2)APK文件反編譯
  • 簽名驗證是防止惡意連接和避免服務器端被數據欺騙的有效方式之一,也是後端API常用的防護手段之一;
  • 高級語言的源程序需要通過編譯生成可執行文件,編譯就是將編程語言翻譯成計算機能夠識別和處理的二進制數據的過程;
  • 反編譯又名計算機軟件反向工程,指的是將軟件應用還原成開發語言代碼的過程;
  • APK(Android Application Package)即Android應用程序包,如果我們想要查看Android應用程序的源碼,就需要使用反編譯手段提取APK中的代碼;
  • 藉助反編譯軟件Apktool和JADX將APK反編譯成代碼
  • 示例:安裝JADX軟件>啓動JADX軟件後>點擊“文件”菜單並在下方列表中選擇“打開文件”>選擇對應的APK文件>點擊菜單欄“導航”_“搜索文本”>轉到相應代碼 ;JADX軟件使用 , jadx下載與使用jadx安裝包
  • App與服務器的通信使用的也是HTTP協議和WebSocket協議,所以基於這兩種網絡協議的反爬蟲手段可以應用在App上,想要查看App的代碼,必須將對應的APK文件反編譯成代碼
(3)App代碼混淆反爬蟲
  • 代碼混淆:將代碼轉換成一種功能等價但人類難以閱讀和理解的文本。混淆指使用簡短或冗長且無規律的字符替代代碼中的方法、類和變量的名稱,在缺乏註釋和混淆映射表的情況下,工程師幾乎無法閱讀項目代碼。
  • Anfroid代碼混淆其實是對項目中的字符進行映射與壓縮。混淆時會將代碼中的類名、變量名和函數名用無意義的簡短名稱進行映射,如:
# 映射示例:映射前 ————》 映射後
seaking  ————》 e
class indexview  ————》 class v
  • 這樣能夠保證反編譯APK後得到的代碼無法見名知意,令APK難以被逆向。Android可以使用ProGuard
  • ProGuard是Android官方提供的代碼壓縮和混淆工具,它會檢測和移除封裝應用中的未使用的類、字段、方法、屬性以及自帶代碼庫中的未使用項。ProGuard還可以優化字節碼,移除未使用的代碼指令,以及用短名稱混淆其餘的類和方法。
  • 每次構建混淆規則時,ProGuard會在/build/outputs/mapping/release/中輸出下列文件。
"""這些文件便於開發者對混淆後的代碼進行追蹤和調試,如果mapping,txt該文本被覆蓋或丟失,那麼即使是項目開發者,也無法閱讀混淆過後的代碼"""
dump.txt:說明APK中所有類文件的內部結構;
mapping.txt:提供原始與混淆過的類、方法和字段名稱之間的轉換;
seeds.txt:列出未進行混淆的類和成員;
usage.txt:列出打算從APK文件中移除的代碼
  • 代碼混淆並不能阻止APK被反編譯,但是可以有效提高他人閱讀程序代碼的難度,進而加強對數據的保護。代碼中的字符串並不會被混淆
(4)App應用加固知識擴展
  • 除了Android官方文檔介紹的代碼混淆方法外,App一般從防逆向、防調試、防篡改和防竊取的角度出發,使用DEX加密、LLVM混淆、內存監控等手段保護自己的源代碼和資源
  • DEX加密的主要目的是防止App被反編譯。JADX等反編譯工具實際上是先將DEX文件編譯成Smail語言的代碼,再轉換成class文件進行閱讀和修改。DEX加密實際上是用代碼對Android項目的Classes.dex文件進行加密,就像在原來的DEX上面加了一層殼一樣,所以DEX加密又稱爲加殼。
(5)App應用程序自動化測試工具Appium和Airtest
  • Appium提供了滑動、觸摸(點擊)、長按、模擬輸入和文本提取等常見功能;
  • Airtest Project也提供了滑動、觸摸(點擊)、長按、模擬輸入和文本提取等常見功能;它還支持“圖碼”混合編程

6、驗證碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章