我正在编写一个应用程序来分析 .wav 音频文件并提取元数据。元数据适用于基于 RIFF 的文件的方式如下图所示:
您需要有“格式”和“数据”子块,但是您可以在文件中拥有任意数量的子块。要提取特定的子块,请转到第一个子块,读取它的 ID,如果它不是您要查找的 ID,则获取子块大小,然后跳到下一个子块 ID。
“开放”子块的其他示例是 iXML 和 ID3。我特别希望阅读的是 Soundminer,这是一个可搜索的数据库程序。它们的子块 ID 是“SMED”,因此我能够找到它并复制其元数据的内容。由于它是一个封闭的子块,我很难将这些数据转换成可读的格式。
话虽如此,我可以访问 Soundminer,因此我可以在 SMED 元数据中写入特定字符串,希望稍后在数据转储中解密。
由于我对此完全陌生,因此我正在寻找有关对该元数据进行逆向工程的最佳策略的建议。它是一个巨大的子块,能够存储图像和波形缓存。我希望获得一些更简单的数据,例如“描述”和“麦克风”。
我在 macOS 上,因此可能会限制我的方法。此外,该应用程序正在 swift 中编写,但我目前的方法是将该数据的十六进制值转储到文本文件中并手动查找模式,我已经能够看到一些模式。例如,如果我在描述中写入字母“a”,然后分析文件,我将得到相同的重复 16 位值09 14 c2 0c c3 0f 9f 8c
,但如果我只输入一个“a”,则该值不存在。似乎需要“aaaaaaaa”才能给我09 14 c2 0c c3 0f 9f 8c
. 显然,这是一个有缺陷的策略,不太可能产生结果。