如何找出正在使用的存档格式?

时间:2013-03-19 23:08:00

标签: serialization

我正在做一些游戏数据文件的爱好项目。我想在其中编辑一些内容并重新打包,以便游戏接受修改。

目录本身以专有格式存档,这很容易打开。这些文件是用zlib压缩的。现在我很难过,因为似乎还有(至少)还有一层归档。文件似乎是序列化的,但查找最常见的明显答案并没有成功。谷歌没有帮助。我没有找到任何魔法字节(并不意味着没有任何,我只是没有找到任何)。如何进行商业化,如何找出序列化格式?如果不是,我该如何处理这个问题呢?

一点背景:

  • 该文件由Windows上的Visual C ++应用程序读取
  • 我认为文件预序列化是类似XML的
  • 我已经反编译了.exe,尝试在读取数据文件的同时执行该过程没有成功(它读取了7Gb的数据,我无法找到我想要工作的文件类型的开头用)。钓鱼有用的字符串也没有用。
  • 我尝试过比较Python pickle,marshal,VC ++ MFC marshal和各种归档程序格式。没运气。

序列化文件的独特功能:

文件末尾有一个目录。看起来像这样:

TOC0 4个字节的偏移量 4个字节的长度 OBJE 8个字节的偏移量 8个字节的长度

等等。 TOC中的其他标题是TOPO,CHNK,CLAS,PROP,STRG,TRAN,IMPR和EXPR,其次是偏移量和长度。偏移和长度值是big-endian。

文件本身似乎是类型长度值编码(人类可读的字符串属于CLAS标题)或类型不同的类型值(4字节块)。有4个字节的块,如AA AA AA AA,AB AB AB AB或BB BB BB BB,它们可能作为分隔符。

有很长一段时间的数据没有任何变化,只有一个字节增加1.看起来像是一个排序索引。

文件数据可能包含各种数据类型。

我有机会比较两个不同版本的数据文件。更改未序列化文件中的int值会导致序列化文件中的更改非常小(通常在原始前导中更改一个数字,在结果文件中更改一个十六进制值)。

格式空间效率极低。大多数都是4字节块,文件可压缩10倍。字符串的这种和人类可读性使我相信文件没有以任何方式压缩或加密。它只是以某种方式序列化。

非常感谢任何帮助。

0 个答案:

没有答案