腾讯旗下的《QQ 音乐》新版本所使用的加密,姑且称之为 QMCv2。
v1 相关的内容可以在 QMCv1 解密 找到。
项目支持目前(2021.12)最新的 mflac
/ mflac0
/ mflac1
/ mgg
/ mgg0
/ mgg1
后缀的 QQ 音乐的下载加密文件。
注意:腾讯在 2022 年三月发布的 Windows 18.57 版本及以后更新了该加密方式, 并在同年四月将安卓版本取消了内置解密密钥。
关于 Windows 版本加密算法更新
关于安卓版本加密算法更新
安卓版本更换了加密方案 —— 从加密文件内置解密密钥替换为从数据库动态获取。
因此,在最新版本下解密则需要在手机配合 root + xposed (或同类框架/应用) 注入代码到应用来获取 EKey 才能继续解密。
例如,挂钩上述分析提及的 getFileEKey
方法,根据参数与返回的 EKey 值来调用 void decryptFile(String srcFilePath, String destFilePath, String eKey)
(签名为 com.tencent.qqmusicplayerprocess.audio.playermanager.EKeyDecryptor$a.a(java.lang.String, java.lang.String, java.lang.String) : void
) 进行解密。
已知支援的版本与下载备份
- Windows:v1851 或以前
- 来源:腾讯电脑管家/普通下载 v1851.5330 安装包
- Android:v11.5.1 或以前
- 来源:官网存档 @archive.org v10.15.5.10
- 来源:豌豆荚 v11.5.1.8
- 来源:豌豆荚 v11.5.0.8
- 备份下载:
命令行工具使用
如果需要批量解密,需要自行编写脚本调用编译的可执行程序。
目前有两个实现:
- GitHub:
jixunmoe/qmc2
(C++) | 最新版本 - GitHub:
jixunmoe/qmc2-rust
| 二进制文件需要自行编译
./QMC2-decoder "encrypted_file.mflac" "decrypted.flac"
注:如果解密失败,可以尝试将文件名中的非 ASCII 字符去掉后尝试。
Linux 因为使用 UTF-8 编码因而没有该问题。
网页版工具使用
网页版使用的解密代码与原生实现为同一份,分别使用 emscripten (C++) 与 wasm-pack (Rust) 转译到 WebAssembly。
使用方法也很简单,按下按钮后选择文件,或将文件拖放到网页即可。每次处理一个文件。
相关项目实现
- GitHub:
unlock-music/cli
: Go 实现 - GitHub:
nukemiko/takiyasha
: Python 实现 - GitHub:
unlock-music/unlock-music
: TypeScript 实现,网页版
致谢
- GitHub:
unlock-music/unlock-music
项目 - Visual Studio 2022 / Visual Studio Code
qmc2
项目的贡献者- 不可名说的逆向分析工具