网易云音乐ncm文件格式解析

您所在的位置:网站首页 网易云音乐转码中什么意思 网易云音乐ncm文件格式解析

网易云音乐ncm文件格式解析

#网易云音乐ncm文件格式解析 | 来源: 网络整理| 查看: 265

前言

做了好久的心理建设鼓起勇气花了8块钱充了网易云音乐一个月会员,准备下载一些歌到ipod上听,下下来的却是:

喵喵喵?充钱下了个加密文件,是心梗的感觉,参考知乎《如何评价网易云音乐的ncm格式?》。开始搜转码吧,可是总会好奇到底是怎么转的,所以一步一步debug,下载各种工具去查看,大概弄懂了一些。而且和实习的时候研究的网易云音乐前端JS加密一样,猪厂真的很喜欢用AES和RSA加密方式,而且很喜欢对数据加密之后再把它的密钥给加密……首先贴上代码和软件,如果不感兴趣可以直接去下载使用就好了:

(1)anonymous5l / ncmdump (C++,MIT协议)

基于openssl库编写,所以速度非常快,而且又好。

(2)nondanee / ncmdump (python,MIT协议)

依赖pycryptodome库、mutagen库,比较完善了。

(3)lianglixin / ncmdump(python,MIT协议)

fork的nondanee作者的源码(开始没有注意以为是独立提交的),修改了依赖库依赖pycrypto库,会有一些安装和使用问题:

(4)windows GUI 直接运行的EXE文件:

项目名和源码下载地址百度云下载地址 说明yoki123 / ncmdump点此下载(提取码:92ib)批量的anonymous5l / ncmdump-gui点此下载(提取码: fffn) 大佬原生程序 未知点此下载(提取码: xmd9)只需要把ncm拖进main.exe就可以了

写到这里,默默大喊一句,开源大法好!

NCM文件格式和解密代码分析

由于第一个搜索到的项目是lianglixin / ncmdump,所以我们以lianglinxin作者的python代码为基础来进行分析,参考nondanee作者的代码注释来理清思路。测试的ncm文件是郭顶 - 水星记.ncm(提取码:5ua0),字节查看器为UltraEdit。

整个文件就一个函数dump(file_path),下面进行分段分析。

core_key = binascii.a2b_hex("687A4852416D736F356B496E62617857") meta_key = binascii.a2b_hex("2331346C6A6B5F215C5D2630553C2728") unpad = lambda s : s[0:-(s[-1] if type(s[-1]) == int else ord(s[-1]))] f = open(file_path,'rb') header = f.read(8) assert binascii.b2a_hex(header) == b'4354454e4644414d'

定义了core_key和meta_key,binascii.a2b_hex的意思就是把这个字符串按照十六进制反解析为二进制字节序列(bytes类型),可以用ascii字符来表示,b2a则进行相反操作。如果对ascii码不熟悉可以查表,比如0x68=h,0x7A=z,所以:

core_key = b'hzHRAmso5kInbaxW'

meta_key = b"#14ljk_!\\]&0U



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3