[Enhancement] ncm 格式 parse 猜测 #67

Open
opened 2023-02-23 15:44:27 +00:00 by LemonPrefect · 4 comments
  1. 参照项目中的 Parser 代码可以发现在 Header 中存在两字节 seek,分别对 Android 和 PC 端生成的文件比对可以发现其二者分别为 01 6101 70,因此猜测其用于表示不同的客户端版本。
  2. 对于项目中在 meta 和 cover 之间 seek 越过的 5 字节 Gap,根据众多结构分析,其中应该包含了正确的 CRC32 校验,而其后紧跟 1 字节不变的 01,而后 cover 的长度重复两次。
    image
    但是 CRC32 校验的是何字段尚不明晰,因此无法确定该部分的具体用途以及为何此时 cover 的长度重复。

如图是我正在试图编写的 010 Editor Template,其旨在帮助完整地分析该类文件结构。不知是否能一起明确上述部分以更好地分析文件。

1. 参照项目中的 Parser 代码可以发现在 Header 中存在两字节 seek,分别对 Android 和 PC 端生成的文件比对可以发现其二者分别为 `01 61` 和 `01 70`,因此猜测其用于表示不同的客户端版本。 2. 对于项目中在 meta 和 cover 之间 seek 越过的 5 字节 Gap,根据众多结构分析,其中应该包含了正确的 CRC32 校验,而其后紧跟 1 字节不变的 `01`,而后 cover 的长度重复两次。 ![image](/attachments/b6ad1b85-31e0-482f-875c-6228bf496773) 但是 CRC32 校验的是何字段尚不明晰,因此无法确定该部分的具体用途以及为何此时 cover 的长度重复。 如图是我正在试图编写的 010 Editor Template,其旨在帮助完整地分析该类文件结构。不知是否能一起明确上述部分以更好地分析文件。
Owner

以前写过一个模板,不过 crc 部分也是看别人写的,具体怎么样也不清楚。

https://github.com/parakeet-rs/parakeet-crypto-rs/blob/main/scripts/010editor/NCM.bt

以前写过一个模板,不过 crc 部分也是看别人写的,具体怎么样也不清楚。 https://github.com/parakeet-rs/parakeet-crypto-rs/blob/main/scripts/010editor/NCM.bt
Owner

至于重复的 cover length,我怀疑是可以指定多个 cover,因此第一个长度是整个区块的长度,而第二个是图片的长度。

当然,我没逆过他的主程序,因此也不知道具体是怎么实现的。

至于重复的 cover length,我怀疑是可以指定多个 cover,因此第一个长度是整个区块的长度,而第二个是图片的长度。 当然,我没逆过他的主程序,因此也不知道具体是怎么实现的。
Author

以前写过一个模板,不过 crc 部分也是看别人写的,具体怎么样也不清楚。

https://github.com/parakeet-rs/parakeet-crypto-rs/blob/main/scripts/010editor/NCM.bt

了解了,正在试图从 dll 逻辑跟进这部分。

> 以前写过一个模板,不过 crc 部分也是看别人写的,具体怎么样也不清楚。 > > https://github.com/parakeet-rs/parakeet-crypto-rs/blob/main/scripts/010editor/NCM.bt 了解了,正在试图从 dll 逻辑跟进这部分。
Author

此部分证实是 cover 之前的所有数据的分段特殊 CRC。因为不涵盖音频内容的校验,而本项目主要是获取音频,因此实现意义不大。

此部分证实是 cover 之前的所有数据的分段特殊 CRC。因为不涵盖音频内容的校验,而本项目主要是获取音频,因此实现意义不大。
jixunmoe added the
documentation
label 2023-05-07 02:01:38 +00:00
Sign in to join this conversation.
No description provided.