当前位置:   article > 正文

网易滑块验证码加密参数分析及滑块轨迹算法data是怎么生成的

滑块轨迹算法

网易滑块验证码加密参数分析及滑块轨迹算法data是怎么生成的
在这里插入图片描述
如图所示,再登录之前,需要先破解它的滑块,拿到它的关键参数

1. 抓包

首先打开抓包工具或者f12控制台,然后手动滑动,观察请求包的信息。
在这里插入图片描述
我们发现这是个get请求,下面具体看下它的请求参数
在这里插入图片描述
其中响应里的validate就是我们后面处理登录,需要用到的参数。只有滑动成功,才会返回值。
我们看下请求参数中,其中大多数参数可以固定不变。只有4个参数需要我们破解。分别是id,token,acToken,data,cb。
通过多次滑动抓包,发现其中id参数也是固定值。token参数可以在请求滑块图片的时候找到。
在这里插入图片描述
接下来需要破解acToken。全局搜索acToken关键字
在这里插入图片描述
发现再其中有5处地方出现过。这里比较少,如果不确定是哪个位置的话,就再全部的位置打上断点,看它最终会停在哪里。

这里我直接通过静态分析,发现这边是个check接口,跟验证码的接口一致,我们断点直接打在这里。
在这里插入图片描述
通过动态调试,断点来到这里,继续分析
在这里插入图片描述
发现t.acToken在这里已经生成,并且这个t是通过参数传递过来的。这个时候我们应该追溯它的调用栈,看它原始生成的地方。
在这里插入图片描述
调用栈追到这里,发现已经追不动了,没有更详细的调用栈了,我们先断点打在这里,再追一下
在这里插入图片描述
发现这里断点处,acToken的值已经生成。右侧已经有了更详细的调用栈,我们继续向下追。
在这里插入图片描述
追到这里,再向下追,就看不到acToken的值了。我们再这一处的下一个调用栈的地方,下断点。
在这里插入图片描述
这里发现调用较复杂,不方便观察其中的值和结果。我们使用抓包工具替换掉原js文件,使用自己本地美化后的js继续调试。然后断点下在附近。
在这里插入图片描述
注释部分是原代码,下面是美化后的代码。发现在这里,tmp的值已经生成。是通过Xb这里方法生成的。
继续看Xb里面的方法是怎么生成的。
在这里插入图片描述
可以看到最后调用了Ea方法,去生成我们的acToken。待加密对象中的r,d,b三个值我们都可以找到它的来源。下面我们就导出Ea这个函数,看下本地js生成的值是否跟它生成的一致。
下面是导出内部函数的小技巧。
首先在全局定义一个变量。随意就好。
在这里插入图片描述
然后找到我们要导出的函数,比如说这里我们要导出Ea这个函数。那么我们首先找到Ea函数定义的地方,用这个全局变量指向Ea。那么我们就可以在函数外部去调用这个Ea方法。
在这里插入图片描述
接下来使用node,调用getEa这个方法,把参数带进去调试。
在这里插入图片描述
这里发现我们生成的值与网页生成的值是一致的。
到这里acToken的参数加密我们解决了,现在需要的就是找到刚才加密对象中d的值和b的值。 d的值在这里生成的。
在这里插入图片描述
b的值是传递进来的。在Xb函数附近,通过Wb函数生成的。
在这里插入图片描述
这里就不讲b和d的生成过程啦。调试技巧和刚才的一样,耐心一点,就能整出来。
同样,接口参数中cb的值也可以通过这种方式整出来。思路和获取acToken的值一样,比acToken的生成方式要简单一些。
在这里插入图片描述
我们要先检验一下自己生成的cb值和acToken能不能用。
检验方式有两种。
一种是通过抓包工具hook,把它要发的包拦截住,替换成我们自己本地修改的值。
第二种方式是在chrome断点调试中,修改它参数赋值的地方,改为我们自己生成的值。

这两个参数解决了,后面就只剩下data这个参数了。
在这里插入图片描述
data参数是一个json。其中又有3个加密参数等待我们解密。
这个放到下一篇再说。
总结一下本篇文章用到的小技巧。

  1. 语法比较复杂的js,可以配合抓包工具替换成本地的js,在本地js中,修改成清晰便于调试的js语法
  2. 內部函数导出。定义一个全局变量,然后内部函数指向全局变量,是这个函数在外部也可以调用。
  3. 检查调试结果。hook正常的发包请求,修改成我们自己生成的值,便于判断我们自己生成的值是否正确。

 

下面主要分析网易的滑块轨迹算法。也就是data是怎么生成的
在这里插入图片描述

我们全局搜索data,出现的地方很太多。我这里是直接搜m:""
在这里插入图片描述
其中只涉及到3个js文件.这里我们优先选择带版本号的js文件,可以看到这个版本号跟验证滑块接口中的版本号是一致的。
在这里插入图片描述
点进去直接继续搜索
在这里插入图片描述
整个js中就只有这一处。我们直接断点打在data身上。其中的d是滑块轨迹,p和ext分别是两个加密参数。
这里先分析d的值。
p函数加密n.join(":")的值就是滑块轨迹。 n应该是一个数组。n的生成位置在这里
在这里插入图片描述
其中this.traceData就是我们鼠标滑动的所产生的轨迹信息,其中的值是被加密了的。 u的值是50.
在这里插入图片描述
经过a.sample函数处理完,只剩下50个轨迹信息。
在这里插入图片描述
接下来分析this.traceData中的这些加密信息的含义。
搜索this.traceData我们可以看到大概就是这个位置。
在这里插入图片描述
可以看到跟滑块的x和y的坐标还有时间有关。最终用f函数做了一下加密处理。
我们这里不方便直接断点。因为,在此处断点,每动一下鼠标都要debug。我们要观察其中的值的变化规律的话,比较适合用console.log输出再控制台观看。
这里继续使用抓包工具替换js的形式,来方便我们打印输出。
在这里插入图片描述
控制台输出的值
在这里插入图片描述
可以很清除的看到我们滑动的轨迹信息。
第一个是横坐标的拖动距离,第二个是纵坐标上下浮动的距离,第三个是当前滑动的时间-开始滑动的时间。
下面讲一下轨迹生成的思路。这里我们只需要生成50个轨迹信息就行。

  1. 获取滑块缺口位置。
  2. 由于网易只取50个滑块轨迹特征,所以我们把缺口位置/50 得出每步滑动多少距离。然后真正取值的时候取个随机值。 实际距离=random(上一次的计划距离,本次的计划距离)。 比如说现在缺口位置是 100,100/50=2,那每份滑块的增量就是2。第一次的轨迹可以设置一个固定值,比如说0。那第二次轨迹的横坐标就可以设置成random(2,4),第三次的轨迹就是random(4,6),依此类推,即可得到整个滑块轨迹的横坐标
  3. 纵坐标的值浮动不要太大,可以给定一个较小的随机区间。例如1-3
  4. 给一个滑动计划所需的总耗时,再除以50,得出每份轨迹所花时间,可以适当随机加减一些值。可以参考横坐标的生成方式。实际耗时=random(上一次的计划耗时,本次的计划耗时)。比如说,我计划耗时是time = random(3000,4000),这里假设刚好time=3000,那么计划每次所需时间就是3000/50=60毫秒,第一次轨迹的所需时间建议给个较小固定值,10毫秒以内。第二次的实际时间是random(60,120),第三次的实际时间是random(120,180),依此类推。

这里我们得到整个轨迹以后,把每步的轨迹用f函数进行加密。f函数的抽取过程可看前文,后面还有一些加密均可使用上述方式进行抽取,最后执行使用node或者js2py等工具即可。
最后贴一下最后结果。
在这里插入图片描述
注意点:

  1. 完成一个参数的加密还原,尽量使用控制变量法,去测试一下。不然会把你搞的怀疑人生。
  2. 图片识别的原始像素是 320x160,识别出来的缺口位置也是基于这个像素的。但是在网页上有缩放,整个宽是220px. 所以识别出来的缺口位置需要等比例缩小。
  3. 如果使用截图工具量缺口位置的话,请保持电脑的缩放比例为100%,不然量的不准确。

滑块缺口识别原理:https://mp.weixin.qq.com/s/xCnSupqdjzmnIM0GklEk_w
滑块缺口识别代码:https://github.com/crazyxw/SlideCrack

易盾滑块、点选升级很快,有需要可加Q2737499951私聊。

博客地址:https://blog.csdn.net/qq_41895190

QQ群:608591811(csdn)

易盾最新滑块、点字、无感知本地GPU识别库、鼠标轨迹js算法;极验3最新滑块、点字、无感知GPU识别库、识别轨迹js算法;腾讯QQ最新滑块、点字、登录识别库、本地GPU识别库、鼠标轨迹js算法;阿里最新滑块、点字、本地GPU识别库、鼠标轨迹js算法;百度2汉字、4汉字、贴吧九宫格、莱茨狗动态验证码本地识别库;有各种需要都可以

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/521805
推荐阅读
相关标签
  

闽ICP备14008679号