当前位置: 首页 > news >正文

某验三代滑块流程分析

一、请求流程

在这里插入图片描述

  • slide-float.html 首先请求了个HTML文本
  • jquery.js 拿回一个jQuery的js
  • gt.js 拿回gt.js 像是某验的网址信息
  • register-slide?t=1669432270469 一个请求、携带时间戳。返回challenge gt等信息
  • gettype.php 获取验证码类型 携带gt
  • fullpage.9.1.0.js 滑块js代码
  • get.php 返回一个数组 验证完成的提示语 提交了 gt challenge w(加密)

点击流程
在这里插入图片描述

  • ajax.php 参数与get.php一样
  • get.php 参数challenge gt type 返回图片(乱码)地址
  • 图片 请求原图乱码图片 和 遮罩图乱码图片 滑动图

拖动流程
在这里插入图片描述

  • ajax.php: 请求参数gt challenge w(包含环境校验 轨迹) 返回validate

二、图片还愿

在这里插入图片描述
两个canvas 一个为背景 一个为滑动条

可以看出图片为canvas画布 进行的位图操作。使用事件监听断点 在canvas创建的时候进行断点
在这里插入图片描述
在这里插入图片描述
n r 为图片的宽度和高度

平坦流
不改变代码原执行流程 但是改变了源代码书写的流程

for ...
	switch...
	case...
	...

断点方式:case处下断, 在switch处下断, 点击单步运行。

2.2、 js分析

在这里插入图片描述
刷新canvas处断点,猜测进行还原图片的代码。在case中打断点进行跟踪

在这里插入图片描述
在向下走, 走到还原图片逻辑代码

在这里插入图片描述

s[$_CJFA(81)](l, _ % 26 * 10, 25 < _ ? a : 0);
将滑块底图分为52个小图片, 上下各一个。为26列
但是生成图片时, 模除26 * 10 可知每次都会丢弃两个像素。

2.3、Python还原代码

from PIL import Image


def tp_huanyuan():
    img_ = Image.open("bg1.png")
    # 图片还原列表
    ut = [39, 38, 48, 49, 41, 40, 46, 47, 35, 34, 50, 51, 33, 32, 28, 29, 27, 26, 36, 37, 31, 30, 44, 45, 43, 42, 12,
          13, 23, 22, 14, 15, 21, 20, 8, 9, 25, 24, 6, 7, 3, 2, 0, 1, 11, 10, 4, 5, 19, 18, 16, 17]

    w_seq, h_seq = 10, 80

    new_img = Image.new('RGB', (260, 160))

    for idx in range(len(ut)):
        x = ut[idx] % 26 * 12 + 1
        y = h_seq if 25 < ut[idx] else 0

        img_cut = img_.crop((x, y, x + w_seq, y + h_seq))

        new_x = idx % 26 * 10

        new_y = h_seq if idx > 25 else 0

        new_img.paste(img_cut, (new_x, new_y))
    # save_path = img_
    new_img.save("hy_bg.jpg")


if __name__ == '__main__':
    tp_huanyuan()

二、 w值定位

2.1、w值生成位置

在这里插入图片描述
选择堆栈进入, 打上断点。再次请求

在这里插入图片描述
做一些拼接的操作, 没发现有用的信息,继续向上跟栈
在这里插入图片描述
看下该方法的头部(没有智能提示的地方就是头部),发现s内容有需要的值

注意作用域,该作用域下不能出现 var s= 或s= 如果这样的话s值将会改变, 此处传过来s下面对s又没有任何改变,所以可以继续向上跟

在该代码 var … 出打断点,这样可以直接知道, 谁调的该方法。(平坦流的技巧)

最终,可定位到w的位置
在这里插入图片描述

三、w值生成

以下为定位到所使用的方法
 var u = r[$_CAIAt(754)]()
, l = V[$_CAIAt(353)](gt[$_CAIAt(218)](o), r[$_CAIAt(756)]())
, h = m[$_CAIAt(782)](l)
, f = {
"\u0067\u0074": i[$_CAIAt(104)],
"\u0063\u0068\u0061\u006c\u006c\u0065\u006e\u0067\u0065": i[$_CAHJd(182)],
"\u006c\u0061\u006e\u0067": o[$_CAIAt(116)],
"\u0024\u005f\u0042\u0043\u0077": r[$_CAHJd(665)],
"\u0063\u006c\u0069\u0065\u006e\u0074\u005f\u0074\u0079\u0070\u0065": r[$_CAIAt(667)],
"\u0077": h + u
};

在u处打上断点,进入方法体
在这里插入图片描述
在这里插入图片描述

发现256 !== e 很奇怪
ASCII0-255  模值

跟值技巧

从头看: 优点不需要重复下断。 缺点混淆严重的话需要记住太多变量。
从尾看: 优点对最后返回的值有一个很清晰的了解跟值比较轻松。缺点可能值已经不正确,只能再次下断点,刷新页面。

断点位置: 初始值位置、循环的位置、返回的位置、函数的开头、函数的结尾。

在这里插入图片描述

遇到setPublic大概率是RSA加密

发现this[$_CBFJo(756)]为一个方法,传入e(undefind),跟进去该方法

在这里插入图片描述
返回Ot,Ot=rt() 每次rt()运行生成的字符串都不一样,进入rt方法查看
在这里插入图片描述
值为四个t()相加

跟进new U()[$_CBGAZ(353)]查看加密方式,在头部和所以return打上断点
在这里插入图片描述
把整体的js保存下来, 发现为自执行函数,直接在浏览器中运行没有报错。 怎么能拿到 new U()?
在这里插入图片描述

将对象U导出,并写一个计算u值方法

在这里插入图片描述

分析
l = V[$_CAIAt(353)](gt[$_CAIAt(218)](o), r[$_CAIAt(756)]())
h = m[$_CAIAt(782)](l)

w=h+u

进入V[$_CAIAt(353)],将V对象下的$_CAIAt(353)导出,也就是encrypt
在这里插入图片描述
在这里插入图片描述
加密中o值获取
在这里插入图片描述
生成位置, 将Unicode转为正常编码,发现下列参数。

var o = {
    "lang": i["lang"] || "zh-cn",
    "userresponse": H(t, i["challenge"]),
    "passtime": n,
    "imgload": r["$_CAGw"],
    "aa": e,
    "ep": r["$_CCCG"]()
};
lang="zh-cn" //写死即可
userresponse //t为滑动距离  i["challenge"]为返回的challenge 一般是34位
passtime // 过掉的时间 为第二次轨迹列表x,y,z 每一项最后值z的相加
imgload  // 默认来个值 100-500
aa  // 轨迹  重点
ep  // 不校验  给个{}也行

调用处
在这里插入图片描述
在这里插入图片描述

l经过两次加密生成轨迹,定位函数进行导出
在这里插入图片描述

三、代码调用

在这里插入图片描述
轨迹和识别都是找的大佬的,总体顺利

相关文章:

  • JMeter入门教程(14)——场景设计
  • C#学习记录——在C#中操作注册表
  • 【cocos源码学习】模板示例工程的目录说明
  • UE5 中 LiveLink 的开发全流程教程
  • 力扣(LeetCode)134. 加油站(C++)
  • 学习 MySQL:什么是分页
  • DPD(Digital Pre-Distortion,数字预失真)
  • JAVA毕业设计课程与成绩管理计算机源码+lw文档+系统+调试部署+数据库
  • 分面中添加直线
  • [LeetCode 1774]最接近目标价格的甜点成本
  • 计算卫星高度角、方位角
  • Maven
  • HCIA笔记(2)
  • 【Java难点攻克】「海量数据计算系列」如何使用BitMap在海量数据中对相应的进行去重、查找和排序实战
  • InterlockedCompareExchangePointer 的作用和例子
  • PHP代码审计系列(一)
  • Seata概述基础
  • 第二证券|行业重磅白皮书发布,超高清视频产业规模剑指3万亿
  • 划分成绩ABCD
  • 第二期 微信云开发之位置信息获取(wx.getLocation)
  • PHP 杂项 函数
  • Mybatis持久层框架 | CRUD
  • 内网渗透(八)之基础知识-企业域中计算机分类和专业名
  • Keras深度学习实战——使用深度Q学习进行SpaceInvaders游戏
  • 周赛331总结
  • SSM整合知识点记录
  • 设计模式-模板方法模式
  • MySQL数据库01——mysql的安装和配置(包含workbench安装,超详细)
  • 2/4考试总结
  • Ta-Lib源码解析(三):蜡烛图指标 (Candlestick Indicator) #(附Python重构代码和示意图)(补充中)
  • 预计2023国家专项计划录取分数线是多少
  • 2021年浙江工商大学杭州商学院学费是多少 各专业收费标准
  • 神经科学专业课程有哪些
  • 2023软件工程专业课程有哪些 就业方向是什么
  • 现在进行时结构是什么 怎么构成的
  • 2023年甘肃高考522分能报什么大学 522分能上哪些院校
  • awaiting和waiting的区别
  • 2021年复读生能报考军校吗?
  • 2023浙江音乐学院各省艺术类专业录取分数线是多少
  • 高三自我调整心态的句子 高三怎么自我调整