qq音乐sign逆向

news2024/11/15 22:21:37

qq音乐sign参数逆向


1.概览

image-20240529110411618

参数sign长度40

多次调试发现,前缀zzb不变

2.打日志

跟站发现是vpm,在apply调用打上日志断点:

image-20240529110644850

连蒙带猜知道,最终字符串四部分构成,zzb 24DC2798 HI0TvE4tOMqzN4w88oZCjQ EE0A88FE

1.把请求的body参数直接MD5得到c8a043f88d8e9b012eeb72673ec92a8b
2.利用固定数组[21, 4, 9, 26, 16, 20, 27, 30]和上面结果,使用charat得到字符串:
		24DC2798
		EE0A88FE
3.中间的HI0TvE4tOMqzN4w88oZCjQ,我们分析这个

HI0TvE4tOMqzN4w88oZCjQ来源:

把vmp的栈打印,在位运算的地方打上日志点:

发现两个固定东西:

    let fmap = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,"A":10,"B":11,"C":12,"D":13,"E":14,"F":15}
    let arr  = [212,45,80,68,195,163,163,203,157,220,254,91,204,79,104,6];

需要参与运算,运算日志如下:

E1EFCB705902FAD5BFD7F8C3CA904EF0   ->data的md5值
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:54 '-' 38 '=>' 16
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 14 '*' 16 '=>' 224
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 0 '*' 2 '=>' 0
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 0 '+' 1 '=>' 1
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 224 '+' 1 '=>' 225
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 225 '^' 212 '=>' 53
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 this-> [] args-> [53]

vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 0 '+' 1 '=>' 1
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 0 '|' 0 '=>' 0
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 19 '-' 3 '=>' 16
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 1 '*' 2 '=>' 2

vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 54 '-' 38 '=>' 16
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 14 '*' 16 '=>' 224
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 1 '*' 2 '=>' 2
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 2 '+' 1 '=>' 3
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 224 '+' 15 '=>' 239
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 239 '^' 45 '=>' 194
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 this-> [53] args-> [194]

vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 1 '+' 1 '=>' 2
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 0 '|' 1 '=>' 1
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 19 '-' 3 '=>' 16
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 2 '*' 2 '=>' 4

vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 54 '-' 38 '=>' 16
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 12 '*' 16 '=>' 192
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 2 '*' 2 '=>' 4
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 4 '+' 1 '=>' 5
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 192 '+' 11 '=>' 203
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 203 '^' 80 '=>' 155
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 this-> (2) [53, 194] args-> [155]
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 2 '+' 1 '=>' 3
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 0 '|' 2 '=>' 2
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 19 '-' 3 '=>' 16
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 3 '*' 2 '=>' 6

vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 54 '-' 38 '=>' 16
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 7 '*' 16 '=>' 112
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 3 '*' 2 '=>' 6
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 6 '+' 1 '=>' 7
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 112 '+' 0 '=>' 112
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 112 '^' 68 '=>' 52
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 this-> (3) [53, 194, 155] args-> [52]

可以发现,

第0组:

vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:14 '*' 16 '=>' 224
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 0 '*' 2 '=>' 0
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 0 '+' 1 '=>' 1
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 224 '+' 1 '=>' 225
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 225 '^' 212 '=>' 53

我们记let md5v = E1EFCB705902FAD5BFD7F8C3CA904EF0

16是每组都一样的固定值:

14是fmap[md5v[0]]

1是fmap[md5v[0+1]]

212是arr[0]


第1组:

vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 54 '-' 38 '=>' 16
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 14 '*' 16 '=>' 224
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 1 '*' 2 '=>' 2
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 2 '+' 1 '=>' 3
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 224 '+' 15 '=>' 239
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 239 '^' 45 '=>' 194
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 this-> [53] args-> [194]

我们记let md5v = E1EFCB705902FAD5BFD7F8C3CA904EF0

16是每组都一样的固定值:

14是fmap[md5v[2]]

15是fmap[md5v[2+1]]

45是arr[1]


第2组:

vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 54 '-' 38 '=>' 16
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 12 '*' 16 '=>' 192
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 2 '*' 2 '=>' 4
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 4 '+' 1 '=>' 5
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 192 '+' 11 '=>' 203
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 203 '^' 80 '=>' 155
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 this-> (2) [53, 194] args-> [155]

我们记let md5v = E1EFCB705902FAD5BFD7F8C3CA904EF0

16是每组都一样的固定值:

12是fmap[md5v[4]]

11是fmap[md5v[4+1]]

80是arr[2]


第3组:

vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 7 '*' 16 '=>' 112
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 3 '*' 2 '=>' 6
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 6 '+' 1 '=>' 7
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 112 '+' 0 '=>' 112
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 112 '^' 68 '=>' 52
vendor.chunk.b71d8ba4d37617cb2e8d.js?max_age=2592000:1 this-> (3) [53, 194, 155] args-> [52]

我们记let md5v = E1EFCB705902FAD5BFD7F8C3CA904EF0

16是每组都一样的固定值:

7是fmap[md5v[6]]

0是fmap[md5v[6+1]]

68是arr[3]


那么,第i组:

(fmap[md5v[i*2]] * 16 + fmap[md5v[i*2+1]]) ^ arr[i]

js代码为:

function get_arr_16(str32){
    let ans = [];
    let fmap = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,"A":10,"B":11,"C":12,"D":13,"E":14,"F":15}
    let arr  = [212,45,80,68,195,163,163,203,157,220,254,91,204,79,104,6];
    for (let i = 0; i < 16; i++) {
        ans.push((fmap[str32[i*2]]*16 + fmap[str32[i*2+1]])^arr[i])
    }
    console.log(ans)
    return ans;
}

综上所有逻辑结束。

3.验证:

image-20240529114622246

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

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

相关文章

云平台教程 | 手把手教你GSEA富集分析和解读

爱基百客云平台小工具使用 1.1 爱基百客云平台之GSEA分析 1.2 GSEA富集分析原理图 1.3 GSEA富集分析过程 1.4 参数设置 1.5 任务查看 1.6 结果 1.6.1 富集结果表格 1.6.2 富集可视化图解读 01 爱基百客云平台小工具使用 首先&#xff0c;打开爱基百客官网&#xff1a;http://w…

Linux系统下安装配置nginx,本地访问服务器nginx

一、先安装依赖包 yum install -y gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel 二、官网下载Nginx压缩包 官网地址&#xff1a;nginx: download 三、安装Nginx 1.这里我们下载稳定版本即可&#xff0c;在命令行输入以下命令&#xff0c;会在当前目录下生成…

智源与HuggingFace联合推出开放中文大语言模型榜单 - 旗鉴榜

近日&#xff0c;智源研究院与 Hugging Face 开发者社区合作&#xff0c;发布 Open Chinese LLM Leaderboard&#xff0c;旨在跟踪、排名和评估开放式中文大语言模型&#xff0c;通过开源社区共建、用户自主贡献的方式&#xff0c;持续推动和完善中文语言大模型的科学、客观排名…

TPM是如何平衡设备维护与生产需求的?

在当今快节奏的生产环境中&#xff0c;设备维护与生产需求之间的平衡成为了企业持续发展的关键所在。TPM&#xff08;全面生产维护&#xff09;作为一种先进的生产管理理念&#xff0c;为企业提供了实现这一平衡的有效路径。具体如深圳天行健精益管理咨询公司下文所述&#xff…

记录使用自定义编辑器做试题识别功能

习惯了将解析写在代码注释&#xff0c;这里就直接上代码啦&#xff0c;里面用到的bxm-ui3组件库是博主基于element-Plus做的&#xff0c;可以通过npm i bxm-ui3自行安装使用 // 识别方法&#xff1a; // dom 当前识别数据所在区域, questionType 当前点击编辑选择的题目类型&a…

docker的介绍、原理及操作

一、docker介绍 1.容器技术介绍 Container 即容器&#xff0c;平时生活中指的是可以装下其它物品的工具&#xff0c; 以方便人类归纳放置物品 、存储和异 地运输 &#xff0c;比如人类使用的衣柜 、行李箱、 背包等可以成为容器&#xff0c;Container 除了容器以外&#xff…

Simulink从0搭建模型06-P7模型中结构体的使用

Simulink从0搭建模型06-P7模型中结构体的使用 本节课学习内容1. 结构体的创建 Bus Creator&#xff08;多输入单输出&#xff09;2. 结构体的引用 Bus Selector&#xff08;单输入多输出&#xff09;3. 结构体的赋值 Bus Assignment4. 结构体对象的创建 Bus object5. 结构体数组…

vue3 vant4实现抖音短视频功能

文章目录 1. 实现效果2. 精简版核心代码3. 完整功能点&#xff08;本文章不写&#xff0c;只写核心代码&#xff09; 1. 实现效果 2. 精简版核心代码 使用的 vue3 vant4组件使用van-swipe进行轮播图切换实现 <template><div :style"{width: width px,overflo…

Spark中的累加器与广播变量及blockmanager图解

一、累加器 1、累加器的引入 案例&#xff1a;没读取一条文件中的数据&#xff0c;count1&#xff0c;并打印在Drive端&#xff08;控制台&#xff09; import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.rdd.RDDobject Demo20Accumulator {def ma…

做电商,错过了2020年的抖音!那2024一定要选择视频号小店!

哈喽~我是电商月月 电商老板们集合了&#xff0c;问大家一个问题: 如果能让你回到三四年前&#xff0c;抖音才步入大众视野&#xff0c;这时候让你去做抖音小店&#xff0c;你愿意吗&#xff1f; 我敢相信&#xff01;很多&#xff0c;错过当年抖音红利的商家&#xff0c;一…

【每日力扣】300. 最长递增子序列 与 139. 单词拆分

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害 300. 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&…

【计算机网络】P1 计算机网络概念、组成、功能、分类、标准化工作以及性能评估指标

目录 1 什么是计算机网络2 计算机网络的组成2.1 组成部分上2.2 工作方式上2.3 功能组成上 3 计算机网络的功能3.1 数据通信3.2 资源共享3.3 分布式处理3.4 提高可靠性3.5 负载均衡 4 计算机网络的分类4.1 按分布范围分类4.2 按传输技术分类4.3 按照拓扑结构分类4.4 按使用者分类…

网络智能化的发展对仿真环境的需求

1. 网络智能化背景介绍 1.1 什么是网络智能化 网络智能化是指利用人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;、优化算法等技术来实现网络的信息化、自动化和智能化。相对5G、6G、算力网络等领域&#xff0c;网络智能化是针对网络全场景、全要素…

低调收藏,这份MobaXterm使用指南很全面

中午好&#xff0c;我的网工朋友。 MobaXterm&#xff0c;这个名字对于我们这些经常需要在Windows环境下与Linux服务器打交道的人来说&#xff0c;应该并不陌生。它不仅仅是一个SSH客户端&#xff0c;更是一个功能强大的终端工具箱&#xff0c;集成了X服务器和Unix命令集&…

HiWoo Box工业4G网关

在飞速发展的工业4.0时代&#xff0c;数据已成为驱动工厂智能化、自动化的核心力量。而如何将这些散布在工厂各个角落的数据高效、安全地汇集起来&#xff0c;成为企业提升生产效率、降低运营成本的关键。今天&#xff0c;我们将为您介绍一款4G网关产品——HiWoo Box&#xff0…

【嵌入式模块芯片开发】DWIN的T5L _DGUS应用开发 显示屏的基本图形显示以及串口命令的动态数据波形功能实现

【嵌入式模块芯片开发】DWIN的T5L _DGUS应用开发 显示屏的基本图形显示以及串口命令的动态数据波形功能实现 T5L _DGUS应用在DWIN的各类显示屏中 如DMG80480T070_05WTR等等 可用DWIN官方工具生成一系列上位机显示控件 通过串口命令进行交互实现显示、触摸等功能 也可以进行C51…

【上】王树森《小红书推荐系统公开课》- 课程笔记(推荐系统基础、召回、排序)

写在前面 本文为王树森老师《小红书推荐系统公开课》的课程笔记 课程来源&#xff1a;ShusenWang的个人空间-ShusenWang个人主页-哔哩哔哩视频 (bilibili.com)课程资料&#xff1a;GitHub - wangshusen/RecommenderSystem 由于篇幅较长&#xff0c;分为【上】【下】两篇文章…

HTML静态网页成品作业(HTML+CSS)——动漫海贼王介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

VSCode 报错 之 运行 js 文件报错 ReferenceError: document is not defined

1. 背景 持续学习ing 2. 遇到的问题 在VSCode 右键 code runner js 文件报错 ReferenceError: document is not defined eg&#xff1a; // 为每个按钮添加点击事件监听器 document.querySelectorAll(button).forEach(function (button) {button.addEventListener(click, f…

全面盘点多模态融合算法及应用场景

关注作者&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕博&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的资深架构师&#xff0c;项目管理专业人士&#xff0c;上亿营收AI产品研发负责人 多…