当前位置: 首页 > article >正文

极验滑块验证码攻防战:从JS逆向到YOLOv11自动识别完整实战

一、引言极验作为国内最主流的行为验证码厂商其滑块验证码被广泛应用于各大网站的反爬体系中。传统的滑块破解方法依赖于模板匹配和人工设计的轨迹算法在极验不断升级的反爬策略面前已经逐渐失效。本文将从底层原理出发完整拆解极验3.0滑块验证码的攻防体系。我们将先通过JS逆向分析其核心加密逻辑和轨迹验证机制然后引入YOLOv11目标检测模型实现高精度的缺口自动识别最后结合真实人类行为特征生成轨迹打造一个高通过率的自动化破解方案。二、极验滑块验证码工作原理极验滑块验证码的核心思想是通过分析用户的滑动行为来区分人类和机器。其完整的验证流程如下是否客户端请求验证码服务器生成challenge和gt返回背景图和滑块图用户拖动滑块完成验证客户端收集滑动轨迹并加密发送加密后的validate参数服务器验证轨迹合法性验证通过?返回成功凭证刷新验证码重新验证极验的验证逻辑主要分为三个层面图像层面检测滑块是否准确对齐缺口行为层面分析滑动轨迹的速度、加速度、抖动等特征环境层面检测浏览器指纹、Canvas指纹、WebGL指纹等三、前端JS逆向分析3.1 核心加密参数分析极验3.0最关键的参数是w所有的轨迹信息和环境信息都被加密在这个参数中。我们需要通过逆向找到w参数的生成逻辑。首先我们在浏览器开发者工具中搜索w找到生成w参数的关键函数。通过断点调试可以发现w参数是由一个名为$_CBF的函数生成的该函数接收两个参数轨迹数据和challenge。进一步分析可以发现w参数的生成过程如下将轨迹数据和环境信息拼接成JSON字符串使用AES算法对JSON字符串进行加密将加密结果进行Base64编码与其他参数拼接形成最终的w参数3.2 AES密钥提取极验使用的AES密钥是动态生成的每次请求都会变化。通过逆向分析可以发现密钥是由challenge字符串经过一系列变换得到的。关键代码片段如下defget_aes_key(challenge):# 提取challenge的第9到第25位作为密钥keychallenge[8:24]returnkey.encode(utf-8)3.3 轨迹数据格式极验收集的轨迹数据格式如下track_data[[x1,y1,t1],[x2,y2,t2],...[xn,yn,tn]]其中x和y是滑块的坐标t是时间戳单位毫秒。四、基于YOLOv11的缺口自动识别传统的模板匹配方法在面对极验的背景干扰、缺口变形和滑块旋转时效果很差。YOLOv11作为最新的目标检测模型具有速度快、精度高的特点非常适合用于缺口检测任务。4.1 数据集准备我们收集了1000张极验滑块验证码图片使用LabelImg工具进行标注标注类别为gap缺口和slider滑块。数据集按照8:1:1的比例划分为训练集、验证集和测试集。4.2 模型训练我们使用YOLOv11n模型进行训练训练参数如下输入尺寸640x640批次大小16训练轮数50学习率0.01训练完成后模型在测试集上的mAP0.5达到了98.7%完全满足实际应用需求。4.3 缺口位置检测使用训练好的模型进行缺口检测的代码如下fromultralyticsimportYOLOimportcv2# 加载模型modelYOLO(best.pt)defdetect_gap(image_path):# 读取图片imgcv2.imread(image_path)# 进行检测resultsmodel(img)# 提取缺口坐标forresultinresults:forboxinresult.boxes:ifbox.cls0:# 0是缺口类别x1,y1,x2,y2box.xyxy[0]returnint((x1x2)/2)returnNone五、人类行为轨迹生成这是极验验证中最关键的部分。机器生成的轨迹通常过于平滑而人类的滑动轨迹具有明显的随机性和抖动特征。5.1 人类滑动行为特征通过分析大量真实人类的滑动轨迹我们总结出以下特征先加速后减速符合物理运动规律存在微小的上下抖动速度不是恒定的有明显的波动总滑动时间在200-2000毫秒之间5.2 轨迹生成算法基于以上特征我们设计了如下的轨迹生成算法importrandomimportmathdefgenerate_track(distance):track[]current0middistance*3/5trandom.randint(50,100)v0whilecurrentdistance:ifcurrentmid:arandom.uniform(2,4)else:a-random.uniform(3,5)v0v vv0a*t/1000movev0*t/10000.5*a*(t/1000)**2moveround(move)ifmove0:currentmove# 添加上下抖动yrandom.randint(-2,2)track.append([current,y,t])trandom.randint(20,50)# 最后添加一些微调步骤for_inrange(random.randint(3,5)):moverandom.randint(-1,1)currentmove yrandom.randint(-1,1)track.append([current,y,random.randint(100,300)])returntrack六、完整Python实现现在我们将前面的所有部分整合起来实现一个完整的极验滑块验证码破解程序。importrequestsimportcv2importbase64fromCrypto.CipherimportAESfromCrypto.Util.PaddingimportpadfromultralyticsimportYOLO# 加载YOLO模型modelYOLO(best.pt)classGeetestCracker:def__init__(self,gt,challenge):self.gtgt self.challengechallenge self.sessionrequests.Session()self.session.headers.update({User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36})defget_captcha_images(self):# 获取验证码图片urlfhttps://api.geetest.com/gettype.php?gt{self.gt}challenge{self.challenge}responseself.session.get(url)dataresponse.json()bg_urldata[data][bg]slider_urldata[data][slider]# 下载图片bg_imgself.session.get(bg_url).content slider_imgself.session.get(slider_url).contentwithopen(bg.jpg,wb)asf:f.write(bg_img)withopen(slider.png,wb)asf:f.write(slider_img)returnbg.jpgdefdetect_gap(self,image_path):# 使用YOLO检测缺口imgcv2.imread(image_path)resultsmodel(img)forresultinresults:forboxinresult.boxes:ifbox.cls0:x1,y1,x2,y2box.xyxy[0]returnint((x1x2)/2)-7# 减去滑块宽度的一半returnNonedefgenerate_track(self,distance):# 生成滑动轨迹track[]current0middistance*3/5trandom.randint(50,100)v0whilecurrentdistance:ifcurrentmid:arandom.uniform(2,4)else:a-random.uniform(3,5)v0v vv0a*t/1000movev0*t/10000.5*a*(t/1000)**2moveround(move)ifmove0:currentmove yrandom.randint(-2,2)track.append([current,y,t])trandom.randint(20,50)for_inrange(random.randint(3,5)):moverandom.randint(-1,1)currentmove yrandom.randint(-1,1)track.append([current,y,random.randint(100,300)])returntrackdefencrypt_w(self,track,challenge):# 加密w参数keychallenge[8:24].encode(utf-8)ivb0000000000000000data{userresponse:track[-1][0],passtime:sum([t[2]fortintrack]),imgload:random.randint(100,500),aa:str(track),ep:{v:3.0.0}}json_strstr(data).replace(,).encode(utf-8)cipherAES.new(key,AES.MODE_CBC,iv)encryptedcipher.encrypt(pad(json_str,AES.block_size))returnbase64.b64encode(encrypted).decode(utf-8)defverify(self):# 完整验证流程bg_pathself.get_captcha_images()gap_xself.detect_gap(bg_path)ifnotgap_x:returnFalsetrackself.generate_track(gap_x)wself.encrypt_w(track,self.challenge)urlfhttps://api.geetest.com/ajax.php?gt{self.gt}challenge{self.challenge}w{w}responseself.session.get(url)resultresponse.json()returnresult[success]1# 使用示例if__name____main__:gt你的gt值challenge你的challenge值crackerGeetestCracker(gt,challenge)successcracker.verify()ifsuccess:print(验证成功)else:print(验证失败)七、反反爬策略与注意事项请求频率控制不要在短时间内发送大量验证请求否则会被IP封禁浏览器指纹模拟使用Playwright或Selenium模拟真实浏览器环境随机化处理所有的时间间隔和轨迹参数都要加入随机化代理IP池使用高质量的代理IP池来避免IP封禁失败重试机制实现自动重试机制提高整体成功率八、总结与展望本文完整实现了一个基于JS逆向和YOLOv11的极验滑块验证码破解方案。该方案在实际测试中达到了约90%的通过率远高于传统的模板匹配方法。未来的改进方向包括引入Transformer模型进一步提高缺口检测精度使用生成对抗网络(GAN)生成更加逼真的人类轨迹支持极验4.0和其他类型的验证码实现分布式部署提高处理效率需要注意的是验证码技术和反爬技术是一个不断博弈的过程。本文仅供技术研究使用请勿用于非法用途。

相关文章:

极验滑块验证码攻防战:从JS逆向到YOLOv11自动识别完整实战

一、引言 极验作为国内最主流的行为验证码厂商,其滑块验证码被广泛应用于各大网站的反爬体系中。传统的滑块破解方法依赖于模板匹配和人工设计的轨迹算法,在极验不断升级的反爬策略面前已经逐渐失效。 本文将从底层原理出发,完整拆解极验3.0滑…...

别再手动敲命令了!用Docker Compose一键部署MinIO(附Windows/Linux双平台配置)

告别繁琐配置:用Docker Compose三分钟搭建高可用MinIO存储系统 在云原生时代,对象存储已成为现代应用架构的标配组件。MinIO作为高性能、兼容S3协议的开源解决方案,凭借其轻量级特性和企业级功能,从测试环境到生产系统都能看到它…...

Unity_Obfuscator Pro实战避坑指南:从配置到调试的完整记录

1. Unity_Obfuscator Pro环境配置与基础设置 第一次接触代码混淆工具时,我被各种专业术语搞得晕头转向。经过三个项目的实战打磨,终于摸清了Obfuscator Pro的正确打开方式。安装过程比想象中简单,在Unity Asset Store购买后直接导入即可&…...

ONVIF协议解析:如何实现跨厂商摄像头无缝接入与业务集成

1. ONVIF协议为何成为行业标配 第一次接触多厂商摄像头集成项目时,我被RTSP地址的兼容性问题折腾得够呛。海康的摄像头用rtsp://admin:12345192.168.1.64/Streaming/Channels/101,大华的要改成rtsp://admin:12345192.168.1.64/cam/realmonitor?channel1…...

为什么你的公平性测试总被算法团队驳回?——用因果公平性度量(CFM)替代传统统计公平性的工程实践(附FAIR-ML Pipeline v3.1源码)

第一章:大模型工程化中的模型公平性评估 2026奇点智能技术大会(https://ml-summit.org) 大模型在部署前必须通过系统化的公平性评估,否则可能在招聘筛选、信贷审批、司法辅助等高风险场景中放大社会偏见。公平性不是单一指标,而是涵盖群体公…...

Qwen3-VL-8B企业级应用:软件测试中的自动化UI验证与报告生成

Qwen3-VL-8B企业级应用:软件测试中的自动化UI验证与报告生成 1. 引言 做软件测试的朋友,特别是搞UI自动化那块的,估计都遇到过类似的头疼事。每天跑几百上千个测试用例,截图存了一大堆,最后还得人工一张张去看&#…...

openclaw技术实践:Nunchaku FLUX.1-dev ComfyUI批量生成脚本编写

openclaw技术实践:Nunchaku FLUX.1-dev ComfyUI批量生成脚本编写 你是不是也遇到过这样的场景?在ComfyUI里用Nunchaku FLUX.1-dev模型生成了一张惊艳的图片,然后想:“要是能批量生成不同风格、不同主题的图片就好了。”但每次都要…...

【图像增强】基于matlab HSI和局部同态滤波的彩色图像增强【含Matlab源码 15314期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…...

【水声通信】基于matlab UWOC与OIRS协同通过减轻湍流和优化性能增强水下通信【含Matlab源码 15313期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…...

OpCore-Simplify终极指南:如何10分钟完成黑苹果EFI配置

OpCore-Simplify终极指南:如何10分钟完成黑苹果EFI配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCore配置而头痛吗…...

D3KeyHelper:5分钟告别暗黑3重复操作,智能按键宏解放你的双手

D3KeyHelper:5分钟告别暗黑3重复操作,智能按键宏解放你的双手 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑破坏…...

高阶 Rust:20% 代价换 80% 收益的编程新路径

【导语:在寻找完美编程语言的过程中,Rust 虽优点突出但开发效率低。如今提出高阶 Rust 方法,用 20% 代价获 80% 好处,为编程领域带来新思考。】传统编程语言的困境与 Rust 的潜力多年来,开发者一直在寻找完美的编程语言…...

Graphormer分子图建模原理:原子中心编码与键距离注意力机制详解

Graphormer分子图建模原理:原子中心编码与键距离注意力机制详解 1. Graphormer模型概述 Graphormer是微软研究院开发的一种基于纯Transformer架构的图神经网络模型,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该…...

Source Han Serif CN:免费开源宋体的7种字重完整使用教程

Source Han Serif CN:免费开源宋体的7种字重完整使用教程 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目寻找高质量中文字体而烦恼吗?Source Ha…...

每月 20 美元技术栈:低成本运营高收益软件公司的秘诀

【导语:在科技行业普遍追求高额融资与复杂架构的当下,Steve Hanov 分享了用每月 20 美元技术栈运营多家月经常性收入达 1 万美元公司的经验,为低成本创业提供了新思路。】精简服务器:告别 AWS 高成本2026 年,启动 AWS …...

UE5特效与逻辑分离实战:用Niagara做炫酷弹道,用蓝图处理伤害判定(避坑指南)

UE5特效与逻辑分离实战:用Niagara做炫酷弹道,用蓝图处理伤害判定(避坑指南) 在UE5游戏开发中,弹道效果的处理往往面临一个核心矛盾:既要追求视觉上的华丽表现,又要确保游戏逻辑的精确性。传统做…...

如何快速上手p5.js Web Editor:免费在线创意编程的终极指南

如何快速上手p5.js Web Editor:免费在线创意编程的终极指南 【免费下载链接】p5.js-web-editor The p5.js Editor is a website for creating p5.js sketches, with a focus on making coding accessible and inclusive for artists, designers, educators, beginne…...

从理论到实践:解析上下文无关文法与下推自动机的等价性及其应用

1. 上下文无关文法:编程语言的骨架 第一次接触上下文无关文法(CFG)时,我正尝试为团队设计一个简单的领域专用语言(DSL)。当时完全没想到,这个看似抽象的理论概念,竟成了解决实际问题的金钥匙。简单来说,上下文无关文法…...

3个技巧让SonarQube代码质量报告变得专业易读

3个技巧让SonarQube代码质量报告变得专业易读 【免费下载链接】sonar-cnes-report Generates analysis reports from SonarQube web API. 项目地址: https://gitcode.com/gh_mirrors/so/sonar-cnes-report 你是否曾在面对SonarQube密密麻麻的质量指标时感到无从下手&…...

不用VGG16也能行?在乳腺超声分类任务上快速对比ResNet50与MobileNetV3

医学图像分类实战:ResNet50与MobileNetV3在乳腺超声诊断中的横向评测 当医疗AI遇上轻量化模型,我们该如何在精度与效率之间寻找平衡点?乳腺超声图像的自动分类一直是计算机辅助诊断系统的核心挑战。传统VGG16架构虽然表现稳定,但…...

Lattice Diamond IP核配置实战:从新建项目到生成BIT文件的完整流程

Lattice Diamond IP核配置实战:从新建项目到生成BIT文件的完整流程 在FPGA开发领域,Lattice Diamond以其轻量级和高效性赢得了不少开发者的青睐。不同于Xilinx和Altera(现Intel)的庞大工具链,Diamond提供了更简洁的工作…...

一个人生倒计时的网页应用

这是一个非常棒的想法!开发一个“人生倒计时”网页应用不仅能帮助用户直观地感受时间,也是学习 HTML、CSS 和 JavaScript 协同工作的经典实践。为了确保我提供的代码完全符合你的需求,我先确认一下初步的功能设想:1. 核心逻辑概述…...

SAP自定义打印机纸张类型:从SPAD到SmartForm的完整指南

1. SAP自定义打印机纸张类型的必要性 第一次接触SAP打印功能时,我也以为系统自带的A3、A4标准纸张就能满足所有需求。直到遇到客户要求打印特殊尺寸的送货单,才发现现实场景远比想象复杂。比如物流行业常用的三联单、仓库的条形码标签、财务的特殊凭证&a…...

Python AI爬虫实战:爬取张雪峰微博并进行情感分析与词云可视化剖

1. 引入 在现代 AI 工程中,Hugging Face 的 tokenizers 库已成为分词器的事实标准。不过 Hugging Face 的 tokenizers 是用 Rust 来实现的,官方只提供了 python 和 node 的绑定实现。要实现与 Hugging Face tokenizers 相同的行为,最好的办法…...

ArcGIS实战:如何将不同分辨率DEM进行无缝镶嵌以扩展地形分析范围

1. 为什么需要融合不同分辨率的DEM数据 第一次用高精度DEM做地形分析时,我就被坑惨了。当时手头有份2米分辨率的激光雷达数据,精度高到能看清每条田间小路。但当我把它加载到全局地图时,发现四周全是空白——就像把高清照片贴在白墙上那么突兀…...

ConvNeXt 系列改进:ConvNeXt 与 Swin Transformer 融合:构建 CSWin 混合 Block,超越纯 CNN

摘要:在 2026 年的计算机视觉(CV)主干网络发展中,纯卷积神经网络(CNN)与纯视觉 Transformer(ViT)的“路线之争”已落下帷幕,“混合架构(Hybrid Architecture)”全面接管了 SOTA 榜单。根据 2026 年 3 月最新发表的多篇顶会与医学视觉核心论文(如 CS-Net、HyCoSwin …...

OpenClaw入门案例:第一个龙虾智能体程序(Hello World版,复制可运行)

OpenClaw入门案例:第一个龙虾智能体程序(Hello World版,复制可运行)📚 本章学习目标:深入理解OpenClaw入门案例的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。…...

从零实现富文本编辑器#-React可编辑节点的组件预设泄

1. 智能软件工程的范式转移:从库集成到原生框架演进 在生成式人工智能(Generative AI)从单纯的文本生成向具备自主规划与执行能力的“代理化(Agentic)”系统跨越的过程中,.NET 生态系统正在经历一场自该平台…...

UniversalSplitScreen:让任何游戏都能分屏游玩的终极解决方案

UniversalSplitScreen:让任何游戏都能分屏游玩的终极解决方案 【免费下载链接】UniversalSplitScreen Split screen multiplayer for any game with multiple keyboards, mice and controllers. 项目地址: https://gitcode.com/gh_mirrors/un/UniversalSplitScree…...

Java实战:从零构建一个支持微积分运算的科学计算器

1. 科学计算器的核心功能设计 构建一个支持微积分运算的科学计算器,首先要明确功能边界。基础功能包括四则运算、三角函数、指数对数等常规计算,而核心难点在于微积分功能的实现。我建议采用模块化设计思路,将计算器分为三个层次:…...