KW音乐搜索参数
声明:
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
逆向目标:
主页:aHR0cDovL3d3dy5rdXdvLmNuLw==
接口:aHR0cDovL3d3dy5rdXdvLmNuL2FwaS93d3cvc2VhcmNoL3NlYXJjaE11c2ljQnlrZXlXb3Jk
逆向参数:Query String Parameters:
reqId:b403c080-e7ac-11ee-8dd0-01e74a911a00
本次的逆向目标是搜索接口的一个参数 reqId,注意这个参数并不是必须的,本文的主要目的是介绍分离式 webpack,即模块加载器与各个模块不在同一个 JS 文件里时,该如何改写 webpack
逆向过程:
抓包分析:来到搜索页面,随便搜索一搜歌曲,抓包到接口类为 aHR0cDovL3d3dy5rdXdvLmNuL2FwaS93d3cvc2VhcmNoL3NlYXJjaE11c2ljQnlrZXlXb3Jk
,GET 请求,Query String Parameters 里有个 reqId 加密参数,如下图所示:
参数逆向:
直接全局搜索 reqId,仅在 app.7726bf6.js 文件里面有 4 个结果,如下图所示:
很明显 t.data.reqId = r
和 t.data.reqId = n
是比较可疑的,尝试在这两个地方埋下断点,会发现刷新网页或者重新搜索无法断下,我们观察一下这两个地方,r
和 n
的定义语句 var r = c()();
、var n = c()();
都是 由 c()()
得到的,我们尝试在这两个位置埋下断点,重新搜索,可以发现成功断下,而 c()()
的值正是 reqId 的值,如下图所示:
继续往上找,看看 c 是怎么来的,可以看到一下逻辑:
l = n(110),
c = n.n(l),
var n = c()();
埋下断点进行调试,可以看到 n 其实是 runtime.971d560.js 里面的一个方法,如下图所示:
观察这个 function c(n){}
,return 语句用到了 .call
语法,里面还有 exports
关键字,很容易知道这是一个 webpack 的模块加载器,那么 e
就包含了所有模块,如下图所示:
我们再观察一下 n(110)
,点击进入这个函数,可以发现和前后函数用逗号分隔,划到这个文件的结尾,可以看到有 ]
符号,这说明 webpack 的所有模块都封装在一个数组里面,那么这个 110就代表这个函数是第 110个函数,如下图所示:
再看看 c = n.n(l)
语句,选中 n.n
点击会发现同样来到模块加载器这里,那么到时候扣代码的时候把 c.n
也扣下来即可。
那么总结一下逻辑,语句 l = n(110)
,利用模块加载器,加载了第 110个函数,返回值赋值给 l
,然后 c = n.n(l)
调用模块加载器的 n
方法,返回值赋值给 c
,然后执行 c()()
就得到 reqId 的值了。
webpack 改写
通过前面的分析,我们知道模块加载器里用到了 c.n
,实际调试还用到了 c.d
和 c.o
,所以都要一起扣下来。
模块部分,我们已经知道调用了 110这个模块,而观察 110的代码, 发现还调用了 145 和 146 模块,所以需要将这三个模块都 copy 下来,copy 的时候,我们首先断点运行到模块加载器,由于 e
储存了所有模块,所以我们可以直接在 Console 里调用 e[
110]
、e[
145 ]
、e[
146 ]
输出一下,然后点击就可以跳到原函数的位置,然后再 copy 下来即可,如下图所示:IIFE 传数组
根据IIFE 的改写方法,同样的,我们首先定义一个全局变量,比如 var jzq;
,然后导出模块加载器 jzq= c
,然后将 110、145、146 这三个模块组成的数组传入 IIFE,那么这里不再是第 110、145、146个模块,而是第 0、1、2 个模块,所以在调用模块的时候也要将对应的 110、145、146改为 0、1、2,完整代码如下所示:
var jzq;
!function(e) {var t = {};function c(n) {if (t[n])return t[n].exports;var r = t[n] = {i: n,l: !1,exports: {}};return e[n].call(r.exports, r, r.exports, c),r.l = !0,r.exports}c.n = function(e) {var n = e && e.__esModule ? function() {return e.default}: function() {return e};return c.d(n, "a", n),n}c.d = function(e, n, r) {c.o(e, n) || Object.defineProperty(e, n, {enumerable: !0,get: r})}c.o = function(object, e) {return Object.prototype.hasOwnProperty.call(object, e)}jzq=c
}([function(t, e, n) {var r, o, l = n(1), c = n(2), d = 0, h = 0;t.exports = function(t, e, n) {var i = e && n || 0, b = e || [], f = (t = t || {}).node || r, v = void 0 !== t.clockseq ? t.clockseq : o;if (null == f || null == v) {var m = l();null == f && (f = r = [1 | m[0], m[1], m[2], m[3], m[4], m[5]]),null == v && (v = o = 16383 & (m[6] << 8 | m[7]))}var y = void 0 !== t.msecs ? t.msecs : (new Date).getTime(), w = void 0 !== t.nsecs ? t.nsecs : h + 1, dt = y - d + (w - h) / 1e4;if (dt < 0 && void 0 === t.clockseq && (v = v + 1 & 16383),(dt < 0 || y > d) && void 0 === t.nsecs && (w = 0),w >= 1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");d = y,h = w,o = v;var x = (1e4 * (268435455 & (y += 122192928e5)) + w) % 4294967296;b[i++] = x >>> 24 & 255,b[i++] = x >>> 16 & 255,b[i++] = x >>> 8 & 255,b[i++] = 255 & x;var A = y / 4294967296 * 1e4 & 268435455;b[i++] = A >>> 8 & 255,b[i++] = 255 & A,b[i++] = A >>> 24 & 15 | 16,b[i++] = A >>> 16 & 255,b[i++] = v >>> 8 | 128,b[i++] = 255 & v;for (var _ = 0; _ < 6; ++_)b[i + _] = f[_];return e || c(b)}
},function(t, e) {var n = "undefined" != typeof crypto && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || "undefined" != typeof msCrypto && "function" == typeof window.msCrypto.getRandomValues && msCrypto.getRandomValues.bind(msCrypto);if (n) {var r = new Uint8Array(16);t.exports = function() {return n(r),r}} else {var o = new Array(16);t.exports = function() {for (var t, i = 0; i < 16; i++)0 == (3 & i) && (t = 4294967296 * Math.random()),o[i] = t >>> ((3 & i) << 3) & 255;return o}}
}, function(t, e) {for (var n = [], i = 0; i < 256; ++i)n[i] = (i + 256).toString(16).substr(1);t.exports = function(t, e) {var i = e || 0, r = n;return [r[t[i++]], r[t[i++]], r[t[i++]], r[t[i++]], "-", r[t[i++]], r[t[i++]], "-", r[t[i++]], r[t[i++]], "-", r[t[i++]], r[t[i++]], "-", r[t[i++]], r[t[i++]], r[t[i++]], r[t[i++]], r[t[i++]], r[t[i++]]].join("")}
}]
)function getReqId() {var l = jzq(0),c = jzq.n(l),r = c()()return r
}
console.log(getReqId())
参考文章:https://blog.csdn.net/kdl_csdn/article/details/121135203
相关文章:

KW音乐搜索参数
声明: 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标: …...

SpringBoot3+Vue3项目的阿里云部署--将后端以及前端项目打包
一、后端:在服务器上制作成镜像 1.准备Dockerfile文件 # 基础镜像 FROM openjdk:17-jdk-alpine # 作者 MAINTAINER lixuan # 工作目录 WORKDIR /usr/local/lixuan # 同步docker内部的时间 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ…...

MySQL 存储引擎
目录 一、存储引擎概念介绍 二、MySQL常用的存储引擎 1、 MyISAM 1.1 MylSAM的特点 1.2 MyISAM 表支持 3 种不同的存储格式: (1)静态(固定长度)表 (2)动态表 (3)压缩表 1.3 MyISAM适用…...
perl:打开文件夹,选择视频文件,并播放
在Windows10系统中Perl安装Tk模块 运行 cmd cpan install Tk 编写 openvideo.pl 如下 #!/usr/bin/perl use strict; use warnings; use File::Basename; use Tk;my $mw MainWindow->new or die cannot create Widget;my $types [[AVI, .avi], [MP4, .mp4]];my $file $…...

分布式链上随机数和keyless account
1. 引言 相关论文见: Aptos团队2024年论文 Distributed Randomness using Weighted VRFs 相关代码实现见: https://github.com/aptos-labs/aptos-core(Rust) 在链中生成和集成共享随机数,以扩展应用和强化安全。该…...

【项目设计】基于MVC的负载均衡式的在线OJ
项目代码(可直接下载运行) 一、项目的相关背景 学习编程的小伙伴,大家对力扣、牛客或其他在线编程的网站一定都不陌生,这些编程网站除了提供了在线编程,还有其他的一些功能。我们这个项目只是做出能够在线编程的功能。…...

MRC是谁?- 媒体评级委员会 Media Rating Council
在在线广告的世界里,有许多不同的技术和实践用于提供和衡量广告。对于广告商、出版商和营销人员来说,了解这些技术是如何工作的以及如何有效使用这些技术很重要。在这方面发挥关键作用的一个组织是媒体评级委员会(MRC)。 1. 了解…...

反序列化漏洞简单知识
目录: 一、概念: 二、反序列化漏洞原因 三、序列化漏洞的魔术方法: 四、反序列化漏洞防御: 一、概念: 序列化: Web服务器将HttpSession对象保存到文件系统或数据库中,需要采用序列化的…...
Es之正排索引与倒排索引
文章目录 概要一、正排索引二、倒排索引三、Q&A四、参考 概要 很早就研究了Es倒排索引的具体实现,但对倒排索引和正派索引的定义不是那么清晰,本文就是简述本人对二者的理解。 正排索引和倒排索引的概念来源于 正排索引是文档(ID)到关键词的映射&am…...
wordpress将图片默认连接到媒体文件
wordpress上传图片后,图片链接可以选择链接到媒体文件或附件页面。如果选择链接到媒体文件,就是链接到了图片的地址了。如果选择链接到附件页面,就是链接到图片所在的attachment页面了。 具体链接到哪里,在wordpress模板制作时&a…...

Java学习笔记 | Java基础语法 | 03 | 流程控制语句
文章目录 0 前言1.流程控制语句1.1 流程控制语句分类1.2 顺序结构 2.判断语句2.1 if语句1. if语句格式1练习1:老丈人选女婿练习2:考试奖励 2. if语句格式2练习1:吃饭练习2:影院选座 3. if语句格式3练习1:考试奖励 2.2 …...
记录新人的web3之旅
简单记录一下自己奇妙又充满热情的web3之旅,希望能勉励未来的自己 2023.10.25—— 第一次觉得对web3,币圈感到好奇是我在油管看了《隐藏的币圈亿万富翁》。这个简短的纪录片讲了郑皓升的传奇A9人生,从币圈中致富,再到被制裁,被软…...

由浅到深认识Java语言(9):Eclipse IDE简介
该文章Github地址:https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.c…...

游戏引擎中的地形系统
一、地形的几何 1.1 高度图 记录不同定点的高度,对每个网格/顶点应用高度、材质等信息,我们每个顶点可以根据高度改变位移 但是这种方法是不适用于开放世界的。很难直接画出几百万公里的场景 1.2 自适应网格细分 当fov越来越窄的时候,网格…...

【论文精读】OTA: Optimal Transport Assignment for Object Detection(物体探测的最优传输分配)
OTA最优传输 🚀🚀🚀摘要一、1️⃣ Introduction---介绍二、2️⃣Related Work---相关工作2.1 🎓 Fixed Label Assignment--静态标签分配2.2 ✨Dynamic Label Assignment--动态标签分配 三、3️⃣Method---论文方法3.1 Ἱ…...
无极低码SQL模板引擎使用教程示例,自己手撸一个sql模板引擎进行动态sql生成。
无极低码 :https://wheart.cn 无极低码SQL模板使用教程 一、模板结构与规则 无极低码SQL模板通过简洁的Markdown格式,使SQL语句具有更强的灵活性和适应性,简化了根据业务需求定制SQL的过程。 无极低码SQL模板是一种基于Markdown格式的特殊…...

Python学习(一)
Python环境下载安装 安装略 验证安装结果与编写第一个Python程序...

Day62:WEB攻防-PHP反序列化CLI框架类PHPGGC生成器TPYiiLaravel等利用
目录 反序列化链项目-PHPGGC&NotSoSecure NotSoSecure(综合类) PHPGGC(单项类) 反序列化框架利用-ThinkPHP&Yii&Laravel [安洵杯 2019]iamthinking Thinkphp V6.0.X 反序列化 CTFSHOW 反序列化 267 Yii2反序列化 CTFSHOW 反序列化 271 Laravel反序列化 知识…...

运动想象 (MI) 迁移学习系列 (14) : EEGNet-Fine tuning
运动想象迁移学习系列:EEGNet-Fine tuning 0. 引言1. 主要贡献2. 提出的方法2.1 EEGNet框架2.2 微调 3. 实验结果3.1 各模型整体分类结果3.2 算法复杂度比较3.3 不同微调方法比较 4. 总结欢迎来稿 论文地址:https://www.nature.com/articles/s41598-021-99114-1#cit…...
java中获取字符串中满足正则表达式的元素集合
目录 1.说明 2.从"as1285dfSWE45"中提取单个小写字母 3.从"aHs12DF85dfSWE45"中提取连续大写字母 4.从"[1024]*100-52[587] [24$]"中提取[]中的数字 5.总结 1.说明 在开发中有时需要从字符串中提取特定的字符,如下:…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...