极验验证码行为模拟(成功率90%以上)

这期我来玩一点黑科技的东西

最近有同事在搞爬虫时碰到了极验的第二代拖动式验证码,让我帮忙给研究一下。

于是乎我从极验官网下了demo在看。又通过网上其他同学的思路,大概研究出来了。

本人声明:我只是出于技术的爱好去研究了一下,请勿用来做一些非法勾当。

工具

项目是用的python去做的
用到了python的一些库:
PIL(做一些验证码图片的处理、如图片还原、对比缺口)
selenium(模拟浏览器)
phantomjs(浏览器内核,测试时我用的chrome驱动,正式使用时我会替换成phantomjs)

思路

这里参考网上其他同学的思想,(假设你已经了解了极验拖动验证码的一些规则):
1. 找到验证码的图片,将乱序的验证码还原
2. 对比bg和fullbg两张图片,找到缺口位置
3. 用selenium模拟人的行为拖动滑块
4. 验证结果
以上思路中1和2网上都能找到很多例子,难的就是如何写一个拖动轨迹的算法,让浏览器模拟人的行为并且让极验服务器那边大概率地判定为是人操作的。
这里其他同学有不同的做法:
1.用人去拖动滑块,录制轨迹,然后用通过的轨迹去回放
2.有一些逆向工程比较厉害的人反编译geetest.js,毕竟前端加密还是比较弱的,破解js里的算法然后伪造数据
因为我比较笨,实在是不知道怎么反混淆js。就想着纯算法模拟。
以下我就着重介绍一下第三步

分析

打开带有极验验证码页,F12大法好。可以获得以下信息:
验证码图片宽度300px
滑块宽度55px
轨迹长度220px
理论上阴影可以出现的范围是 300-55*2=190px 两边再加15px 也就是220px(这里是我猜测的)
最小的开始距离应该是55px-15px=40px(从来没有出现过,测试时最小的一次是46px)
最大的距离应该是190px+15px=205px(也没有遇到过,测试时最大的一次是196px)

我的做法是在获取到缺口距离x后,随机出若干个从0到x之间的随机数,
然后把这些随机数当成滑动轨迹里的点,
然后依次模拟拖动鼠标到这些点上,
中间停顿若干时间,
尽量模拟人的行为去考虑拖动的算法。

说出来你们可能不信,我像踩了狗屎运一样,
第一次根据上面的规则写出来的算法,测试100次
通过91次,因为缺口距离计算错误 gt_fail 1次,验证码被吃gt_forbidden 8次
然后我就在沾沾自喜,卧槽,我太特么天才了
当我准备把测试数据放到10000次的时候,
发现当通过了300多次以后,后面一直都是gt_forbidden,
卧槽?极验真的有大数据去分析,自动修正,自动防御功能?真牛逼
后来我怀疑是IP的问题,切换完IP后还是经常gt_forbidden
这时我不得不重新思考了

我开始记录那些随机数,当成我的轨迹数据,
在我通过一系列修改,碰到缺口相差不多的时候,用曾经通过的那些轨迹数据,去回放。
然后发现了一个惊喜的效果,有的随机数轨迹能跑通过30多次还生效,我靠,这就够用了
通过这样的行为,能够把通过率从50%拉回到80%多

于是一个牛逼哄哄的想法从脑海里蹦出
极验不是有机器学习,大数据去做支撑,深度神经网络系统,能主动绘制模型分析用户行为么?
那我也建一个轨迹的大数据库,去分析这些轨迹,去试错,去调优,去修改权重,测试轨迹的可靠性
用这些数据去练练极验的机器学习,也提升我的轨迹数据的可靠性。
想想就有点小激动
虽然不是机器学习,但是这种想法是很靠谱的

测试结果

先上一张我通过的轨迹缺口距离的一些大概分布图:
这里是缺口距离46到110里的数据
这里写图片描述
这里是缺口距离111到196的数据
这里写图片描述

这里的数据是我通过的数据库记录的关于缺口距离的分布图
虽然不知道这些数据有什么用,但是看着很过瘾
这里写图片描述
这里是采集的一些数据在mysql里的截图

代码

因为是给别人做的一些研究,为了一些责任,源代码就不上了。
只要思路对,写出来的肯定能成功率90%以上
再次声明:本人只是单纯的对于技术的喜好去研究,切勿从事非法行为。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
验证码滑动的速度控制是一个比较细节的问题,一般来说可以通过模拟人类的行为来实现。 具体来说,您可以将滑块拖动的过程分为多个步骤,每个步骤之间间隔一定的时间,以模拟人类的操作。这样可以避免滑块被识别为机器人行为,提高验证码滑动成功率。 下面是一个示例代码,用于实现验证码滑动的速度控制: ```python import time from selenium.webdriver.common.action_chains import ActionChains def slide_verification_code(driver, slider, offset): """模拟滑动验证码操作""" # 获取滑块的位置和大小 slider_width = slider.size['width'] slider_height = slider.size['height'] slider_x = slider.location['x'] slider_y = slider.location['y'] # 计算鼠标移动的路径和步长 path, step = get_path_and_step(offset, slider_width) # 创建 ActionChains 对象,模拟滑动操作 action = ActionChains(driver) action.click_and_hold(slider).perform() # 模拟滑动操作 for x, y in path: action.move_by_offset(x, y).perform() time.sleep(step) # 释放鼠标 action.release().perform() ``` 在这个示例代码中,我们使用了 Selenium 的 ActionChains 对象来模拟滑动验证码的操作。具体来说,我们首先计算出鼠标移动的路径和步长,然后通过 ActionChains 对象来模拟移动操作。在每个步骤之间,我们使用 time.sleep() 函数来等待一段时间,以模拟人类的操作行为。 需要注意的是,滑块的速度和步长需要根据具体的验证码网站来进行调整,以获得最佳的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值