文章目录

  • 1. 写在前面
  • 2. 指纹检测
  • 3. 行为验证
  • 3. 加固防护
  • 4. 链路检测
  • 5. 风控埋点
  • 6. 游客注册
  • 7. 数据防护
  • 8. 账号权重
  • 9. 反调阻断

【🏠作者主页】:吴秋霖
【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作!
【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》
未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

1. 写在前面

在这里插入图片描述

  在数字经济蓬勃发展的新时代,数据已成为推动社会进步的核心战略资源,其范畴涵盖个人信息、商业机密、政府敏感数据等关键领域。随着云计算、大数据、人工智能等前沿技术的深度应用,数据资产的价值呈现指数级增长,与此同时,数据安全风险也日益凸显,对安全防护体系建设提出了更高要求

2. 指纹检测

现在很多网站都会通过集成第三方设备指纹(如数美、顶像、京东的风控SDK)或自研系统,从客户端设备和浏览器环境多维度收集特征值,生成唯一指纹后联动业务风控系统,对后续请求进行动态风险评分。一旦标记为爬虫行为,就会采取封IP、设备或浏览器、限制页面加载、API访问权限,甚至弹验证码、强制账号下线等反制措施

而对抗这种防护的核心,就是伪造可信的设备身份。具体来说,可以通过改机工具、使用魔改或指纹浏览器,以及编写JS注入来擦除特征、篡改指纹等方式,伪造出新的设备及浏览器环境。通过这些手段,能够批量生产出大量干净的设备指纹信息,为爬虫持续抓取数据提供支持,不过不同厂商的防护强度不同,突破难度也有差异

市面上很多网站会把TLS握手特征和JA3指纹的检测交给CDN(如 CloudflareAkamai等其他盾)处理,利用CDN对已知爬虫框架、第三方模块发出的流量进行初步筛选过滤,实现精准识别与拦截

可以根据网站检测的TLS版本(1.2/1.3),预定义真实浏览器的 TLS 模板,让请求与真实浏览器高度一致;也可以收集不同浏览器真实的指纹信息形成指纹库,在此基础上进行微调。总体来说,此类防护的绕过难度较低

message FingerprintPacket {string session_id = 1;string device_id = 2;int64 ts = 3;repeated KeyValue features = 4;bytes canvas_hash = 5;bytes webgl_hash = 6;
}

3. 行为验证

不少网站会采购第三方行为验证码防护方案(如极验三代、四代,顶像、数美、易盾,阿里腾讯系)或自研验证码系统,与业务风控联动,对客户端访问、请求进行风险拦截,阻断爬虫请求

行为验证码的突防可以采用自动化和接口协议两种破解方式。两种方式的共同难点主要在图片识别上,这时候可以对接第三方接码平台。对于滑块缺口、单旋转拼图,都可以用OpenCV来识别距离(还会结合轨迹|行为|指纹来实现动态防护

其他类型如空间推理、点选验证等,则需要进行模型训练。自动化方式还需要解决轨迹拖动特征处理,可以使用经典贝塞尔曲线,再在过程中随机插值,防止被Bot检测到。接口协议方式的难点主要集中在图片还原(图片乱序或在JS层面有还原逻辑)、接口参数加密、轨迹加密等,其绕过难度不一

绝大部分网站会对核心业务接口进行防护,通过对接口请求参数动态化加密、参数签名,来抵御请求重放、伪造、篡改

对抗的核心在于逆向分析还原加密与签名逻辑,或者跳过加密验签环节。采用跳过加密验签的方式时,首先要找到加密入口,往浏览器原生JS中注入WS服务代码,采用RPC调用的方式拿到加密参数值,提供给爬虫抓取使用。另一种逆向还原加密的方式,是找到调用的核心加密代码,梳理出参与加密的入参和使用的加密算法后进行还原,再联动爬虫提供验签、加密服务,以此伪造请求抓取数据,这种方式的绕过难度也不一致。

某些重点API会集成第三方的WAF服务,通过动态验证机制对访问请求进行合法性校验,要求客户端完成特定交互验证,通过后服务端会生成带有时效性的密文凭证

突防的核心在于模拟完整验证流程拿到有效凭证。可以通过抓包分析WAF的验证链路,梳理从初始请求到最终获取凭证的完整API交互流程,在这个过程中拿到服务端下发的多个关键参数信息。最后,在提交验证的接口(一般有加密验签)中,通过逆向手段还原加密算法,提交验证拿到凭证信息。每一次都走这套流程,就能确保WAF认证的凭证永远在有效期内,实现持续抓取,其绕过难度不一

3. 加固防护

这种防护适用于核心参数加密、请求加签等任何需要逆向的场景。在 Web 端,会采用禁用控制台调试、无限 Debugger、核心代码混淆、VM 化、Webpack 异步且核心防护代码具备动态更新和自动混淆能力等手段。除此之外,还会通过核心代码下沉、将核心加密放到 WebAssembly 中,迫使作弊、爬虫方逆向混淆后的汇编代码,提升逆向难度。

对抗的核心是从层层防护下破解还原出加密算法。爬虫仍然可以采用自动化、RPC 的方案进行数据抓取。破解加密签名参数还可以使用补环境、纯算法还原两种方式。首先都需要解决反调试问题,其次可以选择对混淆的代码进行 AST 解混淆以便后续分析;涉及 VMP 的话,还需要投入大量时间进行日志插桩分析,反推并还原加密算法;补环境则只需要将 VMP 代码扣出来,将加密入口暴露导出,再补全环境即可

4. 链路检测

链路检测是什么?可能很多小伙伴没有听说过。这里我们可以把它理解为本次的请求是否遵循了网站预期的访问路径(也就是从入口到中间再到最终目前页面的完整的上下文)目的则是防止爬虫或滥用者通过直接构造请求去绕过前置页面、跳过业务交互或触发关键行为(链路检测是行为真实性验证的重要环节

导航的路径上下文是需要满足短时态不可伪造轻量可审计的。下面是一个schema的规则示例:

{"session_id": "sid_abc123","entry_page": "/category/42","entry_ts": 1690000000,"events": [{"type":"resource_load","name":"init.js","ts":1690000001,"hash":"sha256:..."},{"type":"xhr","endpoint":"/api/list","ts":1690000003,"status":200},{"type":"interaction","kind":"click","target":"item_987","ts":1690000005}],"target_page": "/product/987","nonce": "n_456","expires": 1690000025
}

一些站点会通过链路检测机制,对客户端请求的访问路径进行全程追踪与校验,防范某些场景下爬虫直接通过资源 ID(用户 ID、商品 ID、订单编号等)跳过前置页面,直接访问请求详情页扫描的行为

对抗的核心可以考虑从完整的链路模拟触发,构建出合法的链路上下文轨迹

5. 风控埋点

做安全防护跟逆向分析的都知道埋点,可以给不知道的小伙伴普及一下。风控埋点 = 客户端(Web|APP|Native)在请求链路中所附带且用于表征客户端环境或行为的隐含显式字段

它的目标可以是构建客户端的fingerprint也可以是验证会话与交互的链路还可以是采集行为的特征以及提供恶意客户端识别的输入给到风控引擎

一般设定埋在位置包括不限于: HTTP的请求头内CKWS消息二进制协议原生的RPC或HTTPS请求内

按照类别来分的话常见的一些埋点包括了如下所示:

  • 静态类的: UA分辨率|时区|平台内核的那些信息通常都是很基础但又必要的一些东西,组合起来就能构成强指纹
  • 环境指纹类的: Canvas|WebGL|音频|字体|插件等等指纹、在APP端等价设备ID厂商|型号|ABI|传感器等等
  • 行为类的: 鼠标的轨迹滚动与触摸的节奏焦点切换与停留时间交叉的页面路径自动化或者脚本往往过于规则化

还有那种埋点的ID跟链路事件,比如我们经常会看到在一些页面请求中,有*_id之类的行为序列,将用于重构会话的路径与异常检测

对抗核心逻辑尽量去模拟出真实客户端完整的执行流程、以及所有可疑的参数防止因埋点参数检测带来的风控(单纯的完成验签与部分伪造不足以绕过一个高质量的风控

这个过程是耗时且持续性的,需要不断的分析跟测试最终根据大量的测试数据找到最优方案

6. 游客注册

目前很多网站为了降低访问门槛、提升用户体验,会开放游客权限机制。用户无需注册登录账号,仅通过访问网站即可自动获得临时游客身份的TokenSession

这个就很容易被滥用,尤其是被爬虫或自动化工具批量获取身份,用于数据抓取、刷单、恶意请求等

但是这类游客身份通常都是有时效性跟某些限制的(重点接口无法访问)然后也会有一些防护措施,不过一般都不会太难!无非就是限速单一IP或者设备在某时间段内无法生成太多游客(做了指纹的唯一绑定)不规避的话就是异常|频繁|封设备风控验证,以及适当的加一个验签

对抗的核心测试需要干净切真实的环境或设备

7. 数据防护

电商、GOV、影视、本地生活相关客户端中,为了保护业务数据防止自动化抓取跟协议爬取,平台通常会对接口响应的数据进行多层加密和混淆,防护的策略通常包括前端解密渲染字体/样式加密以及其他不可见的字符映射等手段对明文数据进行防护

常见的一下数据防护手段如下所示:

  • 接口响应加密: 服务端将原始数据加密后返回客户端,客户端通过JSNative端的解密后渲染到页面(常见的加密手段: AES-CBC|GCMRSAHMAC|SM3WASM…)
  • 前端渲染加密: JS在页面前端完成解密逻辑并渲染,来阻止单纯抓HTML明文数据
  • 字体映射与样式混淆: 使用SFNT|SVG字体映射或CSS偏移将明文字符替换成编码码点或特殊字符,在页面渲染时再通过字体或样式将码点显示成正确字符(抓到一堆乱码

对抗核心则是接口返回的密文分析调试源代码找到解密算法|密钥信息即可还原明文,如果是字体|CSS加密等方式,需要找到字体文件并下载,再分析编码规则(一般汉字相关的都会通过Unicode码点去文件找对应汉字)或使用OCR通用方案识别对字体文件中的文字进行还原

实现原理与流程是:先创建一个白色的背景图像,再使用ImageDraw在图像上重新绘制出字符,将图像转为RGB格式,最后使用OCR进行识别得到一个关系表。爬虫通过抓取到的原始数据,通过码点去表里面检索,还原被加密的字符,补全并还原出完整的明文数据

8. 账号权重

目前很多社交媒体,如国外的Meta还有国内的某书某些数据接口都是对账号有着严格的权重校验。新注册或者高危的账号都是无法正常请求访问

账号权限重是一套基于历史行为、认证级别、社交关系、设备和环境等多维特征,为每个账号分配的“可信度分”。平台用它决定账号请求的敏感度

新|高风险账号(高频异常IP、托管的邮箱、异常的设备指纹、脏了的手机号段(一般第三方的那种接码 )这些基本默认就是低权重甚至是灰名单(使用的过程中会出现生物验证强制下线

一般会通过多个维度的数据来计算权重:

  • 比如注册的来源或者说渠道: 是否那种虚拟号、第三方、注册的时间跟速度(批量的特征|这里不讨论底层协议或参数
  • 比如持续的一个活跃度: //的登录次数,会话的长度跟交互的深度(说白了就是有没有互动的痕迹,这个在以前做Meta的时候深有体会
  • 该账号的社交图谱: 这个听起来是不是有点抽象,这个还真是校验权重的一个重点标准!该账号的好友、粉丝、关注这些质量。都是可以做画像的,一些不合规的业务(一关联一个准
  • 设备跟地域跨度: 设备的唯一ID、浏览器的指纹。IP地址的轨迹路径(某些社交媒体基于这些触发一系列的风控验证,如KYC认证以及认证的方式

基于上面多维度收集的数据后面就是风控系统工程化的实际操作了,如何去设计权重的分数、如何分配标签、阈值的判定都是触发策略链的关键,包括实时在线决策离线标记的这种方案设计

9. 反调阻断

不管是APP还是Web业务中,大部分平台不仅对源码进行了保护还对逆向分析的调试过程做了防护,以此来增加逆向分析的调试成本跟难度

比如下面常见的一些手段:

  • 调试的检测: 检测调试器、断点、动态调试的工具、模拟器的特征
  • 完整性的一个校验: 运行时的堆栈或重要的函数是否被Hook
  • 蜜罐的放置: 在逆向分析的路径植入蜜罐以此放分析者浪费大量精力
  • 环境的检测: 检测沙箱、模拟器、越狱/Root环境

目前大部分的厂商或者平台对一些重点接口跟数据页面不光有一次行为验证,还有二次甚至是更多次的验证与不同策略的组合验证,常见的验证类型:

  • 在线行为验证: 多种验证码交叉弹出
  • 设备环境验证: 要求重新校验设备指纹、发起设备指纹绑定、SMS二次验证
  • 生物/人脸验证: 针对高风险(跟账号权重可以捆绑)操作进行强认证

一般它的触发策略也是分级的,比如低、中、高风险所触发的验证场景也都不一样。基于各种事件触发(埋点被触发蜜罐被点亮了异地登录),当然任何的风控系统跟设定的策略目前都是会存在误杀率的!平台会对可疑但不确定的流量进行深度检测(比如说更深度的埋点试探放探针)收集更多的叠加信息再决策

还有链式验证这个在之前的国外很多平台第一次验证或者前几次都失败的话就会触发更高级别的验证(逐步升级)比如最经典的点选会从6到9再到12再到18格

目前从服务端的角度来讲都是可以组合的验证模块(可插拔式的组件)风控引擎将会按照设定的策略来组合调用

当然,现在平台也是会考虑到用户的。比如一些权重高又或者换一种方式价值高的用户(这里跟上面的权重还是有联动的)它会提供快速的恢复甚至是不予验证(也就是部分用户的友好化)来减少用户的流失或投诉

总之归根结底,叠加验证往往更大的重心放在防护恶意请求、反作弊对象中。最终都是结合风控系统来实施的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/922331.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/922331.shtml
英文地址,请注明出处:http://en.pswp.cn/news/922331.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金蝶云星空插件开发记录(一)

实现目的:新增供应商保存后,触发钉钉审批流程,并根据钉钉审批结果回写是否合格供应商。实现思路:通过BOS平台供在应商管理界面新增两个复选框字段:是否钉钉审批、是否合格供应商,若在新建供应商档案时勾选是…

企业跨区域组网新解:SD-WAN技术打造安全稳定网络体系

前言在数字化浪潮席卷全球的今天,企业跨区域网络互联已成为支撑业务发展的关键基础设施。传统MPLS专线虽性能稳定,但高昂成本和漫长部署周期令众多企业望而却步。SD-WAN技术的出现,正以其智能、灵活和成本效益的优势,重塑企业组网…

Docker 容器化

引言在解释docker是什么之前,我们首先应该先了解的是容器化的概念。什么是容器?就是一个沙箱,在这个沙箱中涵盖了特定应用运行的一切依赖的内容。但他不是一个操作系统,且和底层的操作系统是隔离的。什么是容器化?容器…

LeetCode刷题——hot 100(3)

题目1:矩阵置零题目:问题分析:使用两个布尔数组来分别记录哪行哪列出现了0,当出现0的行和列,对应的布尔数组值置为true。再次遍历数组,当出现行数组和列数组中的值为true,则对应的原数组的值置为…

Ajax-day2(图书管理)-渲染列表

本篇笔记素材来自“黑马程序员” 渲染列表图书管理一、获取数据二、渲染数据完整代码图书管理 Bootstrap 框架渲染列表(查)新增图书(增)删除图书(删)编辑图书(改) 自己的图书数据&a…

MOS管的电路

MOS管的三极都会存在以下三个电容,分别是:Cgs,Cgd,Cds 输入电容CissCgsCgd 输出电容CossCgdCds 反向传输电容CrssCgd,也叫米勒电容 然而,这三个等效电容是构成串并联组合关系,他们并不是独立的,而是相互…

STM32_05_时钟树

时钟 d用来输入数据,CLK就是我们的时钟,CPU1s中72000000HZ个时钟周期STM32的时钟树锁相环HSE时钟源HSI时钟源LSE时钟源LSI时钟源SystemInit函数SetSysClock函数SetSysClockTo72函数SystemInit()后时钟频率大小总结RCC标准库函数定义变量a&…

C语言---判断语句

文章目录1. if 语句2. if...else 语句3. if...else if...else 语句4. switch 语句5. 三元运算符 ( ? : )总结与对比如何选择C语言中的判断语句用于根据给定的条件来决定执行哪一段代码。其核心是条件为真(必须)则执行一段代码,条件为假&…

[硬件电路-212]:电流的本质确实是电子的移动

1. 微观机制:电子的定向漂移与热运动定向漂移(Drift Motion):在导体(如金属)中,自由电子(价电子)受电场驱动,从负端向正端定向移动,形成宏观电流。…

双RFSOC47DR-16通道5GSPS ADC采集模块

16通道5GSPS ADC采集板卡组成如图1所示。该板卡的输入接口为SMA单端输入,ADC采集和处理采用Xilinx公司的XCZU47DR-2FFVE1156I芯片。板卡需配备4路QSFP28光口输出,并需要集成网口、DDR4、SD卡、USB调试口。两块RF-Soc需确保连接通信功能。板卡的16通道需实…

pytest -- 中文文档

前言 零基础1小时快速入门pytest自动化测试教程,全套项目框架实战pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行 非test文件 pytest里面有些文件是非test文件 pyt…

硬件开发2-ARM裸机开发3-IMX6ULL - 引入中断

一、铺垫引入中断 → 按键1、概要:实现按键控制发光二极管和蜂鸣器输入类型的外设:按键(key)2、参考手册内容完成配置过程(1)key 按键原理图(2)core 内核中命名 -- UART1 CTS&#x…

Ansible的 Playbook 模式详解

目录一、Playbook模式1.1 Playbook 的优势1.2 Playbook 的组成1.3 安装 httpd 服务案例1.4 Playbook 命令及常用参数1.5 Playbook 的语法 —— 权限相关1. remote_user2. become3. become_method1.6 Playbook 的通知与触发机制1. notify2. handlers3. 使用示例4. 使用场景1.6 P…

猿辅导Java后台开发面试题及参考答案

int 与 Integer 的区别是什么?若创建数量庞大的数字时使用 Integer,会对重复数字创建新对象吗?int 是 Java 中的基本数据类型,直接存储数值,占用 4 个字节,默认值为 0,不需要通过 new 关键字创建…

代码随想录学习摘抄day9(回溯1-11)

一个朴实无华的目录定义:回溯法也可以叫做回溯搜索法,它是一种搜索的方式。应用场景:回溯法解决的问题都可以抽象为树形结构代码模板题型第77题. 组合思路:每次从集合中选取元素,可选择的范围随着选择的进行而收缩&…

Altium Designer(AD24)打开工程文件的几种方法

🏡《专栏目录》 目录 1,概述 2,源文件 2,菜单栏 4,工具栏 5,注意事项 1,概述 本文介绍几种打开工程文件的方法。 2,源文件 找到工程的源文件存储路径,找到.PrjPcb的源工程文件,双击打开。 2,菜单栏 第1步:执行File→Open, 第2步:找到工程文件的存储路径,并选中…

Linux嵌入式自学笔记(基于野火EBF6ULL):2.点灯与ubuntu安装

一、点灯登录root:账号:root ; 密码:root点灯命令:echo 0 > /sys/class/leds/red/brightness #关闭red灯 echo 0 > /sys/class/leds/blue/brightness #关闭blue灯 echo 0 > /sys/class/leds/green/brightness …

【Java实战㊷】Java实战:MyBatis-Plus 开启MySQL数据库高效操作之旅

目录 一、MyBatis-Plus 环境集成 1.1 项目依赖引入 1.2 数据库配置 1.3 代码生成器使用 二、核心 CRUD 操作实现 2.1 基础查询 2.2 数据新增与修改 2.3 复杂查询场景 三、性能优化与高级特性 3.1 缓存配置 3.2 乐观锁实现 3.3 字段自动填充 四、实战案例:用户管理模块开发 4.1…

开学季干货——知识梳理与经验分享

技术文章大纲:开学季干货——知识梳理与经验分享目标受众分析明确文章面向的学生群体(如大学生、高中生) 分析不同群体的核心需求(课程准备、时间管理、工具使用) 结合技术场景(如数字笔记、在线协作&#…

Linux《线程(上)》

通过之前的学习我们已经了解了操作系统当中的基本的概念包括进程、基础IO、磁盘文件存储等,但是到目前为止我们还未了解到线程相关的概念,这就使得当前我们对操作系统的认知还不是完整的,现在我们是还是无法理解一个进程当中是如何同时的执行…