【QQ音乐】sign签名| data参数 | AES-GCM加密 | webpack(上)

1.目标

网址:https://y.qq.com/n/ryqq/toplist/26

在这里插入图片描述
在这里插入图片描述
切换榜单出现请求,可以看到signdata是加密的

2.逆向分析

搜索sign:
在这里插入图片描述
在这里插入图片描述
可以看到sign = P(n.data),而n.data就是请求的加密data参数

data = '{"comm":{"cv":4747474,"ct":24,"format":"json","inCharset":"utf-8","outCharset":"utf-8","notice":0,"platform":"yqq.json","needNewCode":1,"uin":0,"g_tk_new_20200303":5381,"g_tk":5381},"req_1":{"module":"musicToplist.ToplistInfoServer","method":"GetDetail","param":{"topid":27,"offset":0,"num":20,"period":"2025-05-27"}}}'

3.webpack分析

在这里插入图片描述
这是Webpack 打包后的模块加载代码
在这里插入图片描述
在这里打上断点找加载器n,然后刷新页面
在这里插入图片描述
可以看到加载器的name"f",数组m里面390个模块
点击进入就是加载器
在这里插入图片描述
可以看到是以列表的方式存储模块的,
然后将获取sign的模块,就是含有下面内容的模块,放进去

var P = G._getSecuritySign;
var L = j.__cgiEncrypt, N = j.__cgiDecrypt;

在这里插入图片描述

  • G._getSecuritySign
    • 获取sign
  • j.__cgiEncrypt
    • 加密请求参数data
  • j.__cgiDecrypt
    • 解密响应二进制数据

window = global;!function(e) {function r() {for (var e, t = 0; t < d.length; t++) {for (var r = d[t], a = !0, n = 1; n < r.length; n++) {var c = r[n];0 !== o[c] && (a = !1)}a && (d.splice(t--, 1),e = f(f.s = r[0]))}return e}var a = {}, n = {21: 0}, o = {21: 0}, d = [];function f(t) {if (a[t])return a[t].exports;var r = a[t] = {i: t,l: !1,exports: {}};console.log(t)return e[t].call(r.exports, r, r.exports, f),r.l = !0,r.exports}f.m = e,f.c = a,f.d = function(e, t, r) {f.o(e, t) || Object.defineProperty(e, t, {enumerable: !0,get: r})},f.r = function(e) {"undefined" !== typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {value: "Module"}),Object.defineProperty(e, "__esModule", {value: !0})},f.t = function(e, t) {if (1 & t && (e = f(e)),8 & t)return e;if (4 & t && "object" === typeof e && e && e.__esModule)return e;var r = Object.create(null);if (f.r(r),Object.defineProperty(r, "default", {enumerable: !0,value: e}),2 & t && "string" != typeof e)for (var a in e)f.d(r, a, function(t) {return e[t]}.bind(null, a));return r},f.o = function(e, t) {return Object.prototype.hasOwnProperty.call(e, t)}r()window.shark = f;
}([]);console.log(window.shark);

先删除一些无用的代码,然后将模块放进去
在这里插入图片描述

如果这么运行的话,毫无疑问是会报错的

        return e[t].call(r.exports, r, r.exports, f),^TypeError: Cannot read properties of undefined (reading 'call')

很明显缺少的是下标为81的模块,然后我们去浏览器取该模块
在这里插入图片描述
在这里插入图片描述
然后这里也不是导入81模块,在这里我们是导入自己的下标为1的模块
在这里插入图片描述
然后接下来就是导出全局函数了
在这里插入图片描述
打印方法没有问题
在这里插入图片描述

4.sign验证


get_sign = (data) => window.shark(0).getSign(data);data = '{"comm":{"cv":4747474,"ct":24,"format":"json","inCharset":"utf-8","outCharset":"utf-8","notice":0,"platform":"yqq.json","needNewCode":1,"uin":0,"g_tk_new_20200303":5381,"g_tk":5381},"req_1":{"module":"musicToplist.ToplistInfoServer","method":"GetDetail","param":{"topid":27,"offset":0,"num":20,"period":"2025-05-28"}}}'console.log(get_sign(data))

写个箭头函数验证能否生成sign
在这里插入图片描述

运行代码可以生成sign
在这里插入图片描述
但是和浏览器的sign不一样,而且data是一样的,这就是缺少必要的环境

window = global;document = {cookie: 'pgv_pvid=592785550; fqm_pvqid=75e53579-6875-45e3-9bfa-8c3634fd8b23; fqm_sessionid=4742d993-b7c2-4148-b070-67c2ac322bc7; pgv_info=ssid=s6945372512; ts_last=y.qq.com/n/ryqq/toplist/26; ts_refer=cn.bing.com/; ts_uid=4872983500',createElement: function(res){if(res == 'a') return {}},
}
navigator = {userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",}
location = {"href": "https://y.qq.com/","host": "y.qq.com",
}

在这里插入图片描述
补充环境之后发现和浏览器的一致

sign算法逆向参见:https://blog.csdn.net/2406_83321119/article/details/146435985

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

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

相关文章

uni-app(6):Vue3语法基础下

1 列表渲染 1.1 在 v-for 里使用数组 v-for 指令可以实现基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法&#xff0c;其中 items 是源数据数组&#xff0c;而 item 则是被迭代的数组元素的别名。 在 v-for 块中&#xff0c;我们可以访问所有父…

STM32之SPI——外部FLASH和RFID

一、SPI协议的原理与应用 基本概念 串行外设接口SPI&#xff08;Serial Peripheral Interface&#xff09;是由美国摩托罗拉公司最先推出的一种同步串行传输规范&#xff0c;也是一种单片机外设芯片串行外设扩展接口。该接口是一种高速、全双工、同步的通信总线&#xff0c;并…

51c视觉~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/13954440 #SceneTracker 在4D时空中追踪万物&#xff01;国防科大提出首个长时场景流估计方法 本篇分享 TPAMI 2025 论文​​SceneTracker: Long-term Scene Flow Estimation Network​​&#xff0c;国防科大提出首…

cf2059B

原题链接&#xff1a;https://codeforces.com/contest/2059/problem/B 题目背景&#xff1a; 将一个长度为 n 的数组 a 划分为 k 个数组&#xff0c;再将所有偶数索引的数组合并成 b 数组&#xff0c;定义代价为 的最小索引 i &#xff0c;可得到的最小代价为多少。 思路&am…

爬虫到智能数据分析:Bright Data × Kimi 智能洞察亚马逊电商产品销售潜力

前言 电商数据分析在现代商业中具有重要的战略价值&#xff0c;通过对消费者行为、销售趋势、商品价格、库存等数据的深入分析&#xff0c;企业能够获得对市场动态的精准洞察&#xff0c;优化运营决策&#xff0c;预测市场趋势、优化广告投放、提升供应链效率&#xff0c;并通…

从解决一个分享图片生成的历史bug出发,详解LayoutInflater和View.post的工作原理

问题背景 最近在项目中遇到一个问题&#xff1a;在档口分享功能中&#xff0c;需要动态生成一个分享图片。代码是这样写的&#xff1a; // 项目中的代码 val shareView LayoutInflater.from(thisStallMainActivityV1).inflate(R.layout.share_header_stall_main_layout, nul…

2.linux目录切换命令:cd与pwd以及路径与路径符

cd 切换当前工作目录 cd [linux路径0] cd没有选项,直接执行,只有参数.如果没有参数,表示回到用户的home目录 pwd 无参,无选项,直接打印当前工作目录的绝对路径 路径 相对路径 以当前目录为起点,路径描述无需使用/开头 # cd Desktop 绝对路径 路径描述需要以/开头 cd…

摩尔条纹 原理以及matlab 实现

一、简介 莫尔条纹的形成原理-CSDN博客 “莫尔”一词源于法文“Moire”&#xff0c;其原本的含义是“波动”或者“起波纹的”。早在古代时期&#xff0c;人们便偶然发现&#xff0c;当把两块薄的丝绸织物相互叠加放置时&#xff0c;能够看到一种呈现不规则形态的花纹。此后&a…

【海康USB相机被HALCON助手连接过后,MVS显示无法连接故障。】

在Halcon里使用助手调用海康USB相机时&#xff0c;如果这个界面点击了【是】 那么恭喜你&#xff0c;相机只能被HALCON调用使用&#xff0c;使用MVS或者海康开发库&#xff0c;将查找不到相机 解决方式&#xff1a; 右键桌面【此电脑】图标 ->选择【管理】 ->选择【设备…

数据治理是什么意思?数据治理平台有哪些?

目录 一、数据治理的概念 1. 数据治理的定义 2. 数据治理的目标 二、数据治理的实施流程 1. 规划阶段 2. 评估阶段 3. 执行阶段 4. 监控与评估阶段 三、常见的数据治理平台 1. FineDataLink 2. IBM InfoSphere Information Governance Catalog 四、总结 随着企业业…

高效工具-tldr

喜欢使用命令操作的小伙伴&#xff0c;肯定会遇到一个问题&#xff0c;查看命令如何使用时&#xff0c;会列出一堆&#xff0c;特别是英文&#xff0c;看的直发懵。前段时间我也是研究git命令&#xff0c;也遇到了类似的问题。好在有大数据&#xff0c;帮我普及相关的知识。 在…

安卓添加设备节点权限和selinux访问权限

# 1 修改设备节点权限及配置属性设置节点值 ## 1.1 修改设备节点权限 ### 1.1.1 不会手动卸载的节点 在system/core/rootdir/init.rc中添加节点权限 在on boot下面添加 chown system system /sys/kernel/usb/host chmod 0664 /sys/kernel/usb/host ### 1.1.2 支持热插拔的…

ssm学习笔记(尚硅谷) day1

创建新项目 maven的聚合 1. 标记父类项目 标签<packaging>pom</packaging>表示将该项目标记为父类项目&#xff0c;必须添加。 以下是标签<packing>的常见取值 groupId在pom.xml中&#xff0c;可以从pom.xml直接修改。 2. 通过<modules>添加子项目…

基于Java,SpringBoot,Vue,UniAPP医院预约挂号买药就诊病例微信小程序系统设计

摘要 随着医疗信息化的不断推进以及“互联网医疗”模式的广泛普及&#xff0c;传统医院挂号流程中存在的排队时间长、资源分配不均等问题日益凸显&#xff0c;急需通过数字化手段加以解决。本研究设计并实现了一套基于Java、SpringBoot、Vue与UniAPP技术栈的医院预约挂号微信小…

Axure项目实战:运输统计页引入echarts实现高保真设计(JS代码ctrl+c ctrl+v懂得来)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 案例视频: 数据统计引入echarts示例演示 课程主题:运输统计页引入echarts实现高保真设计 主要内容…

python打卡day39

图像数据与显存 知识点回顾 图像数据的格式&#xff1a;灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 作业&#xff1a;今日代码较少&#xff0c;理解内容即可 在 PyTorch 中&#xff0c;…

15.1 【基础项目】使用 HTML、CSS 和 TypeScript 构建的简单计数器应用

一个简单的计数器应用是学习如何集成 HTML、CSS 和 TypeScript 的绝佳项目。该应用允许用户对计数值进行增加、减少和重置&#xff0c;展示了 TypeScript 中基本的 DOM 操作和事件处理。 我们将构建的内容 我们将创建一个具有以下功能的计数器应用&#xff1a; 增加计数值减…

RT-Thread源码阅读(3)——内核对象管理

_object_container对象容器数组 在RT-Thread操作系统中&#xff0c;_object_container数组的作用是按类型分类管理内核对象&#xff0c;提供高效的类型检查、资源管理和统计功能 struct rt_list_node {struct rt_list_node *next; /**< point to…

《智能医学》征稿通知:7天可见刊,专科及以上可发表

香港科学出版社(Hong Kong Scientific Publishers Journals)是一家全球独立高质量的学术出版机构&#xff0c;遵循国际开放获取的出版(OA)原则。现已与科检易学术携手共同征集高质量文章。目前可出版来自高等学校、科研院所和企业的先进科技成果。包括理、工、农、医、经、管、…