AI 文章摘要

文章介绍了如何逆向工程某Q音乐网站的sign参数生成过程。通过浏览器开发者工具追踪代码,发现sign基于webpack打包,由加载器导出函数生成。使用断点调试定位加载器和函数,在外部提取相关JavaScript代码并补全浏览器环境(如location和navigator),以确保sign正确生成。最后通过Python调用JS代码实现数据提取。阅读此文章大概需要1-2分钟。
摘要更新时间:2026-06-26 13:13

某Q音乐的sign是用webpack打包生成的,也就是说,它把所有的函数封装成一个一个大模块,然后通过一个加载器去进行函数的一些导出和调用(应该是),具体知道这么多。

切入正题,首先打开浏览器进入网站,进入排行榜,可以看到流行排行榜的一些信息,然后F12,可看到一些信息,如图:

sign参数逆向

然后呢,右边那个红框内就是我们要找的这个流行指数榜的歌曲的所有信息,然后我们又看到当请求这个url的时候,携带了一些参数,有一个时间戳和一个sign

sign参数逆向

而这个sign你会发现,它不是固定的但是它是必须携带的请求参数,它是随着请求东西不一样然后跟着变动,也就是说,这可以理解为加密参数,那么我们可以在代码里面去找一下这个sign是在哪儿生成的,使用全局大法搜一下这个sign参数,然后点击进入sign所在的代码块

sign参数逆向
sign参数逆向

乍一看,就能知道,这个sign就是i,而这个i是通过调用一个o函数生成的,然后中间又传了一个data参数,而这个o又是通过这个n(350).default得到的,所以,最主要要解决掉这个o = n(350).default,此时解释一下,这里的o = n(350)就是webpack的形式,n是函数加载器,350是调用的函数。然后此时,在这个地方打上一个断点,然后一步一步得到这个i值,也就是请求这个页面时候的sign值以及加载器所在的函数位置

sign参数逆向
sign参数逆向

然后可知道这个加载器n的函数位置,点击进入,发现是个f函数

sign参数逆向

然后这个default也能看得到是在本代码模块内,也就是说,如果我们把加载器所在的代码拿到和default相关代码拿到,然后我们在外部进行导出然后调用此js代码就能拿到所需要的sign值从而实现数据的提取,下面复制代码,然后在外部声明一个全局变量以进行外部调用,如:

var loader;
// 加载器所在代码
!function(e) {
// …
// f是加载器,用全局变量接收
loader = f;
}([])

然后复制加载器方法代码,进行原代码中导入:

// 加载这个方法的所有代码,module是加载器方法的js文件名字
require(“module”)
var loader;
!function(e) {
// …
// f是加载器,用全局变量接收
loader= f;
}([])

然后下面进行测试,发现和源sign值是一样的,也就是说代码是没问题的

sign参数逆向

但是如果此时发现在浏览器运行sign值又不对了,那就是环境缺失了,需要补环境,把location和navigator补上就行

sign参数逆向

然后最后用python代码去进行调用执行js代码,得到数据:

sign参数逆向

格式化一下,结束

sign参数逆向

演示搜索与下载

sign参数逆向