Node.js+CryptoJS还原酷我音乐reqId生成逻辑:Webpack打包的逆向技巧
在音乐流媒体平台的开发中,请求参数加密是常见的反爬机制。酷我音乐通过动态生成的reqId参数来保护其API接口,本文将深入解析这一参数的生成逻辑,并展示如何通过Node.js和CryptoJS库完整还原其加密过程。
1. 逆向工程基础准备
逆向分析音乐平台的加密逻辑需要具备一定的前端工程化知识。酷我音乐采用Webpack打包的JavaScript代码,这给我们的分析工作带来了独特的挑战。
1.1 必备工具与环境配置
开始之前,请确保已安装以下工具:
- Chrome开发者工具(最新版本)
- Node.js环境(建议v16+)
- Webpack逆向工具(如webpack-unpack)
- 代码美化工具(如Prettier)
关键依赖安装:
npm install crypto-js vm2 axios
1.2 Webpack打包代码特征识别
现代前端工程通常使用Webpack进行模块打包,这会导致:
- 所有模块被包裹在闭包中
- 模块通过数字ID引用
- 核心逻辑分散在不同模块中
酷我音乐的Webpack打包特征:
// 典型Webpack模块结构
!(function(e) {
function t(r) {
if (n[r]) return n[r].exports;
var o = n[r] = {
exports: {},
id: r,
loaded: !1
};
return e[r].call(o.exports, o, o.exports, t),
o.loaded = !0,
o.exports
}
var n = {};
return t.m = e,
t.c = n,
// ...其他Webpack运行时代码
})([
/* 0 */ function(require, module, exports) {
// 模块内容
}
]);
2. 请求参数逆向分析
通过抓包分析酷我音乐API请求,可以发现两个关键加密参数:reqId和Secret。本文将重点解析reqId的生成机制。
2.1 关键参数定位技巧
参数特征分析表:
| 参数名 | 变化频率 | 长度 | 特征 |
|---|---|---|---|
| reqId | 每次请求 | 36 | UUID格式 |
| Secret | 会话期间 | 32 | 十六进制字符串 |
定位加密代码的三种方法:
- 全局搜索关键参数名(如"reqId")
- XHR断点调试
- Hook关键函数(如crypto相关方法)
提示:现代前端混淆代码中,直接搜索参数名可能无效,建议结合运行时调用栈分析
2.2 AST解析与代码还原
当面对混淆代码时,抽象语法树(AST)分析是强有力的工具。以下是通过AST解析还原加密逻辑的关键步骤:
const parser = require('@babel/parser');
const traverse = require('@babel/traverse').


3824

被折叠的 条评论
为什么被折叠?



