基于行为式验证的GeeTest验证码研究

article/2025/9/10 15:49:09

什么是行为式验证

  行为式验证的核心思想是利用用户的“行为特征”来做验证安全判别。整个验证框架采用高效的“行为沙盒”主动框架, 这个框架会引导用户在“行为沙盒”内产生特定的行为数据,利用“多重复合行为判别”算法从特指、视觉、思考等多重行为信息中辨识出生物个体的特征, 从而准确快速的提供验证结果。

  通过机器学习,深度学习对人的行为特征进行大量的分析。建立安全模型去区分人与机器程序。利用深度学习构建的神经网络是可以不断地自主学习的,在不断的验证过程中不断的学习新的特征分析。

  • 通过模型分析,红色是恶意程序,绿色是正常用户,我们可以清晰的分辨出来,说明人与机器程序在网络世界的行为是具有很大的差距的。

GeeTest是如何验证的

  显而易见,GeeTest的验证方式类似于拼图,通过鼠标拖动使滑块图片与背景图的缺口部分重合,形成一幅完整的图片,从而完成了GeeTest的验证过程。这就构建起了GeeTest行为式验证的“行为沙盒”,而用户使用鼠标拖动滑块的动作就是GeeTest行为式验证在这个“行为沙盒”中所要侦测的具体的行为。

  那么问题来了,GeeTest又是如何通过鼠标拖动这一简单的动作来区分是人为的还是恶意程序的呢?要知道实现鼠标动作,对于开发人员来说,简单的一个脚本就可以搞定。

鼠标行为特征

  利用鼠标消息钩子截获到的数据样本内容如下表所示,表中每一行表示所截获到的一个鼠标输入数据点信息。

消息类型X轴坐标Y轴坐标时间戳
512359295419556140
512358295419556171
513358295419556281
514358295419556390
512358295419556562

  通过数据样本可知采集的鼠标输入数据都是按时间顺序排列的4 维数据集合:InputData={(typei, xi, yi, timei)},i表示第i个数据点。

  • typei表示鼠标消息类型,描述了鼠标操作事件类型,如左键按下,右键弹起,滚动,移动等。
  • xi和yi分别表示鼠标输入数据点在屏幕坐标系中的绝对坐标,取值范围和屏幕分辨率对应。
  • timei为输入数据点的高精度时间信息。

  由此可以提取鼠标 移动速度、移动加速度、移动偏移量、移动持续时间、点击时间间隔的统计量这 5 类特征。

移动速度

  在人机交互过程中,鼠标移动的轨迹通常不是直线,鼠标在移动方向和垂直移动方向都有位移。单点的速度方向并不总是和移动方向一致,有时甚至偏差很大。将单点的速度v分解为移动方向的速度和垂直移动方向的速度。对于水平移动,计算水平方向上的速度, 第j个数据点的速度定义为当前数据点和前一数据点水平坐标之差除以它们的时间戳之差。类似地,可以计算出垂直速度。

移动加速度

  加速度的计算使用已经计算出来的速度值,加速度方向和速度方向一致。第 j 个数据点 的加速度定义为当前数据点和前一数据点速度之差除以它们的时间戳之差。

移动偏移量

  对于水平移动,计算垂直方向上的偏移量,第j段移动的偏移量定义为移动轨迹中,每相邻数据点的垂直坐标之差绝对值的求和。类似地,对于垂直移动,计算水平偏移量。对于斜线方向移动的处理也需要先进行坐标变换。

移动持续时间

  一次移动的持续时间是一次移动中首尾两个数据点的时间之差。

点击时间间隔统计特征

  一次人机交互会话中的点击时间间隔统计特征包括鼠标单、双击时间间隔(包括单击持续时间、双击中两次单击持续时间,间隔时间和双击持续时间)的均值和方差。

  根据以上的鼠标行为特征就能进行计算机用户的身份识别,同时也就能区分出到底是人还是恶意程序在进行鼠标的操作,当然简单的依靠这些特征来还无法直接检测用户身份,需要经过一些特殊处理,比如利用特征的距离度量等手段来进行进一步的处理,这些都不是本文说关注的,如果有兴趣的同学可以自行的搜索相关内容。

GeeTest的鼠标行为侦测

  为了方便,文本主要针对GeeTest的Web端进行分析,帮助大家来了解GeeTest的整个验证过程,首先我们从GeeTest官网下载了geetest-java-sdk,部署好之后直接访问demo页面,如下图

  利用开发者工具,查看GeeTest验证过程中的网络请求过程

  发现在GeeTest的验证过程中,产生了http://api.geetest.com/ajax.php这样一个请求,具体的请求参数如下:

  请求响应的结果:

  由此可知,ajax.php就是GeeTest客户端验证的请求,GeeTest就是通过ajax.php请求接口来验证用户的行为的,那么ajax.php的这些参数是如何产生的,它们都代表什么意思呢?这就要从geetest.js中去寻找答案了。

  geetest.js是GeeTest web客户端最核心的组件,通常geetest.js都是被压缩处理过的,这都是小问题,使用专门的工具格式化下,剩下的就靠着耐心来阅读分析啦,经过一番折腾在geetest中找到了下面这段代码:

  这不正是GeeTest客户端验证ajax.php请求的过程嘛?经过源码分析,终于搞清楚这些参数的具体含义:

  • gt :GeeTest为每个应用所分配的唯一ID
  • challange :GeeTest此次验证的唯一吗,每次刷新都会变化
  • imgload :GeeTest图片加载时间
  • userresponse : 与鼠标的移动偏移量和challange有关的
  • a :鼠标的移动路径

  下面我们来详细分析下这些参数的产生过程:首先我们来分析下鼠标的移动路径a,可能有些人纳闷,从前面的请求参数截图来看,a是一长串的奇怪的字符串,怎么会跟鼠标的移动路径有关呢?

  如上图,红色的框中的代码是我自己添加上去的,目的是在console中打印出该方法的入参,我们看下这个参数会是什么

  这不跟前面提到的鼠标行为特征4维数据集合很像嘛?这个就是鼠标的路径?在这里可以明确的说,这就是鼠标的路径集合,由于GeeTest只侦测鼠标的拖动行为,所以4维数据集合中的typei就可以不用记录了,有了这个路径数据,GeeTest就可以侦测鼠标行为特征了。。。

  至于最后如何将鼠标的路径集合转化为那个奇怪的字符串,在上面截图的js代码中的那些方法就是具体的实现了,只要你认真的阅读下,就能搞定了。。。

  看到这,你是不是想到什么啦?如果我们能够模拟出整个鼠标路径的话,那是不是就能够通过GeeTest的验证?嗯,确实可以哦,只要你有一定的算法能力,根据上面鼠标的行为特征就能模拟出鼠标的路径来,不过有一点说一点,GeeTest肯定是使用了深度学的神经网络来进行人机识别,这就要看你的算法能力有多强了,或者更牛X点的,你也可以利用机器学习来模拟哦!

GeeTest图片滑动

未完待续 。。。

  由于,本文只是研究GeeTest的验证过程,只能给大家提供个思路而已,至于破解的代码,就不方便贴出来,毕竟这涉及到侵权的问题,如果大家有兴趣,欢迎访问http://www.cleverli.cn/captcha.html,诚邀有兴趣者参加。。。


http://chatgpt.dhexx.cn/article/pYKVrJFs.shtml

相关文章

reactNative集成极验(GeeTest)

考虑到网上还没有rn极验的集成文章,前俩天公司业务正好集成了一下android和ios的sdk,平时时间少没时间写,今天简单介绍一下集成方案,要是时间允许的话,我搞一个极验的rn版sdk,给大家分享一下😄 …

项目gtest测试框架 - GoogleTest(十)

精简版本的C单元测试框架 ,通过编写这个简单的测试框架,将有助于我们理解gtest。 1. 目录 类型文件说明文件./CMakeLists.txt整体项目工程文件目录./debiandeb包打包脚本目录,未实现目录./rpmrpm打包目录,rpm打包的详细内容可以…

Geetest极验+VUE把验证码绑定到自己的按钮(例如获取验证码)

极验流程 客户端gt.js里调用initGeetest发起初始化,会向后端获取gt等参数(后端会跟极验通信),然后前端会根据传回的数据去决定用什么做验证,然后验证通过之后会有三个参数提供给后端进行二次校验的。具体接入看极验官…

【日常】Geetest滑动验证码(三代canvas版)处理小结(以B站登录验证为例)

问题描述 这个问题确实让我困扰了太长时间,今天花了半天时间,并没有找到非常完满的解决方案,只是在解决问题的过程中学会了一些其他知识,我最后还是要通过人工来判断大致的移动距离,然后根据误差做微调。大致做个总结…

geetest极验空间推理验证码破解与研究

看了很多的破解滑动验证码,决定破解一下空间推理验证码。破解思路,通过分析接口请求,对图片物体进行定位分类,通过模拟请求破解验证码。 研究的网站为 https://www.geetest.com/show 一、极验请求分析 请求详细 一、register-s…

googletest简介

googletest是由谷歌的测试技术团队开发的测试框架,使用c实现,具有跨平台等特性。 好的测试框架 引用谷歌给出的文档,好的测试应当具备以下特征: 测试应该是独立的和可重复的。调试一个由于其他测试而成功或失败的测试是一件痛苦…

破解极验(geetest)验证码

最近在搞爬虫的时候在好几个网站都碰到了一种叫做geetest的滑动条验证码,一直没有太好的办法只能在触发这个验证码后发个报警去手动处理一下。http://www.geetest.com/exp_embed是他们官网的样例。 后来研究了下觉得要破解这个验证码有这么几个问题: 无法直接通过发送…

破解滑块验证码最新版(GEETEST 95%以上通过率)

一、滑块验证码简述 有爬虫,自然就有反爬虫,就像病毒和杀毒软件一样,有攻就有防,两者彼此推进发展。而目前最流行的反爬技术验证码,为了防止爬虫自动注册,批量生成垃圾账号,几乎所有网站的注册页…

极验GeeTest简单demo

概述 人机验证 3.0 解决方案(基于生物行为与人工智能) 2012 年极验将人机验证从1.0时代推动到了 2.0 时代。在 5 年时间中,超过千亿次数据学习与优化,极验利用三角防护理论和 AI 智能决策引擎,全面更新安全架构。2017 年,正式推出…

极验geetest的使用

项目中会遇到 滑块验证的需求: 前端vue里 1.新建/utils/gt3.js "v0.4.8 Geetest Inc.";(function (window) {"use strict";if (typeof window undefined) {throw new Error(Geetest requires browser environment);}var document window.do…

爬虫进阶教程:极验(GEETEST)验证码破解教程

摘要: 爬虫最大的敌人之一是什么?没错,验证码!Geetest作为提供验证码服务的行家,市场占有率还是蛮高的。遇到Geetest提供的滑动验证码怎么破?授人予鱼不如授人予渔,接下来就为大家呈现本教程的精彩内容。 一…

【已解决】安卓手机的GeeTest文件夹是什么

网上关于安卓系统手机的GeeTest目录是什么的文章和帖子,绝大部分打着GeeTest的标题,内容都是牛头不对马嘴,答非所问,没一个能解释清楚。 我刚刚找到了正式的答复如下: Android 手机上的“geetest”目录与名为“极验”的…

正定二次型与半正定二次型

对于实二次型其中A是实对称的,下列条件等价: 正定的 (1)是正定的. (2)它的正惯性指数p等于n. (3)有可逆实矩阵C,使得其中 (4)实对称矩阵A是正…

怎么对document.write写出来的内容调整对齐方式_【求职技巧】给少数人:硅谷BAT级别的简历这么写...

我什么都不会”,“我什么都没干”,“这个项目很水”,这是我在帮别人修改简历时听到的最多的几句话。难道你真的什么都不会吗?真的什么都没干吗?真的很水吗?其实很多情况下,是这样的。 但是很水就放弃治疗了吗?不会的。放下无谓的抱怨和遗憾,好好梳理自己,认真编…

c语言八皇后问题经典算法,经典算法之八皇后问题

八皇后问题是一个古老而又著名的问题,是学习回溯算法的一个经典案例。今天我们就一起来探究一下吧! 时间退回到1848年,国际西洋棋棋手马克斯贝瑟尔提出了这样的一个问题, 在88格的国际象棋上摆放八个皇后,使其不能互相…

从八皇后问题思考回溯法

一、八皇后问题 八皇后是经典的回溯法问题,题目是说将八个皇后,放到88的国际象棋棋盘中中,使得任意两个皇后都不能在同一行、同一列以及同一条对角线上。下图是一个四皇后的搜索示意图。 八皇后问题可以通过暴力法求解,代码也很…

八皇后问题(Python)

一.问题简介 八皇后问题: 如何能在 8*8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了到达此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。 二.几种思路和方法 1.回溯法递归思想 如图所…

八皇后问题详解(四种解法)

所有源码都在github上(https://github.com/seasonyao/eight_queen_question) 如果你去百度百科八皇后这个问题,你会发现人家也是历史上有头有脸的一个问题,最后一句“计算机发明后就有一万种方式解决这个问题”读起来也让程序猿们很快活。闲话少说,开始阐述我的思路: 最…

八皇后问题

八皇后问题 八皇后问题(英文:Eight queens),是由国际西洋棋棋手马克斯贝瑟尔于1848年提出的问题,是回溯算法的典型案例。 问题表述为:在88格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或…

八皇后问题(适合初学者的写法)C语言

什么是八皇后问题: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯贝瑟尔于1848年提出:在88格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能…