学会NCM文件转MP3 您所在的位置:网站首页 网易云怎么用手机下载mp3格式的音乐 学会NCM文件转MP3

学会NCM文件转MP3

2023-06-07 15:10| 来源: 网络整理| 查看: 265

不多说,就因为VIP的歌曲是ncm格式,狠狠地割了我韭菜!

我在使用网抑云听音乐,然后充了VIP,别问,问就是因为我喜欢听冷门歌曲,不然早就用QQ音乐了不是? (无拉踩)

搜来搜去,发现有爱心人士开发了多种格式转换音乐的网站:

这里就是

懒狗看到这里已经可以划走了,剩下的是给能折腾的。

但是奈何网站打包成zip真的巨慢巨慢,一个一个下载有一种在打工的感觉,虽然可以白嫖(对不起我真的没打赏),但是还是想自己用的方便些,所以又跑到github上搜刮别人剩下来的代码,有各种各样的,C#、PHP、python、java的,思来想去,我安装了那么多虚拟环境,而且好像也不用图形界面(难得不用卷图形界面),所以打算采用python脚本批量处理,最后直接用bat文件实现自动化处理,岂不美哉?

最近玩星穹铁道玩得头昏脑花,也不是没有学习,就是很难再遇上一个有阴阳师感觉的游戏,一下子带我回到初一刚刚玩手游的时候了。后天就要去地狱实训厂实习了,也不知道能快活几天?

我参考的主要有两个佬的代码,一个是java佬的,一套成型的图形化附带一篇解释说明,一个是python佬的主代码,我自己按照自己的需求稍微修改了下。

java佬 python佬

我一开始的时候没有感觉有什么不对,安装了ffmpeg之后就直接上,然后它直接抛出编码错误给我,我才明白过来,那么简单就给你解码了,那还玩什么VIP?? 后来知道了ncm是分段加密的,包含几种主流密码的加密,密钥应该是被佬破解出来的,知道密钥和算法之后,就可以愉快的解密了!

我原来学过密码学,所以看得差不多,不知道的小伙伴也不用太担心,因为你不写论文设计加密的话,也不需要知道太详细,知道原理然后会用就行。

这里附上java佬的解析,写得很好,我也不改了。因为我懒。(我就烂)

信息大小备注Magic Header10 bytes跳过KEY Length4 bytes用AES128加密RC4密钥后的长度(小端字节排序,无符号整型)KEY From AES128 DecodeKEY Length(其实就是128 bytes)用AES128加密的RC4密钥(注意:1.按字节对0x64异或2.AES解密(其中PKCS5Padding填充模式会去除末尾填充部分;)3.去除前面neteasecloudmusic17个字节;Mata Length4 bytesMata的信息的长度(小端字节排序,无符号整型)Mata Data(JSON)Mata LengthJSON的格式的Mata的信息(注意:1.按字节对0x63异或;2.去除前面163 key(Don't modify):22个字节;3.Base64进行decode;4.AES解密;5.去除前面music:6个字节后获得JSON)CRC校验码4 bytes跳过Gap5 bytes跳过Image Size4 bytes图片大小ImageImage Size图片数据Music Data-RC4-KSA生成s盒,RC4-PRGA解密

它应该是设计了一套专门解密的系统在软件里面,然后匹配这个来解密播放,但是我想知道为什么密钥是固定的,这样不就被别人破解了吗???真懒啊,因为这样就不用存那么多密钥了,大部分人也不知道怎么破解吧.....一个是懒得知道,一个是因为觉得没有必要,呃,但是我购买了服务竟然还是不干净的,好歹给我源数据吧,密钥我自己存着不就好了?

进入正题

没安装这个密码库的需要安装在你的环境/虚拟环境里面:

pip install pycryptodome 方案1:手动运行脚本

固定文件夹是这样的:你的主文件下放两个文件夹,一个放ncm后缀文件,一个mp3后缀文件。

运行代码之后,就会把ncm文件夹里所有歌转成mp3格式放到mp3文件夹里。

命名为convert_ncm_to_mp3.py放置在convert_ncm_to_mp3文件夹下。

出问题的话请照这里做。

# 注意ncm是加密过的 所以使用ffmpeg只能对没有加密的处理 import binascii import struct import base64 import json import os from Crypto.Cipher import AES def run(input_file, out_file): ncm_files = [file for file in os.listdir(input_file) if file.lower().endswith('.ncm')] for ncm_file in ncm_files: file_path = os.path.join(input_file, ncm_file).replace('\\', '/') dump(file_path, out_file) song_name = file_path.split('.')[1] song_name = song_name.split('/')[2] print('{}.ncm 文件转换成 {}.mp3 文件完成!'.format(song_name,song_name)) print("批量转换完成!") def dump(file_path,out_path): # 687A4852416D736F356B496E62617857 (Hex) -> hzHRAmso5kInbaxW (Text) core_key = binascii.a2b_hex("687A4852416D736F356B496E62617857") # 2331346C6A6B5F215C5D2630553C2728 (Hex) -> #14ljk_!\]&0U


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有