快手滑块轨迹分析

本文详细描述了一种通过JavaScript分析滑块验证过程中的轨迹数据,着重于变异点的检测,包括轨迹计算、异常判断和不同条件下的变异规律。作者还提供了验证实验结果,展示了优化轨迹算法的潜力。
摘要由CSDN通过智能技术生成

目录

本文仅学习参考,如有涉及侵权联系本人删除

如果有任何问题,欢迎交流指导

文章仅记录我分析轨迹的过程

一、确定目标

二、分析过程

1.轨迹分析

2.变异点的分析(A)

3.变异点的分析(B)

三、验证


本文仅学习参考,如有涉及侵权联系本人删除

如果有任何问题,欢迎交流指导

文章仅记录我分析轨迹的过程

目标网址:aHR0cHM6Ly9saXZlLmt1YWlzaG91LmNvbS8=

一、确定目标

通过verifyParam快速定位到加密后的位置,然后看上一层作用域,能拿到加密前的轨迹文本

把轨迹的字符串取出,简单分析之后,可以判断轨迹包含x、y、time信息,每一组轨迹用“,”进行分割。稍微处理下,我们拿出x、time进行画图,从图中我们更能直观的观察轨迹变化。

可以发现,在这个正常的轨迹中,有几个轨迹点发生了变异,不正常的凸起。这也就是本文需要分析的点。

二、分析过程

1.轨迹分析

为了探究这几个点为什么发生了变异,就需要找到记录轨迹点的位置。

观察堆栈,发现三个有特殊含义的函数,dragEndCb、slideEnd、verifyCaptcha,分别进行下断点

刷新页面,再次拖动滑块,可以看到变量r就是轨迹数组,并且有几个轨迹点是异常的

并且在该断点的堆栈前两层还在while循环中,也分别打上日志点,如图所示

在该断点的上方,还出现了“dragStartCb”、“dragMoveCb”,也打上日志点

再次刷新页面,滑动滑块。通过分析日志,发现在第索引为3的函数中,传入了MouseEvent事件,随后开始了计算和取值

于是,在索引为3的时候,进行debugger,尝试单步调试,跟踪代码运行逻辑

在之后的单步调试中,发现了在大量while循环中,每次执行的结果都有push操作

并且push方法是自己实现的一个函数,在push方法中打上日志点

再次刷新页面拖动滑块,此时结合轨迹和日志点进行分析,清晰明了

通过下面这一段日志,进行猜测分析和对比,可以得出以下结论:

  1. 取出clientX的值,与第一个轨迹点的clientX进行相减

  2. 拿相减之后的结果除固定值276得到一个小数

  3. 拿小数乘1000,并拿到他的整数部分即为最终的x的值

同理,通过以下日志也可以分析出y值的计算方式:

        取出clientY的值,减去固定值282.25,再取整数部分

2.变异点的分析(A)

正常的轨迹点的计算方式找到了,下一步就是找为什么有的轨迹点会发生变异。根据/rest/zt/captcha/sliding/config返回的信息,可以分为两种情况讨论,本小点针对返回值中存在q值进行分析。

快速在日志中定位到变异点的位置

为了方便观察,我这里截取了索引为29的轨迹点、索引30的变异点的日志。对比发现,变异的轨迹点也是正常执行了上方的计算,随后进行了某个判断,当判断值为true的时候,会进行额外的操作,也就是产生了文章所说的变异点。

细心的可以发现,这个true猜测应该是轨迹长度+1**之后与31进行了判断,当轨迹长度+1等于31之后,就会发生变异,同时回过头看/rest/zt/captcha/sliding/config这个接口返回的信息中,也有个a的值为30,在经过运算过得到了31。也就是轨迹长度等于a+1的时候为第一个变异点(这个a+1仅是多次测试的结论,没有实际进行跟栈观察)

变异前的轨迹点为:[456, 13, 1708242093525]

变异后的轨迹点为:[1009, 147, 1708242093525]

继续分析true之后的日志,也能通过猜测得出结论:

1009 = 456 * sx + ix

147 = 13 * sy + iy

sx、sy、ix、iy都是接口返回,如下图所示(1092截图的时候打错了,应为1009)

继续观察后续日志,(由于时间关系,此次日志与上文日志非同一份),分析后续变异点的规律。

其中2.258983396379993、30都是接口返回,分别为qa,根据日志也可以猜测得出下个点的计算方式为:

Math.floor(Math.pow(q, 变异次数) + a)

3.变异点的分析(B)

本小点针对返回值中存在d值进行分析。

当接口返回数据存在d值,要简单很多。

通过观察轨迹,就能发现,当轨迹长度等于a值,发生第一次变异,之后每间隔d值发生变异,如下图所示,分别在轨迹长度12、25(12+13)、38(25+13)发生了变异,变异值的计算方式与上文相同。

三、验证

针对轨迹这一块,是由算法生成的,优化下轨迹算法表现可能会更好。在本次测试中,分别进行了200次、500次、1000次测试,测试环境为不同IP、环境指纹相同的情况下连续进行,仅统计验证通过和因轨迹失败的结果,忽略缺口识别错误导致的失败,结果如下:

统计次数通过率
20099.5%
50098.2%
100093.8%

有兴趣可以在这个接口测试,verifyParam会过期,记得传递实时的参数API,仅供学习交流使用,禁止用于商业用途、违法用途等,否则后果自负 - Swagger UI

  • 31
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值