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



              

Общая тактика и стратегия взлома


Патроны, жизни, артефакты и прочее барахло — все это переменные, хранящиеся в определенных ячейках

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

Зная точное количество жизней/патронов, мы значительно сужаем круг поиска, исследуя только те ячейки, которые содержат нужное значение. Однако, следует помнить, что соответствие может быть как прямым, так и обратным. Одни программисты ведут учет жизней, другие — смертей, причем отсчет может вестись как единицы, так и от нуля, а в некоторых случаях и -1. Допустим, у нас есть три нерастраченных жизни. Означает ли это, что переменная live_count обязательно будет равна трем? Разумеется, нет! В ней вполне может два (и тогда игра закачивается когда live_count < 0), или ноль (игра заканчивается при live_count > 2). Возможны и другие значения. С патронами в этом плане все обстоит намного лучше и чаще всего они хранятся в памяти "как есть", однако, количество ложных срабатываний все равно будет очень велико! Допустим, у нас есть 50 патронов и мы ищем 32h в дампе программы. Да там этих 32h целый миллион! До конца сезона все не переберешь!

Ключ к решению лежит в изменениях! Наблюдая за характером изменения различных ячеек, мы легко отделим зерна от плевел. План наших действий выглядит так:

  • снимаем с программы дамп (сохраняем состояние игры в файле);
  • двигаем жопой без потери жизней и патронов, после чего снимаем еще один дамп;
  • делаем один выстрел (теряем несколько процентов жизни) и получаем очередной дамп;
  • повторяем предыдущую операцию несколько раз (необяз 3 дампов обычно достаточно);



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