我应该如何确定这个音频文件的格式?

逆向工程 文件格式
2021-06-16 04:09:09

我有一个未知格式的音频文件。我应该如何尝试确定其格式?

另外,是否可以通过手动观察而不使用任何自动化工具来做到这一点?

3个回答

至于自动化方法,file 命令是经典推荐。它是一种尝试从文件中包含的数据中猜测文件类型的工具。它通过libmagic实现了许多众所周知的文件格式签名如果您有一个复合文件,您可以尝试binwalk,它会尝试将文件作为较大文件的子集查找。

如果您想走手动路线,您需要将文件的某个子集与已知的签名或模式相匹配。这尤其适用于可能被压缩的文件格式,因为数据模式将不那么规则。因此,您通常需要在文件结构中找到一个模式,通常称为签名或指纹。大多数文件格式在文件的页眉或页脚中都有幻数,以便程序可以轻松检查它们将要加载的文件类型。对于众所周知的文件签名,有一些很好的资源:

像往常一样,彼得的建议非常好。我想补充几点。

  • 如果您可以访问使用该格式的某些程序,您总是可以对其进行逆向工程,以便找出有关该格式的详细信息,甚至只是它正在寻找的签名(假设例如它包含声音样本但它是专有的并且不是很好-已知格式)
    • 这也可能提供有关用于访问格式的库的线索,从而提供有关格式的线索(想想 IDA FLIRT/FLAIR)
  • 否则像VLC这样的媒体播放也可能是找出细节(Ctrl+JCtrl+ I的好方法也就是说,您只需尝试打开它,然后查看播放器可以为您提供哪些媒体信息。好的播放器不会强迫您在打开文件之前在文件上粘贴特定的文件扩展名。但要警惕潜在的漏洞利用(即在沙盒环境中进行)

除了其他答案中的好建议之外,这里还有一些针对音频的建议:

  • 如果您知道音频的播放时间(大致),请计算音频文件的近似比特率。这将告诉您它是否被压缩,压缩率可以大致告诉您可能要处理的内容。例如,4kbps~32kbps 表示语音编解码器,64~256kbps 是普通压缩音频(AAC/MP3/Ogg Vorbis),512~3072kbps 可能表示无损编解码器,显着更高表示未压缩或弱压缩(例如 ADPCM、 PCM) 音频。反过来,这可能会提示您了解它包含的内容(语音、音乐、音效等)。
  • 如果您怀疑它可能被弱压缩,请尝试在您最喜欢的音频编辑器(例如 Audacity)中将文件作为原始 PCM 流打开并收听。如果以任何方式压缩,可能会产生大量的噪音,但如果某些格式(例如 ADPCM)的比特率相对恒定,则在这种情况下仍然可以听到它们。我过去曾使用这种策略来计算我收到的(仍然未知的)音频样本的口语内容。事实上,这种策略甚至可以通过利用人类模式识别来揭示未加密、未压缩文件的内容。
  • 检查文件中的元数据块 -- strings,在十六进制编辑器中快速检查文件的第一个和最后一个块,或者只是搜索您可能希望看到的字符串。