我正在编写一个用于分析.wav音频文件并提取元数据的应用程序。下图显示了基于RIFF的文件的元数据的工作方式:

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

#1 楼


在IDA Pro中打开二进制文件。
搜索0x534D4544,它是SMED标签的32位编码。其中三个是mov指令,两个是cmp指令。后两个是有趣的。这是比较子块ID标签的地方。它们都在一个名为-[SMMDScanner getSMMetadata:signature:]的函数中。
您立即发现它使用固定密钥“ u7w58he4746”在ECB模式下使用Blowfish解密数据。 (解密前不要丢弃前四个字节,因为它们只是以下加密数据的(大端)长度。)
立即您还看到解密后的数据在NSString中返回,通过查看周围代码中的字符串,其中显然包含XML数据。例如。它确保解密的数据以<MAGIC>开头,以</MAGIC>结尾。


评论


这个答案超出了所有范围,因此感谢您的时间和精力

–kernelpanic
20-11-11的1:53

#2 楼

由于您可以访问生成数据的程序,因此可以将其用作oracle:


使用空的描述字符串制作文件


用一个字母描述另一个字母


转储两个文件并查找差异。然后开始添加更长的描述,并检查它如何影响输出。继续努力,直到找出所有可以想到的变化形式。