极验滑动验证码6.0破解复盘

极验滑动验证码6.0破解复盘

yonggegeyonggege

0. GeeTest.6.0.0

GeeTest极验验证码悄悄在这一两个月更新了js代码,从5.X到了6.0,破解的难度比之前稍微复杂了一些,破解已成功,就来复盘一下吧。


1. 整体思路

拿这个《国家企业信用信息公示系统》为例,查询时会先需要通过滑动验证码。打开f12刷新网页,完成一次失败的滑动,查看加载项。

请求时提交一些参数完成验证。

passtime应该就是滑动的时间。imgload可能是图片加载时间

先记下这个参数,继续看加载项。

gt和challenge的值在这里。记为1号包,接着看下一个

这里返回的是一些参数,记为2号包,这里的返回值是后面3号包的请求的参数。

3号包:这个返回值也有challenge和gt,但gt的值没有变化是一个固定的值,challenge每次请求都发生了变化。但这个结果的返回值和提交时的challenge一致,这就找到了两个参数。

同时还有fullbg和bg两个参数,得到乱排序后的图片,通过排序之后可以计算滑动偏移量。

fullbg
bg

(图片还原可以参照以GeeTest为例的滑动验证码破解 - 图片还原2)!!!

另外的userresponse 和aa值是通过后面的geetest.6.0.0.js加密算法算出

那下一步则是解析这个js文件

2. userresponse和aa

镜头来到Source中找到这个js。一顿查找,终于发现:

只想说在这一堆混淆的js写得真不容易,编码也下了功夫。可真不好找!!!!

r1Y中就是我们需要的各个参数,其中的aa和userresponse加密算法也在。

  • userresponse

这里userresponse需要的参数是滑动轨迹数组的长度和上文3号包的challenge,这里和5.x版本很像,但是发现加密算法改了.

看着真蛋疼,不过还好解决了,改写成了python

  • aa

aa就是对轨迹的加密也是和上一版本很大区别,看完6.0,觉得上一版本简直不能再简单了。

aa从这里开始,找到这个函数,需要的参数就是提交的轨迹,这里放到后面

接着返回一串加密的字符串,但是还不够,还要加密一次,也找到了

找到函数:

这里返回也是一串加密字符串,最后经过encodeURIComponent处理即可

到这里所有参数出处和算法搞定了。最后就是看看轨迹

3. 轨迹

这里先完成一次滑动,查看结果

结果是轨迹用一组数组表示,数组里每个小数组代表每一个微小滑动的数据:

[滑动距离, 上下偏移量, 累计时间]

(上文中的passtime就是这里的累计时间)

  • 累计时间可以每次变化加上一个限定范围内的随机值。
  • 上下偏移量设定有小小范围的(例如[-5, 5]内)的偏移。
  • 滑动距离采用了一个sigmoid函数(类似下面),还可以优化,成功率会更高。
# b偏移量
def sigmoid(x, b):
    return (1 / (1 + exp(-x + 4))) * b

得到结果,恩可以了。

4. 最后

不提供代码, 毕竟人家工程师不容易,本文仅提供一个思路。

文章被以下专栏收录
16 条评论
推荐阅读