Python高级反爬虫类型(App反爬虫)
前言
- 将爬虫的爬取过程分为网络请求,文本获取和数据提取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 ————》 eclass 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、验证码
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>