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

还可以通过手动观察而不使用任何自动化工具来做到这一点吗?

#1 楼

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

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


Garry Kesslers的文件签名列表
维基百科的文件签名列表
文件签名数据库


#2 楼

像往常一样,彼得的建议很棒。我想补充一点。


如果您可以使用该格式访问某些程序,则可以始终进行反向工程以找出有关格式的详细信息,甚至只是它正在寻找的签名(例如,假设它包含声音样本,但是是专有且不为人所知的格式)

这也可能提供有关用于访问该格式的库的线索,从而依次访问提供有关格式的线索(请考虑使用IDA FLIRT / FLAIR)


否则,诸如VLC之类的媒体播放器也可能是找出细节的好方法(Ctrl + J和Ctrl + I) 。也就是说,您只是尝试打开它,然后查看播放器可以为您提供哪些媒体信息。好的播放器不会强迫您在打开文件之前在文件扩展名上粘贴特定的文件扩展名。但是要警惕潜在的攻击(即在沙盒环境中进行攻击)


#3 楼

除了其他答案中的建议以外,以下是一些针对音频的建议:


如果您知道音频的播放时间(大约),请计算大概的比特率音频文件。这将告诉您是否已压缩,压缩率可以大致告诉您可能要处理的内容。例如,4kbps〜32kbps表示语音编解码器,64〜256kbps表示普通压缩音频(AAC / MP3 / Ogg Vorbis),512〜3072kbps可能表示无损编解码器,而更高的表示未压缩或弱压缩(例如ADPCM, PCM)音频。反过来,这可能会提示您包含的内容(语音,音乐,声音效果等)。
如果您怀疑它的压缩程度较弱,请尝试以您喜欢的音频中的原始PCM流打开文件编辑(例如Audacity)并收听。如果以任何方式进行压缩,可能会产生疯狂的噪音,但是,如果某些格式(例如ADPCM)的比特率相对恒定,则在这种情况下仍然可以听到。过去,我一直使用这种策略来计算我收到的(仍然未知)音频样本的语音内容。确实,这种策略甚至可以通过利用人为模式识别来揭示加密不佳,未压缩的文件的内容。十六进制编辑器,或者只是搜索您可能希望看到的字符串。