Вечно жить не запретишь крис касперски ака мыщъх Хакер, номер #087, стр. 087-064-2 1. снимаем с программы дамп (сохраняем состояние игры в файле) 2. двигаемся без потери жизней и патронов, после чего снимаем еще один дамп 3. делаем один выстрел (теряем несколько процентов жизни) и получаем очередной дамп 4. повторяем предыдущую операцию несколько раз (3-х дампов обычно достаточно) Сравнение первого и второго дампов (сэйвов) показывает кучу отличий, соответствующих передвижениям монстров и прочим изменениям игрового мира. Но ни патронов, ни жизней в изменившихся ячейках не оказывается — ведь эти параметры заведомо не менялись! ОК, вычеркиваем изменившиеся ячейки из списка «подозреваемых» лиц и сравниваем второй дам с третьим, игнорируя ранее изменявшиеся ячейки. На этот раз отличий будет не так уж и много. Ищем ячейки, дельта изменения которых соответствует количеству выстрелов или потерянных жизней/здоровья. Если таких ячеек больше одной, повторяем операцию 3 до тех пор, пока не останется только одна изменившаяся ячейка или, как вариант, последовательно хачим все подходящие ячейки в надежде, что рано или поздно нам повезет. В некоторых играх количество патронов хранится в нескольких переменных, дублирующих друг друга, но только одна из них значима, а остальные на хакерском жаргоне называются «тенями», отвечающими, например, за вывод текущего значения на экран. При модификации «теневой» переменной количество патронов/жизней чаще всего остается неизменным, и даже если оно возрастает, оружие перестает стрелять задолго до исчерпания своего боезапаса, а нас все равно убивают. Сравнивать можно как дампы памяти, снятые с работающей программы, так и «сэйвы» — файлы сохранений. Зная адрес нужной ячейки, мы можем повесить резидента, прописывающего сюда максимально возможное значение и при необходимости обновляющего его каждые несколько секунд (или чаще). Еще можно запустить soft-ice и, установив точку останова, перехватить тот код, который уменьшает количество патронов с каждым выстрелом — тогда мы сможем его хакнуть. Но это потребует дополнительных телодвижений, что не всегда удобно, поэтому многие хакеры ограничиваются правкой сэйвов, выдавая игроку полный боезапас и максимум здоровья, однако подлинное бессмертие в этом случае уже не достигается — патроны и жизни продолжают убывать, и, чтобы не умереть, их приходится постоянно пополнять. Кроме того, некоторые монстры убивают наповал одной ракетой! хак в памяти Начнем со сравнения дампов памяти. Выберем игру и будем над ней издеваться. Пусть это будет, например, DOOM Legacy – лучший порт классического DOOM'а, бесплатно распространяемый вместе с исходными текстами и замечательно работающий как под LINUX, так и под win32 (смотри рис. 2). На момент написания этих строк последней стабильной версий была версия 1.42. Вот прямой линк для скачки: www.prdownloads.sourceforge.net/doomlegacy/legacy142.exe?download. Для согласования наших действий рекомендуется использовать именно эту версию, иначе все смещения уползут неизвестно куда, но если ты себя чувствуешь достаточно подготовленным — попробуй потерзать более свежие беты, доступные с основной страницы проекта. Кроме DOOM Legacy, нам также потребуются wad-файлы из оригинального DOOM/DOOM2 или HERITC'а. Ну DOOM-то наверняка у каждого найдется! Берем любой приличный дампер, например PE Tools или LordPE, находим процесс legacy.exe и снимаем с работающей игрушки full dump, обзывая файл, к примеру, dump_1.exe. Условимся считать, что в этот момент у нас имеется 50 патронов. |