需要帮助从 .dat 文件中提取数据

逆向工程 文件格式
2021-06-10 00:51:07

https://dl.dropboxusercontent.com/u/247623/item.dat 这是来自Java游戏的文件,我想知道如何从中读取字符串数据。

我宁愿只给我提示。

我使用十六进制编辑器对其进行了研究,并得出结论,由于缺少模式,该文件要么被压缩,要么被加密。

如果它是加密的,我不知道如何继续。如果它被压缩,我发现了以下内容,但不知道如何进行。

熵 = 每字节 7.999055 位。

最佳压缩会将这个 384802 字节文件的大小减少 0%。

384802 个样本的卡方分布为 505.10,随机超过该值的次数少于 0.01%。

数据字节的算术平均值为 128.1314(127.5 = 随机)。Pi 的蒙特卡罗值为 3.120328068(误差 0.68%)。序列相关系数为 -0.031097(完全不相关 = 0.0)。

假设我对自己的工作知之甚少,因此可能需要一些提示。可应要求提供更多信息。

提前致谢!

2个回答

小菜一碟:这是 ZIP 兼容的压缩编译 Java。标题附近有没有熟悉的字节序列?

FA CE AF 0E 10 00 10 00 78 9C AC DD ..

.. 前几个字节看起来像 Java 的魔法 ID CA FE BA BE,但谷歌搜索该序列不会产生任何结果,无论如何它可能是一个红鲱鱼。接下来:10 00 10 00,它可以是任何东西(不是文件长度,但可能是一些内部标志或 ID)。

下一个:78 9C这些都很熟悉,它们可能会形成一组 ZLIB 兼容的压缩标志。一个快速而肮脏的 ZLIB 解包器给了我 (1) 一个肯定的解包结果(意味着这个数据有效的压缩数据并且可以解压缩),以及(2)一个比输入大得多的输出文件(1,388,603 字节与原始384,802)。

检查解压后的数据,我在开始时发现了这一点:

01 09 00 31 5B 4C 63 6F 6D 2E 74 68 72 65 65 72 69 6E 67
73 2E 70 72 6F 6A 65 63 74 78 2E 69 74 65 6D 2E 63 6F 6E

或者,在 ASCII 中,

...1[Lcom.threering
s.projectx.item.con

——足以断定它已成功解压。从现在开始,您应该能够使用常见的 Java 解密/反编译技术。

很难区分压缩良好的数据(例如 LZMA)和加密良好的数据(例如 AES)。我已经做了一点分析,在过去然而,发现了大量的压缩数据可以加密数据基于熵分析区分开来,因为很明显你已经做了。

但是,我会先采用更简单的方法。在文件中查找常见的“魔法”字符串和/或标头,例如用于 gzip、zlib 和 lzma 的那些。可能是游戏开发人员使用了标准压缩,他们刚刚为他们的应用程序添加了自定义标头。