Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #87, МАРТ 2006 г.

Вечно жить не запретишь

крис касперски ака мыщъх

Хакер, номер #087, стр. 087-064-5


В частности, 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 ??1 П)20 иCOf

0000000040: 66 00 BE 9F 4E 6F 00 6E ? 77 59 65 73 00 C8 37 4E f ?ЯNo nwYes ?7N

За заголовком расположен какой-то бессистемный блок, всегда начинающийся со смещения 100h:

0000000100: 31 34 35 37 36 33 32 38 ? 0D 00 C8 00 02 00 64 00 14576328? ? ? d

0000000110: 00 00 90 01 28 00 90 01 ? 02 00 28 00 00 00 2C 01 Р?( Р?? ( ,?

0000000120: 64 00 00 00 07 00 00 00 ? 03 00 00 00 00 DC 05 01 d • ? ???

0000000130: 00 00 00 04 03 01 00 4C ? 00 20 00 00 00 00 00 00 ??? L

К бессистемному блоку примыкает характерная структура с косыми потоками рожиц. Ее смещение и размер различны и варьируются в очень широких пределах. Мы еще не знаем, за что она отвечает, но что бы здесь ни располагалось, вести сравнение нужно не с начала файла, а с начала этой самой структуры:

0000000140: FF 00 00 01 01 01 01 00 ? 01 01 01 08 00 01 1C 01 ???? ???? ???

0000000150: 0A 00 01 01 01 0B 00 01 ? 01 01 0C 00 01 01 01 10 ? ???? ???? ????

0000000160: 00 01 01 01 11 00 01 01 ? 01 12 00 01 01 01 13 00 ???? ???? ????

0000000170: 01 01 01 14 00 01 01 01 ? 15 00 01 4C 01 16 00 01 ???¶ ???§ ?L?? ?

Что значат косые потоки рожиц (знаков “?”)? И как определить это самое начало? Очень просто! Точно так, как астрономы определяют переменные и вспыхивающие звезды! Звездное небо не остается постоянным,и излучения некоторых звезд изменяют свои свойства со временем. Но как найти их среди тысяч других? Очень просто. Проецируем один звездный снимок на стену, затем удаляем его из проектора и вставляем другой, снятый чуть позже, добиваясь, чтобы звезды располагались на тех же самых местах, а теперь быстро-быстро меняем снимки один за другим. Переменные звезды начинают характерно мерцать! Используем эту технику для поиска отличающихся байт! Нам потребуется только FAR, все по-мужски :).

Подгоняем курсор к doomsav0.dsg и давим <F3> (view), а затем - <F4> (hex-mode). Нажимаем <+> для перехода к следующему файлу (doomsav1.dsg), а затем - <-> для возвращения к предыдущему. Повторяем эму операцию несколько раз, убеждаясь, что косые потоки рожиц смещаются на значительные расстояния, поскольку начинаются с разных смещений. Нажимая <Alt-8> (goto) изменяем стартовое смещение файла doomsav1.dsg так, чтобы рожицы перестали прыгать. Словно мы крутим «синхронизацию» на осциллографе или накладываем отпечатки пальцев друг на друга, добиваясь наибольшего совпадения. В моем случае разница в базовом смещении «рожиц» составила 7 байт. То есть, чтобы они синхронизовались, один файл необходимо просматривать, начиная со смещения F0h, другой — с F7h. ОК! Рожицы совпадают, и никаких различий между ними не обнаруживается! За что же они отвечают? Возвращаемся в игру и, не сходя со своего места, убиваем одного монстра. Сохраняемся. Ага! Различий по-прежнему нет. Значит, «рожицы» отвечают не за трупы. Обращаем внимание, что по мере прохождения игры рожиц становится все больше и больше. Так, может быть, это и есть картографирование? Проверяем свою гипотезу. Действительно, стоит нам войти в новый сектор, как сразу же добавляется новая порция рожиц. Интересно, хранят ли они только карту или еще и состояния дверей? Это легко выяснить экспериментально! За рожицами начинается совсем другая структура данных, в которой на первый взгляд нет никакой закономерности и которая чудовищно изменяется между двумя соседними сохранениями. Логично предположить, что здесь сосредоточена святая святых — описание объектов игрового мира. Но как во всем этом разобраться?

Назад на стр. 087-064-4  Содержание  Вперед на стр. 087-064-6