逆向实战 | 网易云音乐ncm文件格式分析

逆向实战 | 网易云音乐ncm文件格式分析

填坑,之前没弄的东西给弄掉,脚本网上都有,就不丢了,丢分析过程。
应该会做一期视频。
之前的.uc缓存文件分析视频可以在我的b站主页看到。

本次分析使用的ncm为王心凌-爱你.ncm。
调试加分析大概是1天的时间,好久没有逆向了,手有点生。

1. 定位读取ncm文件的代码位置

x64dbg API断点:CreateFile->王心凌-爱你.ncm
条件断点:ReadFile判断句柄等于.ncm文件句柄的时候向上追溯调用栈,就可以找到相应的代码位置。
代码位于cloudmusic.dll中。

0x7FFD783F0000-> image_base
0x7FFD786F8FB0 -> p_read_ncm_file

image

2. 向上分析,简单判断基本代码逻辑

向上一层:image
image
向上两层:image
image
image

3. 动态调试分析文件读取流程,在读文件函数处打断点。

读文件记录:(共8次)
0x0e(header+crc+key_len)
0x80(key)
0x04(meta_len)
0x026e(meta)
0x04(crc?)
0x09(5bytes_unknown + 4bytes image_len)
0x08f430(image_data)
0x140000(应该是循环读到底为止)

4. 通过向上分析和内存断点结合,分析完整的文件解析逻辑。

定位到aes解密的具体函数:
image
跟进:
image
再跟进:
image
上面一段乱七八糟的东西会计算出AES key的值,这是一个固定值,可以直接动态调试获取:b'hzHRAmso5kInbaxW'
具体解密:
image
使用的是ssl库中的函数,AES ECB:
image

之后使用这个解密后的key初始化了rc4的box:
image

然后在读取最终音乐本体的时候使用rc4进行解密:
image
跟进就是rc4的代码:image

最后确定流程如下:

  1. key->xor 0x64->使用aes进行解密->解密后需要对比header:'neteasecloudmusic',去掉header之后用作rc4的密钥
  2. meta->xor 0x63->解base64->使用aes进行解密得到音乐文件相关信息
  3. 读取音乐图片信息。
  4. 循环读取加密后的音乐本体,每次0x140000字节,使用rc4进行解密。

总体来说难度不大,需要有耐心仔细分析。

posted @ 2025-05-22 18:14  Mz1  阅读(969)  评论(0)    收藏  举报