Python 版本的音乐解密工具
Project description
Takiyasha
Takiyasha 是一个用来解密多种加密音乐文件的工具。
本项目是以学习和技术研究的初衷创建的,修改、再分发时请遵循 License。
Takiyasha 的设计灵感,以及部分解密方案,来源于 Unlock Music Project - CLI Edition。
Takiyasha 对输出数据的可用性(是否可以识别、播放等)不做任何保证。
重要事项
在此分支中,包的结构和行为已经发生了翻天覆地的变化,因此不再兼容为之前的版本编写的工具。
此分支中的版本,相较于之前版本,命令行调用参数有了重大变化。如果你有正常使用的需求,请谨慎升级。
如果你不小心更新到了从此分支发布的版本,按照以下步骤回滚至最后一个稳定版本 v0.4.2:
- 卸载:
pip uninstall takiyasha
- 安装 v0.4.2:
pip install -U takiyasha==0.4.2
特性
- 跨平台:使用 Python 3 编写,只要系统中存在 Python 3.8 及以上环境,以及任意包管理器,就能安装并使用
- 支持多种加密音乐文件格式,点击此处查看详情
- 针对主要功能,有完善的代码内文档
- 作为 Python 库使用时,支持解密和反向加密(实验性功能,仅支持部分加密类型)
- 命令行调用方式(仅限解密)
- 自动根据文件内容探测文件的加密类型
- 自动补充解密后文件的标签信息(包括封面)
- 多文件并行处理
支持的加密文件格式
- QQ 音乐
.qmc*
.mflac*
.mgg*
- 为以下加密文件提供部分支持:
- 从版本 18.57 及之后的 QQ 音乐 PC 客户端下载的
.mflac*
/.mgg*
文件 - 从版本 11.5.5 及之后的 QQ 音乐 Android 客户端下载的
.mflac*
/.mgg*
文件
- 从版本 18.57 及之后的 QQ 音乐 PC 客户端下载的
- 网易云音乐
.ncm
.uc!
(网易云音乐客户端的加密缓存文件)
如何安装
Python 版本需求:大于等于 3.8
需要的依赖项:
pyaes
:AES 加解密支持
从 Pypi 安装(推荐)
执行命令:pip install -U takiyasha
从本仓库安装
执行命令:pip install -U git+https://github.com/nukemiko/takiyasha@remaked
安装最新发布版本
- 进入此页面,下载最新版本
- 下载 Wheel 安装包(扩展名为
.whl
的文件) - 下载完毕后,执行命令:
pip install -U /path/to/package.whl
如何使用
命令行环境
简单易用:
python -m takiyasha 1.ncm 2.qmcflac 3.mflac 4.mgg ...
如果尝试解密“仅部分支持”的文件:
python -m takiyasha --lf hell.mflac damn.mgg
如果不加其他参数,解密成功的文件将会在当前工作目录下产生。
使用 -h, --help
获取完整的帮助信息。
作为 Python 库使用
示例:
import takiyasha
files = [
'source.ncm',
'source.qmcflac',
'source_dynamic_map.mflac0',
'source_rc4.mflac',
'source_unsupported_keyformat.mflac',
'is_ncm.unknown',
'source_no_encrypted.flac'
]
for (idx, filename) in enumerate(files, 1):
try:
crypter = takiyasha.openfile(filename) # 打开一个加密文件 filename
if crypter is None:
# 如果 crypter 为 None,说明未能根据文件名判断加密文件类型
# 因此要加上参数 detect_content=True
print(f"'{filename}':无法根据文件名探测加密类型,切换到根据内容探测")
crypter = takiyasha.openfile(filename, detect_content=True)
if crypter is None:
print(f"'{filename}':仍然无法探测到加密类型,尝试使用 QMCv2 后备方案")
# 'source_unsupported_keyformat.mflac' 是从版本 18.57 的 QQ 音乐 PC 客户端下载的文件,仅提供部分支持
# 直接打开会引发 UnsupportedFileType 异常,需要使用基异常 TakiyashaException 捕获
# 然后加上参数 legacy_fallback=True 使用后备方案再次尝试
crypter = takiyasha.openfile(filename, legacy_fallback=True)
if crypter is None:
# 如果 crypter 仍然为 None,说明此文件非已知加密文件,跳过
print(f"'{filename}':跳过,非已知加密格式")
continue
print(f"'{filename}':已打开文件,加密类型:{crypter.__class__.__name__}")
except takiyasha.TakiyashaException:
continue
audio_format = takiyasha.sniff_audio_file(crypter)
if audio_format is None:
audio_format = 'unknown'
save_filename = f'target{idx}.{audio_format}'
with open(save_filename, 'wb') as f:
print(f"'{filename}' -> '{save_filename}':打开输出文件并写入")
crypter.seek(0, 0)
f.write(crypter.read())
输出:
'source.ncm':已打开文件,加密类型:NCM
'source.ncm' -> 'target1.flac':打开输出文件并写入
'source.qmcflac':已打开文件,加密类型:QMCv1
'source.qmcflac' -> 'target2.flac':打开输出文件并写入
'source_dynamic_map.mflac0':已打开文件,加密类型:QMCv2
'source_dynamic_map.mflac0' -> 'target3.flac':打开输出文件并写入
'source_rc4.mflac':已打开文件,加密类型:QMCv2
'source_rc4.mflac' -> 'target4.flac':打开输出文件并写入
'source_unsupported_keyformat.mflac':无法根据文件名探测加密类型,切换到根据内容探测
'source_unsupported_keyformat.mflac':仍然无法探测到加密类型,尝试使用 QMCv2 后备方案
'source_unsupported_keyformat.mflac':已打开文件,加密类型:QMCv2
'source_unsupported_keyformat.mflac' -> 'target5.flac':打开输出文件并写入
'is_ncm.unknown':无法根据文件名探测加密类型,切换到根据内容探测
'is_ncm.unknown':已打开文件,加密类型:NCM
'is_ncm.unknown' -> 'target6.flac':打开输出文件并写入
'source_no_encrypted.flac':无法根据文件名探测加密类型,切换到根据内容探测
'source_no_encrypted.flac':仍然无法探测到加密类型,尝试使用 QMCv2 后备方案
'source_no_encrypted.flac':跳过,非已知加密格式
验证输出文件:
target0.flac: FLAC audio bitstream data, 16 bit, stereo, 44.1 kHz, 12560268 samples
target1.flac: FLAC audio bitstream data, 24 bit, stereo, 96 kHz, 19664640 samples
target2.flac: FLAC audio bitstream data, 16 bit, stereo, 44.1 kHz, 10584000 samples
target3.flac: FLAC audio bitstream data, 16 bit, stereo, 44.1 kHz, 6718488 samples
target4.flac: FLAC audio bitstream data, 16 bit, stereo, 44.1 kHz, 11802924 samples
target5.flac: FLAC audio bitstream data, 24 bit, stereo, 44.1 kHz, 11862915 samples
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file takiyasha-0.6.0.dev2.tar.gz
.
File metadata
- Download URL: takiyasha-0.6.0.dev2.tar.gz
- Upload date:
- Size: 28.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.6.0 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 88465c2b9db1dd1257d8c66df5fcfe1da57b85a700e7c8fac102755f45f05852 |
|
MD5 | b97830b73b06921ee5a1c45f76a49a59 |
|
BLAKE2b-256 | f857a1f2ecfb0664698c44a91286fb825e686ca9af92a867f0f2878e8fd5db30 |
File details
Details for the file takiyasha-0.6.0.dev2-py3-none-any.whl
.
File metadata
- Download URL: takiyasha-0.6.0.dev2-py3-none-any.whl
- Upload date:
- Size: 31.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.6.0 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a45b9275bb006f4a68f304f2543ceaebd502b5d00dbc291070e63d6b6ef05302 |
|
MD5 | 6b20e054827625f2f9c968298e235118 |
|
BLAKE2b-256 | cde90ddf5c7ece2eb67701b1492e3e07cf5d5a079f08eed80c1e23155c4feadf |