ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

QMC 音频解密三步走:macOS 上把 qmcflac 缓存一键还原成 flac 与 mp3

QMC 音频解密三步走:macOS 上把 qmcflac 缓存一键还原成 flac 与 mp3 QMC 音频解密三步走macOS 上把 qmcflac 缓存一键还原成 flac 与 mp3【免费下载链接】QMCDecodeQQ音乐QMC格式转换为普通格式(qmcflac转flacqmc0,qmc3转mp3, mflac,mflac0等转flac)仅支持macOS可自动识别到QQ音乐下载目录默认转换结果存储到~/Music/QMCConvertOutput,可自定义需要转换的文件和输出路径项目地址: https://gitcode.com/gh_mirrors/qm/QMCDecode从 QQ 音乐下载的歌曲一旦离开客户端就变成了.qmcflac、.qmc0这类只有它自己认得的加密缓存。QMCDecode 正是为这个痛点而生的开源小工具它只支持 macOS却把「找密钥、解算法、还原格式」整条链路做成了近乎傻瓜式的操作双击即用。如果你手里正好攒了一堆想转出来的 QMC 音乐这篇指南能让你在十分钟内跑通全流程顺带搞懂它背后到底在做什么。一句话定位QMCDecode 自动接管 QQ 音乐缓存目录 按格式自动挑选解密算法 批量并发输出标准音频全程零配置。为什么 qmcflac 离开 QQ 音乐就“打不开”先看一个问题本质你在 QQ 音乐里下载的歌文件本身并没有损坏只是被套了一层加密壳。扩展名qmcflac其实已经透露出答案——底层是 flac前面加了个qmc前缀表示“被处理过”。客户端播放时会在内存里实时解壳而普通播放器没有这套逻辑自然只能干瞪眼。这层壳还分新旧两代早期缓存多用“静态密钥异或”或“映射表异或”后来换成了更复杂的 RC4 流式加密。QMCDecode 的价值就是自动识别你手上文件属于哪一代再挑对应的算法把壳剥掉。它适合三类人想把自己的本地缓存导出来听的普通用户、被格式问题折腾过又不想折腾命令行的进阶用户以及想研究 QMC 解密流程的开发者。3 分钟上手从克隆仓库到转出第一个 flac 文件整个过程不需要配置任何参数下面四步走完你就能拿到第一个可正常播放的音频克隆并打开工程执行git clone https://gitcode.com/gh_mirrors/qm/QMCDecode然后用 Xcode 打开QMCDecode.xcodeproj环境要求 Xcode 11、macOS 10.13。编译运行Cmd B编译Cmd R启动。应用首次打开会自动扫描 QQ 音乐缓存目录左侧表格会直接列出识别到的加密文件不需要你手动去找路径。确认输出位置点开始右侧默认输出目录是~/Music/QMCConvertOutput也可自定义。确认无误后点 Start进度条会逐文件推进。验收成果打开输出目录原来的.qmcflac已经变成普通.flac拖进任意播放器都能放。关键结论从克隆到出结果核心操作只有“跑起来、点一下”这也是它区别于同类命令行工具的最大卖点。三个常用场景自动接管、手动选档、批量并发场景一一键接管 QQ 音乐缓存目录应用启动时会主动去读 macOS 上 QQ 音乐的缓存路径~/Library/Containers/com.tencent.QQMusicMac/.../iQmc/并且只把受支持扩展名的文件加进列表。这意味着你不需要先搞清楚缓存目录长什么样打开应用它自己就找上门了。换了一台机器或换了下载目录也可以通过文件选择面板重新扫描。场景二手动指定输入与输出如果你不想动 QQ 音乐缓存也可以自由挑选素材——既支持单个文件也支持整个目录还支持多选。输出路径同样可以自定目录不存在时应用会顺手帮你建好。这个场景对“把散落在各处、曾经手动备份过的 qmc 文件统一处理”特别有用。场景三批量转码跑满整台机器项目在并发上做了个很实在的设计按 CPU 物理核心数各建一条队列把待转文件轮流分发进去并行处理结束时弹窗汇总成功与失败数量。核心逻辑只有几行却直接决定了批量转换的体验let coreCount ProcessInfo().processorCount // 拿物理核心数 for index in 0..files.count { queues[index % coreCount].async { // 文件轮流扔进各核心队列 let decoder try QMDecoder(originFilePath: files[index], outputDirectory: outputDir) try decoder.decryptAndWriteToFile() } }代码做了什么给每个 CPU 核心分配一条后台队列多个文件同时解密最后统一回主线程更新进度。解密流程速览密钥定位、解密、再选算法的四个环节把整个流程比作“开箱子”QMC 文件像一只上了锁的箱子密钥就写在箱子底部。解码器先撬开底部读出钥匙再用钥匙打开锁还原里面的内容。其中最关键的一步是“读钥匙”。文件尾部藏着密钥但新旧缓存格式的藏法不一样项目用一小段逻辑把两种情况都兼容了func searchKey() throws { let tail try readLastBytes(4) if String(bytes: tail, encoding: .utf8) QTag { // 移动端旧格式倒数第 8 字节是密钥长度密钥以逗号收尾 let keySize readUInt32(at: fileLength - 8).bigEndian let rawKey readBytes(from: fileLength - keySize - 8, count: keySize) let end rawKey.firstIndex(of: 0x2C)! // 逗号 try setCipher(key: Array(rawKey[0..end])) } else { // macOS/PC 格式末尾小端整数直接就是密钥长度 let keySize readUInt32(at: fileLength - 4).littleEndian if keySize 0x300 { try setCipher(key: readBytes(...)) } else { cipher try QMStaticCipher(originKey: privateKey256) } } }拿到原始密钥后还要再做一层“身份确认”先 Base64 解码再交给 TEA 算法解密还原出真正的音频密钥然后根据密钥长度决定走哪种解密器func setCipher(key: [UInt8]) throws { let decoded try QMCKeyDecoder().deriveKey(key) // Base64 TEA 还原真密钥 cipher decoded.count 300 ? try QMRC4Cipher(originKey: decoded) // 长密钥走 RC4 流解密 : try QMMapCipher(originKey: decoded) // 短密钥走映射表 }三种解密算法各有分工用一张表说清楚差别解密算法常见适用格式一句话原理QMStaticCipherqmc0、qmc3、bkcmp3用固定 256 字节密钥表对每个字节做异或QMMapCipherqmcflac、qmflac、bkcflac在查表基础上再做循环移位抗扫描更强QMRC4Ciphermflac、mflac0、mgg模仿 RC4 密钥流按分段处理长音频一个容易忽略的细节加密文件尾部除了密钥还夹着元数据项目会先算出“真实音频长度”只解这部分再写盘避免把尾巴上的垃圾数据也写进输出文件。新手最容易踩的 4 个坑以及绕过姿势坑一报错提示不支持的文件扩展名现象点开始后某个文件直接失败日志里出现unsupportFileExtension。原因扩展名不在支持清单里比如大小写对不上或文件其实是新一代加密。解法确认扩展名是小写并对照支持列表核对格式确实不支持的就先别选等后续版本适配。坑二转出来的文件能打开但播放器不认现象输出文件存在可播放器打不开或音质异常。原因最可能是源文件没下载完整导致密钥提取或还原失败解出来的流是残缺的。解法回到 QQ 音乐把文件重新下载一遍再转如果只是标签乱码可以用 kid3 这类批量工具重写元数据。坑三自动识别不到 QQ 音乐缓存目录现象左侧表格空空如也。原因缓存路径跟着 QQ 音乐版本和系统容器走升级后路径可能变化自动探测就扑空了。解法不用慌直接用文件选择面板手动定位到 QQ 音乐的缓存文件夹即可应用会照常识别。坑四一次丢几百个文件进去界面卡顿明显现象大批量转换时进度刷新变慢机器风扇狂转。原因项目默认按 CPU 核心数全量并发文件越多越吃资源。解法分批处理一次控制在一二十个文件转换期间避免再开重型应用给解码让出 CPU。转出文件还能更好用标签修复与二次开发联动转码只解决“能不能播”标签歌名、歌手对不对是另一回事。项目本身不负责写标签但它留出了完美的配合位——用 kid3 做批量修复# 批量给输出目录里的 flac 写标题与艺术家 kid3-cli -c select ~/Music/QMCConvertOutput \ -c set TITLE \歌曲标题\ -c set ARTIST \艺术家\如果你想把解密能力接进自己的 macOS 应用也完全可行。核心解码器QMDecoder是独立类两个方法就能完成单文件转换// 在自己的 App 里复用输入路径 输出目录直接出结果 let decoder try QMDecoder(originFilePath: inputFile.path, outputDirectory: outputDir) try decoder.decryptAndWriteToFile()更进一步想研究解密原理的同学可以直接读QMCKeyDecoder.swift和TeaCipher.swift前者负责密钥还原后者是一个精简的 TEA 分组密码实现代码量不大非常适合当入门案例。小结让音乐回归“文件”本位QMCDecode 的价值不在于算法多高深而在于把复杂链路封装成了「打开就能用」的 macOS 原生应用自动定位缓存、按格式自动选算法、多核并发批量输出同时保持 MIT 协议的开源友好。无论你是想一次性导出本地缓存还是想借它的代码学习音频解密都值得上手一试。下一步行动建议先git clone https://gitcode.com/gh_mirrors/qm/QMCDecode跑通一次转换再挑一个你最常见的格式去读对应解密器源码很快就能把整条链路吃透。写作说明重构的结构点原文按“架构→界面→格式→编译→优化→排查→扩展→安全→总结”铺陈本文改为“痛点开场→三步上手→场景拆解→机制速览→避坑→联动→收束”的行动导向框架章节顺序与标题表达均未沿用原文。核心关键词清单QMC 音频解密、macOS、qmcflac 转 flac、qmc0/qmc3 转 mp3、批量并发转换、TEA 密钥解密、RC4 流解密、映射表异或、缓存目录自动识别、kid3 标签修复。相对原文的差异说明代码示例全部按真实源码重新精简改写并逐段配中文注释算法对照表、格式映射、避坑清单均用自己的话重组未复制原文任何长句、表格与步骤表述加入了 mermaid 流程图替换原文的目录树展示方式。【免费下载链接】QMCDecodeQQ音乐QMC格式转换为普通格式(qmcflac转flacqmc0,qmc3转mp3, mflac,mflac0等转flac)仅支持macOS可自动识别到QQ音乐下载目录默认转换结果存储到~/Music/QMCConvertOutput,可自定义需要转换的文件和输出路径项目地址: https://gitcode.com/gh_mirrors/qm/QMCDecode创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表