我正在做一个关于一些游戏数据文件的爱好项目。我想编辑其中的一些内容并重新打包,以便游戏接受修改。
目录本身以易于打开的专有格式存档。这些文件是用 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,后面都是偏移量和长度。偏移量和长度值是大端的。
该文件本身似乎是类型长度值编码的(人类可读的字符串属于 CLAS 标题)或 4 字节块中的类型不同的类型值。有 4 个字节块,例如 AA AA AA AA、AB AB AB AB 或 BB BB BB BB,它们可能用作分隔符。
有很长的数据部分除了一个字节增加 1 之外没有任何变化。看起来像排序索引。
文件数据可能包含各种数据类型。
我有机会比较两个不同版本的数据文件。更改未序列化文件中的 int 值会导致序列化文件中的更改非常小(通常在原始文件中更改一个数字会导致结果文件中更改一个十六进制值)。
该格式非常节省空间。大多数内容都是 4 字节的块,文件可压缩 10 倍。这和字符串的人类可读性让我相信文件没有以任何方式压缩或加密。它只是以某种方式序列化。
任何帮助是极大的赞赏。