您需要具有“格式”和“数据”子块,但随后您可以在子块中拥有任意数量的子块。文件。要提取特定子块,请转到第一个子块,读取其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>
结尾。#2 楼
由于您可以访问生成数据的程序,因此可以将其用作oracle:使用空的描述字符串制作文件
用一个字母描述另一个字母
转储两个文件并查找差异。然后开始添加更长的描述,并检查它如何影响输出。继续努力,直到找出所有可以想到的变化形式。
评论
这个答案超出了所有范围,因此感谢您的时间和精力
–kernelpanic
20-11-11的1:53