极验4滑块协议分析

发布时间:2026/10/29 6:52:34

极验4滑块协议分析 摘要本文以极验4GT4滑块行为验证的官方 demo 为分析对象完整梳理从页面初始化到最终校验的协议流程。文章先介绍 load 初始化接口中 jsonp 回调名、challenge 与 cookie 的生成逻辑再讲解背景图与滑块图的下载、预处理、模板匹配及缺口定位方法最后深入拆解 verify 校验接口中 w 参数与 td 行为数据的生成逻辑涵盖 AES/RSA 加密、PoW 字段处理以及轨迹数据的 gzip 压缩与 Base64 编码流程为理解 GT4 滑块验证的逆向分析提供完整参考。文章大纲本文围绕极验4GT4滑块行为验证的完整协议流程展开从初始化接口到最终校验接口逐步拆解关键参数的生成逻辑。全文结构如下一、介绍 GT4 滑块验证的应用背景、分析目标与学习定位。二、GT4 完整校验流程梳理从 load 初始化到 verify 校验的完整链路。2.1 load 初始化接口分析 jsonp 回调名、challenge 与 cookie 的生成逻辑。2.2 图片处理讲解背景图与滑块图的下载、预处理、模板匹配与缺口定位。2.3 verify 校验接口拆解 w 参数与 td 行为数据的生成逻辑。一.前言极验4的滑块行为验证是目前应用很广的人机验证方案本文以官方demo作为分析站点完整梳理从初始化到最终校验的协议流程定位分析关键参数的生成逻辑仅用于技术学习交流。网址aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20二.GT4完整校验流程2.1load初始化接口使用Chrome Devtools调试手动触发并进行一次滑动接口返回如下完整流程load页面初始化 -- 返回jsonp -- 加载脚本和样式 -- 下载背景图和滑块图 -- 交互后verify校验其中payload请求参数需要注意有callback和challenge字段其他相对固定。load接口response返回格式不是纯json而是geetest_随机数{}的jsonp格式。核心字段包括lot_number、payload、process_token、payload_protocol、pt、bg、slice、ypos和pow_detail等。lot_number是后续动态字段和td_sign的关联值。需要定位参数生成位置直接搜索关键字段callback找到jsonp回调名的生成位置。进入random()函数里0~9999随机数和当前时间戳直接相加不是字符串拼接。用python类似import random import time def callback_name(now_ms: int | None None) - str: timestamp now_ms if now_ms is not None else int(time.time() * 1000) suffix random.randrange(10000) return fgeetest_{timestamp suffix}再搜challenge定位生成位置直接import uuid challenge str(uuid.uuid4())至于cookie在第一次请求load会返回set-cookie后续请求携带这个cookie即可。2.2图片处理对图片进行处理时先将load请求的response返回的slice和bg拼接成相应的url下载背景图和滑块图。将图片下载到本地后,将背景图读取为灰度图。bg cv2.imread(str(bg_path), cv2.IMREAD_GRAYSCALE)滑块图使用四通道模式读取。piece cv2.imread(str(slice_path), cv2.IMREAD_UNCHANGED)滑块图通常包含B、G、R图像颜色 AAlpha 透明度蒙版Alpha 通道可以区分滑块主体和透明背景因此比单纯比较 RGB 更可靠。验证码背景中的缺口区域通常会增加阴影或低频颜色变化因此先使用高斯模糊提取低频部分再与原图相减bg_hp ( cv2.GaussianBlur(bg, (3, 3), 0).astype(float32) - bg.astype(float32) )滑块图也进行相应处理piece_hp ( cv2.GaussianBlur(piece_gray, (3, 3), 0).astype(float32) - piece_gray.astype(float32) )处理后的结果重点保留边缘、纹理和局部细节削弱大面积颜色渐变造成的影响。滑块边缘通常包含装饰边框、阴影和透明过渡区域。为了减少这些区域对匹配结果的干扰对 Alpha 蒙版进行腐蚀mask cv2.erode( piece[:, :, 3], None, iterations9, )腐蚀后留下的是滑块内部较稳定的纹理区域。之后只使用这部分区域参与模板匹配。使用 OpenCV 的归一化相关系数方法进行模板匹配result cv2.matchTemplate( bg_hp, piece_hp, cv2.TM_CCOEFF_NORMED, maskmask, )result是一个二维矩阵result[y][x] 滑块模板放在背景坐标 (x, y) 时的匹配分数。模板在背景上逐点移动每个位置都会得到一个分数。分数越高表示滑块纹理与该位置越相似。load响应中还会返回ypos。它表示滑块缺口大致所在的垂直位置因此不需要扫描整张背景图。代码将搜索区域限制在ypos - 6 ≤ y ypos 7对应实现lo max(0, int(ypos) - 6) hi min(result.shape[0], int(ypos) 7) band result[lo:hi] _, score, _, local cv2.minMaxLoc(band) location ( local[0], local[1] lo, )最终得到gap_x, gap_y, score这里得到的gap_x还是原始图片坐标不一定等于浏览器滑块控件需要的移动距离。后续会根据客户端缩放比例进行换算set_left int((gap_x - 2) * scale) userresponse set_left / scale 2之后这些字段才会参与明文 JSON 组装和w加密。图片处理阶段只负责回答缺口在原始背景图的什么位置滑动距离、显示缩放和客户端字段则在后续参数组装阶段处理。2.3.verify校验接口2.3.1.w参数生成逻辑verify接口需要还原w和td。首先通过initiator调用堆栈找到对应文件关键词搜索参数process_token,定位到参数的赋值位置。w的值是c找c的生成位置加密函数为i跟入函数内部假设让table _ᖈᕴᖙᕶ.$_Dl() , 最开始state table[6][19] , 与第一个case: table[3][19]判断为true因此进入第一个case其中的if判断的是pt的值第一个case将Config赋值给n然后修改state。第二次循环新的state与第二个case匹配进入第二个case这是主加密分支。首先是一些赋值操作第一个是s跟入函数主要看e()继续跟入e(), 大致是return (65536 * (1 Math[random]()) | 0) [toString](16) [substring](1);生成一个随机数×65536再转成不带0x的十六进制串再去掉首位字符最后是4位十六进制字符s得到的就是16个十六进制字符这个s是后面AES加密的key。继续分析这里有个r函数r的作用就是给当前实例写入$_BJH属性保存传入的数组最后得到的就是个含有数组属性的对象。继续往后看1和2两条分支这个r会通过pt的值来判断分支这里只分析1先看symmetrical跟入函数后查看是标准AES加密再看asymmetric跟入其构造函数是个标准RSA加密这里是初始化 RSA 密钥对象并配置公钥往下通过pt判断先调用asymmetric.encrypt(s)s是前面随机生成的 16 位十六进制字符key返回RSA密文u然后判断u的长度是否为256个十六进制字符也就是128字节直到生成符合要求的RSA 输出。然后调用symmetrical.encrypt(plaintext, s)进行AES加密返回数组c。这里的plaintext是一个 JSON 字符串图片处理后由滑块定位得到的setLeft、passtime、userresponse 等行为参数以及 /load 响应中的lot_number、PoW 字段和其他协议字段共同组成。 PoW 字段pow_sign与pow_msg需要处理load响应中的pow_detail通过找堆栈定位到跟入函数pow_msg: version|bits|hashfunc|datetime|captcha_id|lot_number| device_id|随机16个十六进制字符,device_id这里是“ ”。pow_sign: SHA-256(pow_msg 的 UTF-8 字节).hex()最后将AES加密后的数组c经过下面的函数进行处理后与RSA密文u作拼接就是最后的w参数。2.3.2.td行为数据生成根据堆栈找生成位置定位到这里已经生成了完整的url继续往上找堆栈直到这查看作用域可以看到含有td的对象是在u的闭包。进入u的堆栈到这还不是生成位置但可以看到这个 _ 有td,在附近找 _ 的td是在这里赋值也就是_ᕺᕶᕹᕸ接着往上找_ᕺᕶᕹᕸ在这里生成跟入函数是把第一个参数的new_track属性给了n然后删掉new_track最后返回值是n同时第一个参数对象添加了一个td_sign所以呢new_track的值就是td因此需要找new_track是哪里生成的。函数u的堆栈内查看作用域u的第一个参数携带new_track同时u函数在$_BCEA的闭包作用域断到$_BCEA后发现u的第一个参数已经有new_track值再往上找堆栈。到这里可以看到有个对象的赋值操作有三个值setLeft, passtime,userresponse没有new_trackreturn中的这个函数里这个对象作为了参数传入所以跟入函数这里就是new_track的实际生成位置接收值的是i所以继续跟入i的生成函数跟入后传入参数是一个轨迹对象往后看o()返回的是一个压缩/编码工具对象strToU8字符串转 UTF-8 字节gzipSync对字节进行 gzip 压缩最后的返回值 JSON.stringify(轨迹对象)→ UTF-8 字节→ gzip 压缩→ URL-safe Base64 编码→ 去掉末尾填充 → new_track至于这个函数是一个字节数组编码函数Base64 编码器。最后补齐verify请求携带的参数后:免责声明本文内容仅用于技术学习与交流旨在帮助读者理解 GT4 滑块验证的协议流程与参数生成逻辑。文中涉及的代码、接口分析与逆向思路仅供学习研究使用请勿用于任何违反法律法规、平台服务条款或侵犯他人合法权益的场景。请读者遵守相关法律法规与平台规则合理合法地使用技术知识。
延伸阅读

更多相关文章

2026/10/25 15:18:49

Rust 实现 PDF 压缩与合并:Presse 命令行工具实战解析

平时整理 PDF 文件时,最烦的就是手里一堆扫描件、合同截图、报表导出文件,既要合并成一个文档,又希望体积别太大。网上在线工具要么限制文件数量,要么压缩后画质糊成一团,要么还得上传到别人的服务器。最近看到一个 Ru…

2026/10/29 1:38:25

STM32N6570-DK部署YOLOv5n自定义目标检测全流程指南

1. 项目概述:为什么我选择在STM32N6570-DK上跑自定义目标检测 这两年边缘AI的热度一直没降过,但说实话,真正能把目标检测模型从PC端搬到MCU级芯片上跑起来的方案并不多。ST推出的STM32N6570-DK是我最近重点折腾的一块板子,它核心优…

2026/10/24 17:11:32

基于Spark ALS的短视频推荐系统搭建与实现

基于Spark的个性化短视频推荐系统,是计算机毕业设计里综合性较强的一类题目。它同时涉及大数据存储、分布式计算、Web 后端和推荐算法,恰好覆盖 Hadoop、Spark、Django、Python 四类技术栈。很多同学拿到题目后的第一反应是去找源码,但源码一…

2026/10/29 6:49:05

marketingskills:重建真实用户连接的实操能力

1. 这不是“学营销”,而是重建你和真实用户之间的连接能力“marketingskills”这个词,最近在招聘平台、自由职业接单页面、甚至小红书笔记标题里高频出现,但它绝不是指背熟4P理论、能画SWOT矩阵、会写朋友圈文案就完事了。我带过37个从零起步…

2026/10/29 6:49:05

OpenCV图像仿射变换原理与实战指南

1. 图像仿射变换基础概念解析在计算机视觉和图像处理领域,仿射变换是最基础也最重要的几何变换之一。简单来说,仿射变换就是保持图像中直线和平行线关系的线性变换,它包含了平移、旋转、缩放和剪切等基本操作。作为图像处理工程师&#xff0c…

2026/10/29 6:49:05

marketingskills:5个可练习的营销能力模块

1. 这不是“学营销”,而是重建你和钱的关系“marketingskills”——这个词最近在招聘平台、自由职业接单站、甚至朋友圈晒学习计划的截图里高频出现,但它根本不是什么新概念,更不是某家培训机构刚编出来的课程名。它就是市场能力的缩写&#…

2026/10/29 6:49:05

Prompt-Tuning小样本微调:模板、标签词与过拟合控制

简介:《Prompt-Tuning:深度解读一种全新的微调范式》是一份面向NLP研究者、算法工程师与大模型学习者的综述型PDF,围绕少样本、零样本场景下如何用提示替代传统Fine-tuning展开,重点回应预训练与下游任务目标差异大、微调易过拟合…

2026/10/29 6:49:05

营销能力不是灵感,而是可拆解的四大实战模块

1. 这不是“营销课”,而是一套可拆解、可验证、可复用的实战能力系统“marketingskills”这个词,乍看像英文课程名,但放在当下内容爆炸、流量碎片、用户注意力以秒计价的环境里,它根本不是什么抽象概念,而是你发一条朋…

2026/10/29 6:44:05

Ponytail:前端UI状态快照与协作诊断工具详解

1. 项目概述:从“ponytail”热词切入,我们到底在讨论什么?最近刷技术社区、设计论坛甚至短视频平台,频繁撞见“ponytail”这个词——它既不是马尾辫的直译,也不是某个新晋网红的ID,而是一个正在快速聚拢真实…

2026/10/28 14:42:12

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/28 15:28:56

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/28 3:32:29

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/29 0:03:42

学生选课系统DFD图绘制指南:边界划分与分层校验实战

简介:文档以顶层与第一层DFD图为核心,完整刻画学生选课系统的逻辑模型,面向软件工程课程设计、系统分析学习及毕设前期建模人群。顶层图界定系统边界,外部实体包括管理员、教师和学生三类角色;第一层图进一步细化用户登…

2026/10/29 0:03:42

JIRA敏捷落地:Scrum角色权限、Sprint与燃尽图避坑指南

简介:围绕“基于JIRA的敏捷开发项目管理”这一主题,面向产品负责人、Scrum Master及研发测试成员,梳理Scrum角色分工、迭代流程与JIRA工具配置的对应关系,适合初、中级团队导入敏捷管理时参考。压缩包共1个docx文件,大…

2026/10/29 0:03:42

SEMI S8人机工程验收实战:从条款拆解到现场实测的完整指南

简介:面向半导体设备设计、制造与运维工程师及安全合规人员,这份资料聚焦SEMI标准体系下的设备安全规范,重点收录SEMI S8-0308《半导体制造设备人体工程学工程安全指南》。内容围绕设备设计原则、错误与事故预防、人体工程学适配三大主线展开…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑