您好,欢迎来到测品娱乐。
搜索
您的当前位置:首页全网最详细的极验滑块经验分享!!!!

全网最详细的极验滑块经验分享!!!!

来源:测品娱乐


先看看全流程的python效果图,主要涉及python与js,如果你有兴趣的话,那么就可以往下继续看了。

极验滑块介绍

在爬虫的过程最常见的滑块应该就是极验了吧,本次交流就以极验为案例,分析在其中的重要参数与破解思路。

抓包分析

我们对一个正常的极验流程进行抓包,分析其中有哪些重要请求与参数,废话不多说,直接上图:

1. 获取challenge

根据你要过极验的网站可以抓包分析到获取challenge的请求,相信对于屏幕面前的你,这并非难事;

2. w1

在你点击开始验证后第一个请求

3. w2

第二个请求

4. 获取图片路径

5. w3

发送轨迹的请求如下:

没错,又是我们的老朋友1.获取的challengew,此处的w值称为w3,很遗憾的告诉你w3包含轨迹数据,不能为空。那么w3是如何获取的呢,在slide.js的"\u0077": h + u,

"\u0077":翻译过来就w。那么我们就要获取hu的值。
从上图中的代码 可以看到h = m[$_CAIAK(792)](l)u = r[$_CAHJS(737)](),先看u是如何生成的,进入这个函数看看内部,下图中红框就是这个函数的实现。

u值

看来最重要的是这句var e = new U()[$_CBFJN(392)](this[$_CBGAK(744)](t));
那我们解混淆一下var e = new U()["encrypt"](this["$_CCEc"](t));,看来扣出U()这个类之后调用了一下加密函数就能复现,我们跟一下这个函数this["$_CCEc"](t)

看来重要的是Ot = rt(),那就跟一下rt(),

那就是返回值这行了,return t() + t() + t() + t();,那再看看t(),

看来翻译一下返回值这行就行了return (65536 * (1 + Math[$_BFBFC(21)]()) | 0)[$_BFBFC(213)](16)[$_BFBFC(415)](1);
解混淆的结果是return (65536 * (1 + Math['random']()) | 0)["toString"](16)["substring"](1);,那就是65536到2*65536的随机整数转16进制去掉第一个字符的结果,到此,只需要把上面流程复现一下,那么 u值就破解完了。

h值
h的值是由函数m[$_CAIAK(792)](l)生成,入参为l, 然而l = V[$_CAHJS(392)](gt[$_CAIAK(254)](o), r[$_CAIAK(744)]()),解混淆一下, V["encrypt"](gt["stringify"](o), r["$_CCEc"]()),明显又是一次加密,关键参数是or["$_CCEc"](),先看看函数r["$_CCEc"]()内部

好巧,这是我们在u值时候分析过的函数,直接拿过来用就行了,接下来我们看看o是如何得到。

o值
我们先看看o都包含哪些内容,
其中aa是你滑动的轨迹,ep内部的值可以模拟,把时间戳进行以相同的规律进行模拟即可。h9s9的值需要破解,imgload是图片加载的时间,passtime是你滑块阶段使用的时间。rpuserresponse都是需要破解的参数。这是一个objest类,所以我们只需要破解完这些参数后自己构建一个object就可以通过验证。

aa值
往上跟o值,可以看到o值是在下图位置创建的。

翻译一下就可一直aa对应着e,往上翻可以看到e对应下图的l,

那么我们解混淆一下l = n[$_DAAAU(985)][$_CJJJU(1075)](n[$_CJJJU(985)][$_CJJJU(1073)](), n[$_CJJJU(67)][$_CJJJU(1033)], n[$_DAAAU(67)][$_CJJJU(345)]);的值。

解混淆的结果为:l = n['$_CICO']['$_BBED'](n['$_CICO']['$_FD_'](), n['$_CJk']['c'], n['$_CJk']['s']);

其中n['$_CJk']['c']n['$_CJk']['s']的分别对应4. 获取图片路径中的c值与s值。
其中的函数n['$_CICO']['$_FD_']()对应下图的函数
这个函数运行的结果就是轨迹的加密值"T00--/(!!Hy((ys(ssss(ts!)sssssstsssstyssss(!!($)_A@:))8:$,/)7?9(9:Ne999?:9:9?)r$)f"
这个函数使用很简单,将n这个对应的属性值n['$_CICO']['$_HCb']设置为轨迹矩阵后直接执行这个函数就可以拿到加密轨迹值,轨迹矩阵的可以直接模拟,第一列是x轴的坐标变化,第二列是坐标y轴的变化,第三列是时间轴t的变化,有了滑块划动的距离后,模拟这个矩阵很容易,可以使用tanh函数模拟,注意矩阵第一行需要特殊处理一下。如下图:

userresponse值

接下来我们看userresponse值如何生成,

"\u0075\u0073\u0065\u0072\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065": H(t, i['challenge']),,解混淆一下,结果是:userresponse:H(t, i['challenge']),t是鼠标轨迹矩阵最后一行的x值,i['challenge']大家很熟悉了。对应下面这个函数

h9s9值
h9s9的获取实在一个外部js的函数进行的入口在下图的方框位置。

入参是一个json,分别是sep,这两个值在前面已经说了怎么模拟了。这个外部函数的实现是下面这张图的n这个函数。把json数据传入这个函数,返回值就会包含h9s9

rp值
rp的获取比较简单,入口在这个位置。

让我们来翻译一下这行代码:

  • 源文: o[$_CAIAK(793)] = X(i[$_CAIAK(122)] + i[$_CAIAK(134)][$_CAIAK(187)](0, 32) + o[$_CAHJS(725)]);
  • 解混淆: o['rp'] = X(i['gt'] + i["challenge"]["slice"](0, 32) + o["passtime"]);
    解完混淆就很明朗了,入参是全部都有,由已知的参数拼合一个字符串作为入参。
    那么我们看看这个函数的定义:

    把这个X函数抠出来就可以完美复原rp的值。

总结

到此为止,所有的参数都已经破解完毕,把各个参数放在对应的位置,按照流程模拟一遍就可以破解这个极验滑块流程。最后贴一张全流程的结果图。使用最后一个请求获取的"validate"就可以继续进行你的后续业务了。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务