使用 CRC/Checksum 校验修改视频游戏的二进制保存数据文件

逆向工程 二元分析 静态分析 十六进制 密码学
2021-06-28 03:53:28

我最近覆盖了我和我女朋友一直在玩的视频游戏的保存游戏文件。在尝试通过几种不同的方式恢复文件后(游戏没有擦除而是覆盖了保存文件),我不得不尝试手动重建保存数据。

过去我曾使用 Ollydbg 使用过来自 crackmes.de 的逆向工程二进制可执行文件,但这次不同,我觉得我有点不知所措。

游戏 (Sonic All Stars Racing) 使用单个 .bin 文件来存储四个游戏内帐户的记录。使用十六进制编辑器、笔和纸,我开始绘制文件结构并定位各种记录的偏移量。

我遇到的问题是,每当我对文件进行修改,大小相同或其他方式时,游戏都会声明保存文件已损坏并且无法使用它。我认为这是因为游戏正在对数据实施某种形式的 CRC/校验和,以防止使用损坏的文件。(旁白:CRC 和校验和是否可以互换?)


游戏将数据保存到一个名为的文件中,该文件"ssr_save.bin"负责四个游戏内配置文件。

我所做的是通过在创建每个配置文件后备份保存文件来创建四个不同的保存文件。

每个文件大体相同。727040 字节大。唯一的区别似乎是前 12 个字节(包括 0x00 到 0x0B)。这前十二个字节在四个文件之间是完全唯一的。

但是,在该范围内似乎有多个数据对象,因为 12 的中心有 3 个零字节。

File 1: 19 8E 0B 60 13 00 00 00 F9 3E 00 B0
File 2: 93 7B 0F 36 13 00 00 00 B6 35 02 9B
File 3: 69 71 1B 14 13 00 00 00 A1 30 08 8A
File 4: D9 47 32 E8 13 00 00 00 D9 9B 13 74

我想弄清楚的是这些字节代表什么以及我如何操作它们来让我修改保存数据的主体而不是在游戏中抛出损坏错误。

任何人都可以帮助我找出游戏如何对文件进行校验和并对过程进行逆向工程,以便我可以创建一个有效的文件吗?

这是四个保存数据文件的存档

特洛伊。

1个回答

由于逆向工程中的变量,这是一个很难回答的问题。

我建议你从以下几点开始:

  • 开始游戏
  • 获得一些硬币或任何保存的东西,然后保存游戏。
  • 重新开始游戏并获得更多硬币并保存游戏。
  • 用旧文件替换新保存。
  • 它加载吗?请参阅答案 1。否则,请参阅答案 2。

回答 1 您修改后的游戏文件格式不正确。您将需要对游戏中如何使用字节进行一些逆向工程。我建议你断点 CreateFile 和 ReadFile 并逐步调试你的调试器,看看每个字节是如何被读取的。当然,这可能成为一项艰巨的任务。

答案 2 游戏文件校验和可以存储在文件系统或注册表中的某个位置,以确保文件的数据完整性。您可以使用诸如 Process Monitor 之类的工具来帮助您找到此文件,或者您可以在 CreateFile 和 ReadFile 上设置断点并手动搜索它。 http://technet.microsoft.com/en-gb/sysinternals/bb896645.aspx

如果您得到答案 1 或 2,请告诉我,然后我可以在您应该注意的事情等更深入的细节中扩展我的答案。

我希望这将是您解决问题的一个很好的起点。