我在https://drive.google.com/file/d/10Fqr6Ipu2J8yKU_m3-EMzsVj7XeSYEdV/view?usp=sharing获得了一个文件。从https://hexed.it/打开它显示它很可能是一个 mp3 文件(基于文件末尾的 ID3 信息)。任务是恢复文件头,以便我们能够打开它(大概在音乐播放器中)。任何线索将不胜感激。
我注意到文件头是空字节,因此我尝试从工作 mp3 文件中复制起始字节。还尝试将带有清晰文本的最后几个字节移动到文件的开头。这些都不起作用。
MP3 文件没有强制标头;它们只是一系列原始的 MPEG 音频帧,每个帧都有自己的 4 字节迷你标头(a、b)。其他一切都是额外的。(甚至 ID3 标签和 LAME 标头(两者都是后来添加的)也被伪装成无效帧,大多数玩家现在都知道要忽略它们。)
此外,帧格式是自同步的 - 您可以在任何点剪切它,解码器将忽略开头的垃圾半帧,寻找同步位
0xFFF
以找到下一帧的开始。这意味着您可以将 MP3 文件的任意随机片段扔到解码器中,它就会播放;如果不是,那么它很可能根本就不是 MP3 文件。我的结论是你的文件不是MP3;它是使用 ID3 标记格式的其他东西(罕见但并不罕见)。更重要的是,文件的结尾位看起来不太像ID3标记 – 许多 4 字母块标识符并不像 ID3v2 的典型情况那样以“T”开头;在我看来,它们更像是您在AIFF或WAV/RIFF等分块格式中发现的内容(这两种格式确实都嵌入了 ID3 标签!),但在 MP3 中则不然。
(嗯,是的,ID3 标签本身也是一种分块格式 - 但 MP3 总体上不是,这才是重点。)
除了 IFF 及其 AIFF/RIFF 衍生品之外,还有相当多其他标记/分块格式,例如 PNG 以及 ISO BMFF(用于 MP4/HEIF/AVIF 文件)在概念上类似,但在你的文件 –
LIST
,INFO
– 是独特的 RIFF,用于各种与 Windows 相关的格式:.wav 用于音频,.avi 用于视频,.ani 用于动画鼠标光标等。data
最开始附近很可能也是一个块标签。在这些 RIFF 子格式中,
IART
(艺术家)、ICRD
(日期)、IGNR
(流派)、id3␣
(嵌入 ID3 标签)块是 WAV 文件的典型块。缺少的是顶层RIFF
块(可能是块的一部分fmt␣
),这会阻止玩家识别该文件。fmt␣
与另一个 .wav 文件相比,偏移量 0x10 确实看起来像块的完整内容,因此丢失的前八个字节应该如下所示:…空白部分是顶层块的长度(或 0xFFFFFFFF 表示“整个文件”)。整体结构应该是这样的:
如果您尝试修复标头,请使用
fq
检查它(这也适用于实际的 MP3 文件和其他常见格式):或者,由于您确实拥有包含全部 PCM 数据(长度为 4 字节)的整个
data
块,因此仅提取该部分并通过强力尝试各种原始 PCM 格式可能会更容易(没有那种方法)多种组合)。