网易云音乐缓存文件提取并解密

文章更新

更新时间 更新内容
2024年7月7日23:59:42 文章发布,NeteaseMusicCacheManager v1.0

成品

成品下载:NeteaseMusicCacheManager v1.0.exe

image-20240707234901588

前言

演示版本较低,新版理论通用

image-20240707221305372

缓存文件路径

原理

行为监控排除后,可以观察到一个名为cache_path的文件

image-20240707231629641

虽然网易云音乐没有从其中读取数据,但它却将缓存路径写入其中

image-20240707231731395

这里的路径为C:\Users\QianXia\AppData\Local\NetEase\CloudMusic\Cache\Cache

也可通过网易云音乐中的设置获取及修改。

相关代码

image-20240707233909063

这里读取了cache_path文件,获取了缓存目录。

需要注意的是,读取文本时编码为Unicode。

缓存文件

解密

原理

在网易云音乐中播放一首歌曲后,可观察到类似下方的文件

image-20240707232254999

其中占用空间最大的就该是音乐文件,实际并不可播放,网易云音乐对此进行了加密

使用十六进制编辑器可观察到大量0xA3字节:

image-20240707232420497

可考虑是异或加密,尝试用0xA3字节与文件中每个字节异或

image-20240707232545384

010 Editor中菜单栏Tools->Hex Operations->Binary Xor…

image-20240707232629257

选择Unsigned Byte,操作数填入A3,格式选择Hex,并单击OK

image-20240707232709546

可观察到出现了MP3的文件头,保存并修改后缀为MP3即可播放

image-20240707232826361

相关代码

image-20240707234029983

这里主要将整个文件逐字节与0xA3异或,获得解密后文件,并写出。

缓存文件名

以上小节的文件名为例,缓存文件名为“1399616170-320-bbabdf90bfa0b25de0a0209eb9f90317.uc”,中间使用“-”分隔,分隔后为

  • 1399616170
  • 320
  • bbabdf90bfa0b25de0a0209eb9f90317

根据长度、组成字符和工具检测信息等可推测,第一串数字为歌曲ID,第二串数字为码率,第三串是歌曲的MD5校验值

image-20240707233241385

image-20240707233414795

  • 1399616170——歌曲ID
  • 320——码率
  • bbabdf90bfa0b25de0a0209eb9f90317——MD5校验值

歌曲信息获取

缓存文件中并不包含歌曲名称、歌曲作者等内容,可利用文件名中的歌曲ID作为参数,提供给网易云音乐相关的API获取歌曲信息。

相关项目

完整代码可见GitHub链接:网易云音乐缓存管理器

成品下载:NeteaseMusicCacheManager v1.0.exe

基于.NET Framework 4.5,播放按钮调用的是系统关联的音乐播放器,获取按钮会扫描缓存路径下所有后缀名为.uc的文件,并通过网易云音乐相关API获取音乐信息。

image-20240707235122013

image-20240707235228771

image-20240707235250173

参考资料

基本的异或加密 · 逆向工程入门指南 (gitbooks.io)

网易云音乐缓存文件解密

(完)