我玩的游戏将其所有数据存储在 .DAT 文件中。人们在检查文件方面做了一些工作。还有一些现有的工具,但我不确定它们的当前状态。我认为自己在数据中四处寻找会很有趣,但我从未尝试过检查文件,更不用说以前这样的事情了。
在我一头扎进去之前,关于检查文件格式以进行数据提取,有什么我应该知道的吗?
编辑:我想要非常一般的提示,因为检查文件格式似乎很有趣。我希望能够使用 File X 并学习如何解决学习它的问题。
先备份文件。一旦你限制了你可以造成的伤害量,就按照 Ed 的建议四处寻找。
看看你的代表水平,我想关于十六进制数字、字节顺序、各种数据类型的表示以及所有这些都有点多余。一个可以以十六进制显示数据的好工具当然是必不可少的,编写快速脚本以测试有关数据结构的复杂假设的能力也是必不可少的。所有这些对您来说都应该是显而易见的,但可能会对其他人有所帮助,所以我想我会提到它们。
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.
另一件事是查看一些常见的压缩技术,尤其是 zip 和 gzip,并了解它们的“签名”。这些格式中的大多数都是“自我识别”的,因此当他们开始解压缩时,他们可以进行快速的健全性检查,以确保他们正在处理的格式是他们理解的格式。
除非加密,存档文件格式基本上是某种索引机制(目录或排序),以及通过索引中的指针从存档中定位这些元素的方法。
随着标准压缩算法的普及,主要是找到这些块从哪里开始,并尝试寻找索引或目录。
有些会将索引全部放在一个位置(就像文件系统一样),有些则会简单地在存档中的每个元素之前加上其身份信息。但最后在某个地方,有关于从一个块到另一个块的偏移量的信息,还有关于数据类型的信息(例如,如果它们存储 GIF 文件,GIF 也有签名)等等。
这些是您试图在文件中寻找的模式。
如果您能以某种方式获得使用相同格式的两个版本的数据,那就太好了。例如,在游戏中,您可能能够从 CD 中获取初始版本和更新的补丁版本。这些可以真正突出您正在寻找的信息。