虎ya登录滑块(3-6,js逆向)

2024-02-18 17:10
文章标签 登录 js 逆向 滑块 ya

本文主要是介绍虎ya登录滑块(3-6,js逆向),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网站地址:aHR0cHM6Ly93d3cuaHV5YS5jb20v

一、整体流程分析

1、访问df/token链接拿到encryptWebDeviceFeature加密相关的encryptSeed、token
2、访问df/collect链接拿到sdid
3、访问v2/smsCode链接拿到滑块链接(slide_url,另一个窗口)
4、访问3中返回的slide_url
5、访问safe_auth/pt_auth链接
6、访问metric.huya.com链接
7、访问client/config3链接,拿到滑块的相关数据(gurl、vurl...)
8、访问gurl链接拿到滑块底图以及huyapk、segment
9、访问vurl链接,验证滑块是否通过

二、根据流程逐个链接分析
1、df/token链接,无加密参数,正常请求即可

2、df/collec链接,加密参数为encryptWebDeviceFeature,加密方式为AES(ECB模式,key为上一步返回的encryptSeed),加密位置如下:
在这里插入图片描述

3、v2/smsCode链接,这里的context和behavior是我不确定的一个点,目前我也不知道他是否检测了,反正我写死滑块也能过,所以就不纠结了。携带的sdid是上一步返回的,requestId的生成方式如下,其他的固定就好

function guid() {var e = 1;var t = new Date;return e && 1 == e ? Date.UTC(t.getFullYear(), t.getMonth(), t.getDate(), t.getHours(), t.getMinutes(), t.getSeconds(), t.getMilliseconds()) - Date.UTC(t.getFullYear(), t.getMonth(), t.getDate(), 0, 0, 0, 0) : e && 2 == e ? Date.UTC(t.getFullYear(), t.getMonth(), t.getDate(), t.getHours(), t.getMinutes(), t.getSeconds(), t.getMilliseconds()) : "xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g, function(e) {var t = 16 * Math.random() | 0, o = "x" == e ? t : 3 & t | 8;return o.toString(16)})
}

4、slide_url链接,返回的slide_url地址中有个param参数,需要用正则匹配下来,后面会用到

5、safe_auth/pt_auth链接,无加密,正常请求即可

6、metric.huya.com链接,有个data加密,加密位置如下:
在这里插入图片描述
这里校验了一些环境值,很多写死即可,改下sguid和its就可以了,这里涉及到两个加密的函数(toXCodeArray和xEncode),都很好扣,跟进去就行

7、client/config3链接,这里要把page改为上面所返回的slide_url,param改为步骤4中的param,然后其他参数我都固定了。这个链接返回了
请求滑块网址(gurl)、请求验证网址(vurl)、一段后面加密会用到的js,反正一大堆 稍微注意一下就行
在这里插入图片描述

8、访问gurl链接,拿到背景图(base64)、code、huyapk、segment,背景图是乱序的,还原的数组为segment,这里是先通过一些算法由segment生成一个15位的数组,代码如下:

//这里放之前返回的js
var e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
atob1 = function(a) {var n = String(a).replace(/[=]+$/, "");if (n.length % 4 == 1)throw new t("'atob' failed: The string to be decoded is not correctly encoded.");for (var r, i, o = 0, s = 0, c = ""; i = n.charAt(s++); ~i && (r = o % 4 ? 64 * r + i : i,o++ % 4) && (c += String.fromCharCode(255 & r >> (-2 * o & 6))))i = e.indexOf(i);return c
}console.log(JSON.parse(atob1(window.UdbCipher.decrypt(segment, huyapk))).ord)

拿到真正的还原数组后,接下里就很好办了
在这里插入图片描述
9、vurl链接,这里唯一需要变的是act参数,其他的我都写死了,我总感觉写死不太好,但由于没业务需求,就没深究了,能过就行哈哈。act参数就是encodeURI一下,然后 btoa,最后经过一下之前返回的js里面的一个函数加密就出来了,比较简单 就不跟进去分析了。(不校验轨迹,固定即可

三、请求验证
在这里插入图片描述
总结:这个滑块总体而言较为简单,就是流程特别多,所以耐心点就好哈哈
溜了溜了,拜拜!

这篇关于虎ya登录滑块(3-6,js逆向)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/721852

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

js react 笔记 2

起因, 目的: 记录一些 js, react, css 1. 生成一个随机的 uuid // 需要先安装 crypto 模块const { randomUUID } = require('crypto');const uuid = randomUUID();console.log(uuid); // 输出类似 '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图