Поиск используемой контрольной суммы

Вместе с некоторыми другими людьми мы пытаемся сделать Savegameeditor для игры, но столкнулись с некоторыми проблемами. Файлы сохранений содержат своего рода контрольную сумму, и мы не можем найти, какая контрольная сумма используется для этого. На данный момент мы знаем только следующее:

  • Контрольная сумма 32-битная
  • Между 9 различными сохраненными играми, где данные сохраненной игры абсолютно одинаковы, за исключением 5 байт (которые разбросаны по всему файлу), контрольная сумма была найдена между 1834565 - 1851372, когда она была разобрана как длинная длинная строка. Обратите внимание, что при каждом сохранении эти 5 байт увеличиваются (в основном примерно на +8), но контрольная сумма не увеличивается.
  • Похоже, что контрольная сумма зависит от позиции, так как игра объявляет файл поврежденным, если 2 байта поменялись местами
  • Я попробовал несколько контрольных сумм и пришел к выводу, что дело не в Sum32, addler32, DJB2 и CRC32, потому что ни одна из них не подходит к контрольным суммам, включенным в сейвы. Похоже, что контрольная сумма, которая наиболее близка к контрольной сумме, включенной в сохранения, - это просто сложение всех байтов в беззнаковое длинное число, которое возвращает значение около ~2507737.

Мне интересно, есть ли лучший способ определить, какая контрольная сумма используется для этих файлов, или если кто-то знает какие-либо советы, чтобы узнать, какая контрольная сумма используется. Сейчас я просто пробую некоторые контрольные суммы, которые я нашел на разных сайтах, в программе на C++. Возможно, также важно знать, что игра 2004 года, и в других файлах она использовала DJB2 для строковых хэшей. По словам других людей, .exe, похоже, использует проверку CRC32.

Edit 1: Через некоторое время мне удалось получить 924 различные версии одного и того же файла, за исключением 2 байт, которые меняются в каждом сохранении, и я также получил контрольные суммы этих файлов, чтобы посмотреть, как он реагирует на эти изменения, и составил список. (Обратите внимание, что я не могу вручную вносить изменения в файл, и игра просто делает контрольную сумму для него, каждый раз, когда я сохранял файл, она добавляла +2 к беззнаковому long, содержащему изменяющееся число, вот как я создал список.)

Смотрите часть списка ниже здесь (50 записей из 924):

>         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)

11
задан Joey 5 September 2011 в 16:02
поделиться