某验三代滑块流程分析

news2024/9/21 14:31:28

一、请求流程

在这里插入图片描述

  • 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经过两次加密生成轨迹,定位函数进行导出
在这里插入图片描述

三、代码调用

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java开发】 Spring 08 :访问 Web 资源( 借助 RestTemplate 或 WebClient )

web 资源就是运行在服务器上的资源&#xff0c;比如放到 web 下的页面 js 文件、图片、css等&#xff0c;web资源分为静态web资源和动态web资源两类&#xff0c;接下来访问的就是动态资源&#xff08;页面返回的数据是动态的&#xff0c;由后端程序产生&#xff09;&#xff0…

Rust权威指南之编写自动化测试

一. 简述 虽然Rust的类型系统为我们提供了相当多的安全保障&#xff0c;但是还是不足以防止所有的错误。因此&#xff0c;Rust在语言层面内置了编写测试代码、执行自动化测试任务的功能。 测试是一门复杂的技术&#xff0c;本章覆盖关于如何编写优秀测试的每一个细节&#xf…

[LeetCode周赛复盘] 第 322 场周赛20221204

[LeetCode周赛复盘] 第 322 场周赛20221204 一、本周周赛总结二、 [Easy] 6253. 回环句1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6254. 划分技能点相等的团队1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6255. 两个城市间路径的最小分数1. 题目描述2. 思路分析3. 代…

细粒度图像分类论文研读-2017

文章目录Higher-order Integration of Hierarchical Convolutional Activations for Fine-grained Visual Categorization(by end-to-end feature encoding)AbstractIntroduction关于核关于多尺度Kernelized convolutional activationsMatching kernel and polynomial predicto…

秒懂数据结构之Map _ Set ,竟如此简单

Map、Set 文章目录 前言一、Map、Set的初步理解二、Map、Set的CURD方法的实现三、Map、Set的遍历总结前言 Set和Map天然就是高效搜索/查找的语义在这里我为什么将这两个集合分别列举比较呢&#xff1f;希望通过我的这篇博客可以增进大家对Map和Set的认识&#xff01;一、Map、…

[附源码]Python计算机毕业设计Django汽车美容店管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

计算卫星高度角、方位角

最小二乘定权、电离层对流层改正&#xff0c;都需要卫星的高度角、方位角。本章将介绍求解完卫星的地固坐标系的位置后&#xff0c;如何求解卫星的高度角、方位角。 卫星位置求解请参考之前的博客&#xff1a;卫星位置解算原理与程序设计 参考书籍&#xff1a;黄丁发&#xff0…

读<算法图解><笔记摘录>

从很多途径当中,看到过这本书的知识点,是一本很有趣的算法入门书籍,最近花费了几天的时间将其阅读完,总想着总结一下这本书的算法知识点,分享给大家,也让自己掌握地更加踏实一点. 算法:一组完成任何任务的指令 算法这玩意,在保证满足条件,并且不浪费内存的情况下,要尽可能速度…

18.定位元素练习-淘宝网

注意&#xff1a; 如果一个盒子定位元素属性既有left又有right,则会执行left属性。 既有top又有bottom&#xff0c;会执行top <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compa…

五子棋游戏AI智能算法设计

五子棋游戏C语言AI智能算法设计 近来发现编制五子棋游戏很有趣&#xff0c;尤其是AI智能算法很烧脑。网上介绍有什么贪心算法&#xff0c;剪枝算法&#xff0c;博弈树算法等等&#xff0c;不一而足。 对于人机对战的电脑智能应子算法&#xff0c;参阅很多五子棋书籍棋谱和五…

有序Map集合:LinkedHashMap和TreeMap该如何选用

文章目录前言一、为什么HashMap是无序的二、LinkedHashMap如何保证有序性三、TreeMap的底层原理四、LinkedHashMap和TreeMap比较总结前言 为什么HashMap是无序的&#xff1f;有序的Map集合有哪些&#xff1f;LinkedHashMap和TreeMap都是有序的Map集合&#xff0c;他们有什么区…

智能优化算法期末复习(更新ing)

目录 一、GA遗传算法 二、ACO蚁群算法 三、PSO粒子群算法 四、SA模拟退火算法 五、ABC人工蜂群算法 六、综合 一、GA遗传算法 1.运算流程 2.遗传算法适应值分配策略&#xff08;基于目标函数的直接分配、基于排名的分配&#xff09; 3.遗传算法在二进制问题&#xff08;如0…

Windows OpenGL ES 图像绿幕抠图

目录 一.OpenGL ES 图像绿幕抠图 1.原始图片2.效果演示 二.OpenGL ES 图像绿幕抠图源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础…

Java开发必须掌握的运维知识 (十)-- Docker集群自动化部署管理:Kubernetes快速入门

一、什么是Kubernetes Kubernetes(K8S)是Google在2014年发布的一个开源项目&#xff0c;用于自动化容器化应用程序的部署、扩展和管理。 Kubernetes通常结合docker容器工作&#xff0c;并且整合多个运行着docker容器的主机集群。 Kubernetes官网地址 二、Kubernetes相关特性 …

JavaWeb_第3章_HTTPTomcatServlet

JavaWeb_第3章_HTTP&Tomcat&Servlet 文章目录JavaWeb_第3章_HTTP&Tomcat&Servlet1&#xff0c;Web概述1.1 Web和JavaWeb的概念1.2 JavaWeb技术栈1.2.1 B/S架构1.2.2 静态资源1.2.3 动态资源1.2.4 数据库1.2.5 HTTP协议1.2.6 Web服务器1.3 Web核心课程安排2, HT…

vue中,页面布局之使用vue-splitpane实现窗格的拆分和调节,类似于flex布局

vue中&#xff0c;页面布局之使用vue-splitpane实现窗格的拆分和调节&#xff0c;类似于flex布局 1、基本介绍 npm地址&#xff1a;https://www.npmjs.com/package/vue-splitpane 安包 npm install vue-splitpane注册 main.js import splitPane from vue-splitpane // 注…

土豆清洗去皮机设计

目 录 摘 要 I Abstract II 1绪论 1 1.1选题背景及意义 1 1.2国内外研究现状 1 1.2.1国内外现状 2 1.2.2国外研究现状 2 1.3 发展趋势 3 1.4研究内容及方法 4 2毛刷式土豆清洗去皮机总体设计 5 2.1毛刷式土豆清洗去皮机的构造及工作原理 5 2.2 土豆擦皮机的相关计算 6 2.2.1设计…

动手学深度学习(1)—— 基础知识

文章目录一、基本概念1.1 关键组件数据模型目标函数优化算法1.2 各种机器学习问题监督学习无监督学习强化学习1.3 神经网络的特点二、预备知识2.1 数据操作入门运算符广播机制索引和切片节省内存转换为其他python 对象2.2 数据预处理读取数据集处理缺失的数据2.3 线性代数标量向…

WPS通过“文档部件”的“域”设置图、表和公式的自动序列号

写文档时&#xff0c;当有多张图片、多个表格和多个公式需要编号时&#xff0c;可以通过设置自动序列号&#xff0c;实现一定程度的自动编号和任意位置插入后随时更新序号。具体操作如下 ​ 1. 图的设置 在WPS中&#xff0c;首先设置好一张图片的格式后&#xff0c;对于需要设…

【并发】J.U.C线程池

线程池 经历了Java内存模型、JUC基础之AQS、CAS、Lock、并发工具类、并发容器、阻塞队列、atomic类后&#xff0c;我们开始JUC的最后一部分&#xff1a;线程池。 线程池的优势 为什么多线程会带来性能问题 多线程的性能问题&#xff0c;分为两类&#xff0c;一类是线程本身…