Files
ncmmiao/README.md

116 lines
3.2 KiB
Markdown
Raw Normal View History

2024-02-08 01:26:49 +08:00
# NcmMiao :tada:
2024-08-17 22:30:42 +08:00
[![build](https://github.com/Lkhsss/NcmMiao/actions/workflows/build.yml/badge.svg?event=push)](https://github.com/Lkhsss/NcmMiao/actions/workflows/build.yml)
2025-03-15 17:09:57 +08:00
一个使用Rust语言编写的ncm文件解密工具😆。
2024-02-08 01:26:49 +08:00
### 功能及特点
- 支持单一文件,多文件夹递归批量解密。
- 完善的日志功能
- Colorful
- 编译文件小,解密快
2025-03-15 17:09:57 +08:00
- 支持自动添加封面!
- 自动打开输出文件夹
- 简约美观
## 编译
```
cargo build -r
```
## 使用
支持单一文件,多文件夹递归批量解密。
```
Usage: ncmmiao [OPTIONS]
2024-11-17 02:35:24 +08:00
Options:
-w, --workers <WORKERS> 并发的最大线程数默认为cpu核心数
2025-03-23 01:05:07 +08:00
-i, --input <输入文件/目录> 需要解密的文件夹或文件
-o, --output <输出目录> 输出目录 [default: NcmmiaoOutput]
-f, --forcesave 强制覆盖保存开关
-a, --autoopen 自动打开输出目录
-n, --nocolor 是否关闭彩色输出。在不支持真彩色的老机型中关闭。
-d, --debug... 设定输出日志的的等级。v越多日志越详细
-h, --help Print help
-V, --version Print version
```
### 例
文件位于`D:/Music`要求使用64线程并且完成后自动打开文件夹不强制覆盖保存
```bash
ncmmiao -i "D:/Music" -w 64 -a
```
### 关于`覆盖保存`
覆盖保存用于当解密进行一半时突然终止程序,不知道程序是否已解密完成时启用,可以强制覆盖已存在的文件,保证文件完整性。
### 关于日志系统
日志共六个等级: Error Warn Info Debug Trace
v越多日志越详细。
仅输出错误的日志 Error
```bash
ncmmiao -v
```
输出警告以上的日志 Warn
```bash
ncmmiao -vv
```
输出提示以上的日志 INFO (默认)
```bash
ncmmiao -vvv
```
以此类推
2024-02-08 01:26:49 +08:00
---
# TODO :construction:
- [x] 多线程支持
2024-11-17 02:35:24 +08:00
- [x] 自动添加封面
- [x] 解密进度条
2024-11-17 02:35:24 +08:00
- [x] 命令行解析
- [x] 自定义输出文件夹
- [x] 计时功能
- [x] 自动覆盖开关
2025-08-12 22:27:40 +08:00
- [x] 优化并发设置
- [x] 优化信息传递
- [x] 颜色控制
2024-02-08 01:26:49 +08:00
---
2025-03-15 16:17:33 +08:00
# [Changelog](CHANGELOG.md)
---
# 附 - ncm文件结构
|信息|大小|作用|
|:-:|:-:|:-:|
|Magic Header|8 bytes|文件头|
|Gap|2 bytes||
|Key Length|4 bytes|RC4密钥长度字节是按小端排序。|
|Key Data|Key Length|RC4密钥|
|Music Info Length|4 bytes|用AES128加密后的音乐相关信息的长度小端排序。|
|Music Info Data|Music Info Length|Json格式音乐信息数据。|
|Gap|5 bytes||
|CRC校验码|4 bytes|图片的CRC32校验码小端排序。|
|Image Size|4 bytes|图片的大小|
|Image Data|Image Size|图片数据|
|Music Data||音乐数据|
---
### Magic Header
### Key Data
用AES128加密后的RC4密钥。
1. 先按字节对0x64进行异或。
2. AES解密,去除填充部分。
3. 去除最前面'neteasecloudmusic'17个字节得到RC4密钥。
### Music Info Data
Json格式音乐信息数据。
1. 按字节对0x63进行异或。
2. 去除最前面22个字节。
3. Base64进行解码。
4. AES解密。
6. 去除前面6个字节后面数量为最后一个字节的字节数的垃圾数据得到Json数据。
### Music Data
1. RC4-KSA生成S盒。
2. 用S盒解密(自定义的解密方法)不是RC4-PRGA解密。