Вечная жизнь в играх своими руками


              

Хак на диске


Модификация игр в памяти— мощная штука, но все-таки не свободная от ограничений. Программы, защищенные различными протекторами (типа star-force) активно сопротивляются снятию дампа, а под linux нормальных дамперов вообще нет! В этих (и многих других) случаях приходится прибегать к альтернативному методу — правке файлов состояния игры ("сейвов").

Тактическая стратегия выглядит как обычно: сохраняется в saved_1, перемещаемся без потери здоровья (патронов) и сохраняется в saved_2, затем стреляем один раз (тратим несколько процентов здоровья) и сохраняемся в saved_3. Сравниваем полученные файлы нашей утилитой fck.exe и смотрим различия. Выбрав наиболее вероятных "кандидатов", правим их в hex-редакторе, загружаем исправленный файл в игру и, если патроны/здоровье не изменились, правим следующий байт и т. д.

Вернемся к DOOM'у. Подготавливаем три сейва (doomsav0.dsg, doomsav1.dsg и doomsav2.dsg) и сравниваем их друг с другом. Опс! Все они имеют разный размер: 2440, 2586 и 2650 байт. Плохо дело! Судя по всему, сэйв имеет сложную структуру и простое побайтовое сравнение скорее всего ничего не даст, поскольку ячейки, отвечающие за хранение патронов (здоровье) окажутся расположенными по различными смещениям.

Расшифровка структуры сэйв файлов — сложное, но очень увлекательное дело, "заразившее" множество светлых умов. Основным оружием становится интуиция и нечеткий "скользящий" поиск — мы ищем совпадающие (или просто похожие) фрагменты и корректируем смещения с привязкой к ним.

В частности, doomsavX.dsg имеет следующую структуру: сначала идет заголовок, содержащий имя сэйва, версию игры и прочую лабуду.

0000000000:  32 00 F4 77 00 00 00 00 ¦ 00 00 00 00 00 00 00 00  2 Їw

0000000010:  2B 7E 9C F7 00 00 00 00 ¦ 76 65 72 73 69 6F 6E 20  +~Ьў    version

0000000020:  31 34 32 00 00 00 00 00 ¦ 61 66 33 32 00 52 37 59  142     af32 R7Y

0000000030:  65 73 00 B3 19 31 00 8F ¦ 29 32 30 00 A8 43 4F 66  es ¦v1 П)20 иCOf



Содержание  Назад  Вперед