某顶象滑块验证码

发布于:2024-05-22 ⋅ 阅读:(122) ⋅ 点赞:(0)

⚠️前言⚠️

本文仅用于学术交流。
学习探讨逆向知识,欢迎私信共享学习心得。
如有侵权,联系博主删除。
请勿商用,否则后果自负。

网址

  • aHR0cHM6Ly93d3cuZGluZ3hpYW5nLWluYy5jb20vYnVzaW5lc3MvY2FwdGNoYQ==

1. 参数分析

1_1. 验证码信息下发接口参数 - /api/a

在这里插入图片描述

1_2. 验证接口参数 - /api/v1

在这里插入图片描述

1_3. 验证成功返回信息 - /api/v1

在这里插入图片描述

2. c1 接口 - Param

  • 说明: 该接口返回参数 c,目前我是固定的,但是对于一些定制化的验证码,可能会校验,这里简单说一下
    在这里插入图片描述
2_1. Param 生成位置,ajax断点,调试堆栈
  • 1
    在这里插入图片描述
  • 2
    在这里插入图片描述
2_2. 参数appKey可固定,lid 其实存在于localStorage中

在这里插入图片描述

2_3. 直接hook调试 _dx_uzZo5y 生成的位置,注意参数在外部函数时需要将断点断在外部函数,重新调试
  • 1
    在这里插入图片描述
  • 2
    在这里插入图片描述
  • 3
    在这里插入图片描述
  • 4
    在这里插入图片描述
  • 5
    在这里插入图片描述
2_4. 两处生成位置和方法找到之后,直接全局导出,补环境即可

在这里插入图片描述

3. 底图还原

3_1. 先来看一下原生的底图,长这样

在这里插入图片描述

3_2. 老规矩,我们使用canvas事件监听断点来调试一下,刷新验证码
  • 断点会断在这个位置,这就很明了了,drawImage方法就是canvas用来绘制图片的方法
    在这里插入图片描述
  • 这里应该就是底图的还原位置了,而参数 t 就是图片的还原顺序
  • 多次刷新验证码,发现 t 一直在变化,所以我们需要看一下这个序列 t 是怎么生成的
    在这里插入图片描述
3_3 底图还原序列 t 的生成
  • 形参 t 是由实参 E 传递过来的,上翻一下就能找到 E 的生成位置
    在这里插入图片描述
  • 此处的 n 对象中的 ranges 属性就是我们需要的序列值
    在这里插入图片描述
  • 调试堆栈,最终会找到这个位置
    在这里插入图片描述
  • Pn就是最终生成的方法,而参数就是底图链接的 id 值
    在这里插入图片描述
  • 这里的js代码还是很简单的,是扣js还是算法还原大家随意,下面说一下需要注意的地方
1. 底图大小是 400x200
2. 上述底图还原序列的长度是 32,而且js在还原底图时,这32份是等分的,大小是 12x200
3. 最后一块需要单独处理,大小是 16x200

在这里插入图片描述

  • 最终还原结果
    在这里插入图片描述

4. ac 生成

4_1. ac生成位置
  • ac 生成的全部流程存在于 js 文件 greenseer.js 中,该文件每天的上午10点和下午7点, 因此需要动态获取
    在这里插入图片描述
    在这里插入图片描述
4_2. ac 初始化位置
  • greenseer.js - webpack 代码加载器,并且执行了3号模块,跟一下就会发现其初始化的位置
    在这里插入图片描述
    在这里插入图片描述
  • 不难发现其初始化的方法其实就存在于 window._dx.UA 中, 而参数n其实就是接口信息中返回的 sid 值
    在这里插入图片描述
    在这里插入图片描述
4_3. ac生成 - 轨迹,日志断点, 最终的 dx 值就是滑块的滑动距离

在这里插入图片描述
在这里插入图片描述

4_4. ac 生成 - sendTemp
  • 下一个需要注意的就是这个位置了
  • xn 是缺口距离底图边框的距离,不是滑块滑动的距离【也就是说滑块初始状态距离边框是 20】
  • kn 就是验证码信息接口返回的 y 值
    在这里插入图片描述
4_5. ac生成 - 基本流程总结,补环境出值
  • window._dx.UA.init 初始化
  • 滑动调用recordSA, 对轨迹进行加密
  • sendSA, sendTemp 生成 ua
    在这里插入图片描述

结果展示

在这里插入图片描述

在这里插入图片描述

欢迎私信交流学习。。。下班下班。。。