网易滑块协议分析(二)

这篇文章主要分析网易的滑块轨迹算法。也就是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

声明: 此分析过程仅供学习使用,切勿用于非法用途。

你可能感兴趣的:(验证码)