4

我玩的游戏将其所有数据存储在 .DAT 文件中。人们在检查文件方面做了一些工作。还有一些现有的工具,但我不确定它们的当前状态。我认为自己在数据中四处寻找会很有趣,但我从未尝试过检查文件,更不用说以前这样的事情了。

在我一头扎进去之前,关于检查文件格式以进行数据提取,有什么我应该知道的吗?

编辑:我想要非常一般的提示,因为检查文件格式似乎很有趣。我希望能够使用 File X 并学习如何解决学习它的问题。

4

5 回答 5

8
  1. 在你走得太远之前,你肯定会想要一个十六进制编辑器。它可以让您在任何字体记事本(或任何文本编辑器)中将原始数据视为数字而不是大的空块。
  2. 尝试在您拥有的任何存档提取器(即 zip、7z、rar、gz、tar 等)中打开它,看看它是否只是重命名的文件格式(.PK3 类似)。
  3. 在文件中的某处查找已知文件格式的标题,这将帮助您发现数据的某些部分存储在何处(即搜索“IPNG”以查找其中某处的任何(未压缩)png 文件)。
  4. 如果您确实找到了某条数据的存储位置,请记下它的位置和长度,并查看是否可以在文件开头附近找到等于其中任何一个值的数字,这些数字通常充当指向实际数据的指针数据。
  5. 有时你只需要猜测或直觉某个值的含义,如果你错了,那么,继续前进。您对此无能为力。
  6. 我发现http://www.wotsit.org对于已知的文件类型格式特别有用,有助于在 .dat 文件中查找标题。
于 2008-11-17T14:51:49.693 回答
3

先备份文件。一旦你限制了你可以造成的伤害量,就按照 Ed 的建议四处寻找。

于 2008-11-17T15:00:27.227 回答
3

看看你的代表水平,我想关于十六进制数字、字节顺序、各种数据类型的表示以及所有这些都有点多余。一个可以以十六进制显示数据的好工具当然是必不可少的,编写快速脚本以测试有关数据结构的复杂假设的能力也是必不可少的。所有这些对您来说都应该是显而易见的,但可能会对其他人有所帮助,所以我想我会提到它们。

于 2008-11-17T15:07:35.217 回答
3

One of the best ways to attack unknown file formats, when you have some control over contents is to take a differential approach. Save a file, make a small and controlled change, and save again. Do a binary compare of the files to find the difference - preferably using a tool that can detect inserts and deletions. If you're dealing with an encrypted file, a small change will trigger a massive difference. If it's just compressed, the difference will not be localized. And if the file format is trivial, a simple change in state will result in a simple change to the file.

于 2008-11-17T15:29:52.970 回答
3

另一件事是查看一些常见的压缩技术,尤其是 zip 和 gzip,并了解它们的“签名”。这些格式中的大多数都是“自我识别”的,因此当他们开始解压缩时,他们可以进行快速的健全性检查,以确保他们正在处理的格式是他们理解的格式。

除非加密,存档文件格式基本上是某种索引机制(目录或排序),以及通过索引中的指针从存档中定位这些元素的方法。

随着标准压缩算法的普及,主要是找到这些块从哪里开始,并尝试寻找索引或目录。

有些会将索引全部放在一个位置(就像文件系统一样),有些则会简单地在存档中的每个元素之前加上其身份信息。但最后在某个地方,有关于从一个块到另一个块的偏移量的信息,还有关于数据类型的信息(例如,如果它们存储 GIF 文件,GIF 也有签名)等等。

这些是您试图在文件中寻找的模式。

如果您能以某种方式获得使用相同格式的两个版本的数据,那就太好了。例如,在游戏中,您可能能够从 CD 中获取初始版本和更新的补丁版本。这些可以真正突出您正在寻找的信息。

于 2008-11-17T15:34:06.393 回答