首页 > 其他分享 >反爬虫常见策略总结

反爬虫常见策略总结

时间:2023-04-04 11:13:26浏览次数:42  
标签:总结 混淆 请求 证书 代码 常见 爬虫 校验

有爬虫就有反爬虫,这都是相辅相成的,对于长时期从事在爬虫行业的技术员来说,时刻要了解对应网站的反爬机制,才能稳定获取数据。下面就是我这几年接触过的反爬的一些案例,供大家参考下。

反爬虫

反爬虫,即应对爬虫进行反制的统称,主要区分“正常用户”与“机器人”的一种策略统称。

认识反爬虫

正所谓知其然,知其所以然。对于反爬虫的措施有所了解与认知,一方面便于快捷定位防护点实现分析或绕过,另一方面组成爬虫攻防体系。万变自不离其宗,应对反爬虫措施游刃有余。一般常在如下几大部分设伏。

 

“以下便不考虑第三方测试工具的校验”

请求前校验

抓包拦截

做过爬虫的小伙伴,一定知道在分析加密、执行爬虫项目之前。首先第一步一定是先抓包,定位到对应数据包,然后继续才进行分析或规律。那么在此无疑是最为有效的反抓,捕获不到流量包URL未知,除了使用自动化测试工具、RPC等通常可能都毫无办法。

抓包拦截又可细分为控制台检测、端口转移、证书校验,私有协议总而言之就是让你抓不到包,其方法无所不用其极。

控制台检测抓包绕过策略:

替代法: 采用中间人抓包(Charles、mitmproxy、firdler等)

分析绕过法:定位到检测处,分析绕过

端口转移绕过策略:

强制端口

流量转发

证书锁定与公钥锁定

为了防止中间人攻击,采用SSL-Pinning的技术来反抓包。中间人抓包要点是伪造了一个假的证书实现拦截与转发,从而在中间获取的过路数据包实现抓包。反抓思路就是,客户端也预置一份服务端的证书,比较一下就知道真假了。SSL-pinning有两种方式证书锁定(Certificate Pinning)与公钥锁定(Public Key Pinning)

证书锁定

“证书锁定是SSL/TLS加密的额外保证手段。它会将服务器的证书公钥预先保存在客户端。在建立安全连接的过程中,客户端会将预置的公钥和接受的证书做比较。如果一致,就建立连接,否则就拒绝连接。在客户端设置证书只允许设置指定域名的证书,而不接受操作系统或浏览器内置的CA根证书对应的任何证书。”

公钥锁定

“HTTP公钥锁定是HTTPS网站防止攻击者CA机构错误签发的证书进行中间人攻击的一种安全机制,用于预防CA遭受入侵或其他会造成CA签发未授权证书的情况。采用公钥锁定时,网站会提供已授权公钥的哈希列表,指示客户端在后续通讯中只接受列表上的公钥。提取证书中的公钥并内置到客户端中,通过与服务器对比公钥值来验证连接的正确性。”

绕过:Hook到证书校验,无论如何返回正确的即可

私有协议通讯

一线大厂自定义通讯协议,自然考虑到了抓包。那么自然而然也设置了反抓包

绕过:Hook、沙箱

运行环境检测

CDN网络分发加验证:经典产品5秒盾

“其核心为 请求 -> cdn -> 返回关键参数 -> 通过 -> 数据(可能为假)”

请求校验

“当抓到包之后,便是模拟用户请求了。那么这里的常见的反抓措施有哪些呢”

请求校验,即在发送请求时即对网络请求时进行校验,实现区分。通过则返回数据,未通过不返回或返回假数据常有如下几种方式

协议校验

常见通用的协议有HTTP1.0、 HTTP1.1、HTTP2.0 ,若强行只允许HTTP2.0协议来完成请求与响应。那么平常使用其他

TSL指纹

每个请求库其实是有自己的库指纹,若只允许某段或某规则指纹通过,那么自然而言实现了反抓的效果。

header校验

header校验又可分为两种。其一是字段校验,其二是header字段顺序校验

header各字段校验,如ua、sign、cookie、token、safe等

“绕过方案或思想:通过JS解密或逆向获取关键参数缺啥补啥,完成模拟即可”

header字段顺序:当我们打开一个网页其实是一个新的会话那么在未断开或重新连接的时候那么这个顺序就是固定的。而字典格式中位置其实是随机分配的,自定义客户端刷新,对header取指纹或字段顺序检测即可实现鉴别

“绕过方案或思想:保持会话一致”

参数校验

通常字段不仅在header中校验还经常在请求参数中,如sgin、token、safe等。

“参数不可无缘无故来,主要来源JS 生成、服务器下发(不限于文件、JS、wasm等)。又可进行多次中间操作”

前后端分离技术Ajax

“严格来说并不算反扒而是前后端分离技术,但常常结合反抓共同出现”

Ajax(异步JavaScript和XML)也叫不刷新页面请求。

RPC防护

采用RPC及加密或编码方式实现前后端分离、微服务架构等。

“rpc结合反抓基本步骤,客户端请求(中间极有可能涉猎加密)RPC服务端,RPC客户端(原服务端)再次(中间极有可能涉猎加密)请求(一次或多次)。实现“分端”请求,多端加密。”

“逆写rpc进行调用,模拟“第一次”客户端请求rpc无差别,绕过”

请求校验小结

通常设置参数有两种情况

二次或多次请求:

RPC:客户端请求,服务端使用RPC等再请求。

AJax

JS设置关键参数(含二次刷新删除源文件跳转页面)

验证码

识别点选或输入型

滑轨、滑块型

计算型

空值补齐型

空间推理型

短信或语音验证型

风控

范围极大极广,简而言之,用户行为、运行环境等是否合理。从而实现区分

IP封禁

代码运行环境检测等

数据保护

在不改变原有展示的情况下实现**“隐藏”**

通常数据保护有以下种方式:

动态字体

CSS偏移

内容加密映射

SVG映射等

内容图片化

代码防护

JS代码混淆

在遇见需要逆向的参数时候,往往不像表面一个参数那般平静。一查看各种混淆、防护又来了。怎么办怎么办,肝啊!当然也可以使用渲染工具模拟,此方案在此便不在过多赘述。

代码混淆是增加分析难度而牺牲部分性能的一种方案,此方案大部分是体现在通过逻辑转换换等方式将代码转化为难以分析的代码。难以分析是混淆的目的,等价转换是需要确保混淆前后的代码需不影响运行的功能。对于混淆可以又分为如下四种:布局混淆、数据混淆、控制混淆、预防混淆

布局混淆

布局混淆指在源代码中删除原有无用代码,处理常量名、变量名函数名等标识符,增加对于代码的阅读与分析。

无用代码:注释、调试信息、缩进、换行、无用函数与数据等

处理常量名、变量名函数名等标识符:

标识重命名:将原有代码重命名为无具体意义的字符,例如 将name 重命名为a

“注意点:作用域内标识符碰撞情况”

小结:布局混淆并不会影响执行的过程、内存开销,甚至代码体积反而减少了。

数据混淆

JS拥有常见的7种数据类型,number、string、boolean、unfined、null、Object

数字混淆

数据混淆有常见:进制转换、数字分治、其他

进制转换:将十进制转化为二进制、八进制、十六进制等,从而达到“混淆”的目的

数学分治:简而言之就是将数拆开,例如 2 = 1 + 1,也等于2 - 1 - 1 + 2再辅以数学公式等

其他:重新赋值等

字符串混淆

字符串混淆常见的有编码转换编译、加密。常见的有hash、base64、md5等

boolean

我们都知道Boolean值为True、False。根据对boolean的处理,变成难以显示阅读的代码。

!0,!1
![], !![]
!{},!!{}
!NaN,!!NaN
!"", !!""
!undefined, !!undefined
!null, !!null
!Object, !!Object
!void(0),!!void(1)

|,||, &, &&, Boolean()
控制混淆

控制混淆是指对程序的控制流进行转换变化,常见的方式有插入僵尸代码、控制流平坦化

插入僵尸代码:插入僵尸代码即插入无用的代码,增强调试难度

控制流平坦化:控制流平坦化,将原本的的执行流程平坦化。具体可自行搜索

预防混淆

主要体现在 提高反混淆的难度或检测现有混淆器中的漏洞设计

JS虚拟机

自定义或定制JavaScript虚拟机,基于给予二进制文件获取结果

Android/iOS SDK 加固保护

代码混淆

“具体可参考JS混淆部分,殊归同途”

Dex 加固与抽取

Dex 加固即将需要保护的代码单独生成Dex,在so加载时解密jar并通过DexClassLoader加载到内存里。该方案的主要问题在于解密后的Dex会以文件形式存储在手机内存中,而且通过内存dump 的方式能够获取解密后的jar 包,而没有生成文件加载的方式存在很多兼容性的问题

在实际对抗环境下,Dex 无论如何保护,都有方法还原至原始的Dex,进而反编译得到Java 代码。而C 代码相对而言较难逆向。Java2c 是指将原有的Java 代码抽取出来,通过jni 在native 层反射实现。

流程如下:Dex→smali→抽取+native 化→生成so

抽取后的原始Java 函数,反编译出来是native 函数,在运行过程中也不会还原。Java2c 配合C 语言的代码混淆技术和字符串混淆技术,可以对Android 的Java 代码起到很好的保护效果。同时也不需要对原始Java 代码进行重写

LLVM

LLVM 是Low Level Virtual Machine 的缩写,其定位是一个比较底层的虚拟机。然而LLVM 本身并不是一个完整的编译器,LLVM 是一个编译器基础架构,把很多编译器需要的功能以可调用的模块形式实现出来并包装成库,其他编译器实现者可以根据自己的需要使用或扩展,主要聚焦于编译器后端功能,如代码生成、代码优化、JIT 等。

代码虚拟化

代码虚拟化保护技术是一种比Dex 文件保护、Java2c 技术更强的安全防护技术,可以更有效地对抗逆向工程或破解,避免造成核心技术和风控逻辑被泄密的问题。

总结

graph LR
A(已有)==无数次的中间转换==> B1(所需)
以上便是本人对于所见所知所想的反爬虫,各种加密、编译、混淆等。中间围绕无数种可能。一起加油吧!!!

好像什么都说了,什么都没说。望君参考却不限于此。

总体来说就是抓包、请求前校验、请求校验、数据保护。以及风控、验证码、及对于代码进行保护。
-----------------------------------
©著作权归作者所有:来自51CTO博客作者华科小徐的原创作品,请联系作者获取转载授权,否则将追究法律责任
反爬虫常见策略总结
https://blog.51cto.com/u_13488918/6168242

标签:总结,混淆,请求,证书,代码,常见,爬虫,校验
From: https://www.cnblogs.com/q-q56731526/p/17285730.html

相关文章

  • 【初赛】各种排序算法总结
    一、算法评价排序方法平均时间最好时间最坏时间冒泡排序(稳定)O(n^2)O(n)O(n^2)选择排序(不稳定)O(n^2)O(n^2)O(n^2)插入排序(稳定)O(n^2)O(n)O(n^2)快速排序(不稳定)O(nlogn)O(nlogn)O(n^2)归并排序(稳定)O(nlogn)O(nlogn)O(nlogn)堆排序(不稳定)O(nlogn)O(nlogn)O(nlogn)基数排序......
  • SEO常见问题解答:如何解决网站优化中遇到的难题和挑战
    SEO常见问题解答:如何解决网站优化中遇到的难题和挑战网站优化是提高网站在搜索引擎中排名和流量的重要手段,但是在优化过程中,往往会遇到各种难题和挑战,如何有效地解决这些问题,是每个网站运营者和SEO专家都需要掌握的技能。本文将针对一些常见的网站优化问题,给出一些解决方案和建议......
  • 爬虫遇到了点问题
    正常在写一些爬虫代码的时候多少都会出点小问题,一位合格的程序员应该会认真排除并加以解决错误,如果是新手看着满屏的代码可能会一筹莫展。golang爬某网站代码优化后,运行报了如下的错,找了半小时才找到原因,在此记录一下。代码是这样的:有一个interface类型的Parser:typeParse......
  • 爬虫中的代理问题
    最近身边很多人都遇到爬虫中的爬虫ip问题,写下这篇博客来记录自己所学,希望可以帮助到你们。可能很多人都会问为什么我需要用爬虫ip呢?不用不可以吗?用了爬虫ip之后发现爬虫抓取数据的速度反而下降了不少于是放弃爬虫爬虫ip的使用。如果我们只是进行少量数据的爬取,用本机的IP与User-......
  • 【SciPy】Sparse稀疏矩阵主要存储格式总结(转载)
    原文:【SciPy】Sparse稀疏矩阵主要存储格式总结在数据科学和深度学习等领域常会采用矩阵格式来存储数据,但当矩阵较为庞大且非零元素较少时,运算效率和存储有效率并不高。所以,通常我们采用Sparse稀疏矩阵的方式来存储矩阵,提高存储和运算效率。下面将对SciPy中七种常见的存储方式(COO/......
  • Objective-C的self.用法的一些总结
    关于什么时候用全局变量,什么时候用self.赋值的问题,其实是和Objective-c的存取方法有关,网上很多人也都这么解答的,不过如何与存取方式有关究竟他们之间的是什么样的关系就很少有同学回答了。我总结了一下,发出来给大家参考.有什么问题请大家斧正. 进入正题,我们经常会在官方文......
  • DNS服务器常见概念
    DNS服务器常见概念DNS服务概述可以作为域名和IP地址相互映射的一个分布式数据库,提供域名与IP地址的解析服务。DNS域名层次结构树状结构最顶层称为根域,用“.”表示,相应服务器称为根服务器,整个域名空间解析权都归根服务器所有,但根服务器无法承担庞大的负载,采用“委派”机制,在根域下......
  • 每日总结2023-04-03
    今天初步学习了服务器,对于Android移动应用对服务器发送get或post请求等有初步了解。在配置okHttp上需要在AndroidMainfest.xml中添加<!--联网权限--><uses-permissionandroid:name="android.permission.INTERNET"/><!--接入wifi状态--><uses-permissi......
  • 4.3每日总结
     今天建民老师让我们团队做一个人脸识别签到的程序。  大致的功能有以下几点:1.人脸识别(单人或多人)完成签到2.人脸识别相似度要求(不低于90%,不识别静态)3.完成签到或排名,并对相应排名做出相应提示4.老师可以看未签到成员。......
  • 每日总结4.3
    今天是模型展示,已经在考虑别的题了   ......