与其他一些人一起,我们正试图为游戏制作一个Savegameeditor,但我们遇到了一些问题。 savegame文件包含一种校验和,我们似乎无法找到使用哪个校验和。直到现在我们所知道的是:
我想知道是否有更好的方法来查找这些文件使用哪个校验和,或者是否有人知道找出使用哪个校验和的任何提示。我目前正在尝试一些我在C ++程序中的不同站点上找到的校验和。也许重要的是要知道游戏是从2004年开始,而在其他文件中它使用DJB2进行字符串哈希。根据其他人的说法,.exe似乎正在使用CRC32检查。
编辑1:一段时间后,我设法获得了同一文件的924个不同版本,除了2个字节,每个保存都有所不同,我还得到了这些文件的校验和,看看它是如何反应的在这些变化上,我列出了这个。 (请注意,我不能手动对文件进行更改,游戏只是对其进行校验和,每次我保存文件时它将+2添加到包含不同数字的无符号长整数,这就是我创建列表的方式。)< / p>
请参阅下面列表的一部分(924中的50条记录):
> The bytes Checksum (as Hex and unsigned long)
> -----------------------------
> 0x 0 0x18 0x 0 0x13DFA 81402
> 0x 0 0x19 0x 0 0x13F76 81782
> 0x 0 0x1A 0x 0 0x1406D 82029
> 0x 0 0x1B 0x 0 0x14114 82196
> 0x 0 0x1C 0x 0 0x13EC5 81605
> 0x 0 0x1D 0x 0 0x13790 79760
> 0x 0 0x1E 0x 0 0x143C1 82881
> 0x 0 0x1F 0x 0 0x13ED0 81616
> 0x 2 0x18 0x 0 0x13D02 81154
> 0x 2 0x19 0x 0 0x13ABD 80573
> 0x 2 0x1A 0x 0 0x14271 82545
> 0x 2 0x1B 0x 0 0x13E39 81465
> 0x 2 0x1C 0x 0 0x140FC 82172
> 0x 2 0x1D 0x 0 0x13FFE 81918
> 0x 2 0x1E 0x 0 0x1413B 82235
> 0x 2 0x1F 0x 0 0x13A5F 80479
> 0x 4 0x18 0x 0 0x138F2 80114
> 0x 4 0x19 0x 0 0x141AE 82350
> 0x 4 0x1A 0x 0 0x13E91 81553
> 0x 4 0x1B 0x 0 0x13F67 81767
> 0x 4 0x1C 0x 0 0x13C6C 81004
> 0x 4 0x1D 0x 0 0x13F4E 81742
> 0x 4 0x1E 0x 0 0x13BB8 80824
> 0x 4 0x1F 0x 0 0x1398D 80269
> 0x 6 0x18 0x 0 0x146C0 83648
> 0x 6 0x19 0x 0 0x139B5 80309
> 0x 6 0x1A 0x 0 0x13FAC 81836
> 0x 6 0x1B 0x 0 0x13E71 81521
> 0x 6 0x1C 0x 0 0x14162 82274
> 0x 6 0x1D 0x 0 0x13D55 81237
> 0x 6 0x1E 0x 0 0x13BE8 80872
> 0x 6 0x1F 0x 0 0x13B72 80754
> 0x 8 0x18 0x 0 0x142FE 82686
> 0x 8 0x19 0x 0 0x13E07 81415
> 0x 8 0x1A 0x 0 0x14923 84259
> 0x 8 0x1C 0x 0 0x13D3E 81214
> 0x 8 0x1D 0x 0 0x14420 82976
> 0x 8 0x1E 0x 0 0x13BEE 80878
> 0x 8 0x1F 0x 0 0x145F5 83445
> 0x 8 0x1F 0x 0 0x145F5 83445
> 0x A 0x18 0x 0 0x13CB6 81078
> 0x A 0x19 0x 0 0x142FB 82683
> 0x A 0x1A 0x 0 0x13EB2 81586
> 0x A 0x1B 0x 0 0x13C14 80916
> 0x A 0x1C 0x 0 0x13915 80149
> 0x A 0x1D 0x 0 0x14100 82176
> 0x A 0x1E 0x 0 0x14310 82704
> 0x A 0x1F 0x 0 0x13B34 80692
> 0x C 0x18 0x 0 0x142AE 82606
> 0x C 0x19 0x 0 0x14091 82065
我仍然看不到那些变化的字节和校验和之间的模式,所以我想知道其他人是否可能在这些之间看到模式?或者也许是一种如何在它们之间找到模式的技术。如果有人可以帮我解决这个问题,我也可以发布完整列表的链接(如Microsoft Excel或TXT格式)
答案 0 :(得分:7)
最简单的方法可能是获取OllyDbg之类的调试器,找到校验和代码并对其进行反向工程。不是说它是 easy ,因为它可能会相当困难。但是在我看来,通过查看数字来进行逆向工程甚至简单的校验和是接近于不可能性,除非你有一个具有超人能力的高功能自闭症朋友看到模式 - 也许甚至不是。
你当然可以幸运地拥有一个使用标准的,众所周知的校验和来检测腐败的游戏。但如果他们的目标是防止篡改(这很可能),那么如果他们有任何线索,他们就不会使用标准校验和。
这是一个来自crackme的校验和算法我正在娱乐自己:
我当然不能仅仅通过查看输出来猜测这段代码:
uint sum = 0;
for (uint i = 0; i < 478; i++)
sum = rol((((buf[i + 22] | 0xFFFFFF00u) + i) ^ (478 - i)) - sum + 0x272E4745u, 3);
此代码中有一个单独的校验和算法,它使用符号扩展而不会使用or 0xFFFFFF00
完全删除它 - 您是否在搜索中考虑过这样的操作?搜索空间太大了,无法猜测......