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




Хак в памяти - часть 7


Вероятнее всего, мы имеем дело со структурой, описывающей состояние игрока и переменная с количеством патронов — член этой структуры. В этом случае перекрестные ссылки нам не помогают, но с другими играми они могут и сработать (кстати говоря, если нет IDA, можно воспользоваться hiew'ом и поискать ссылку на ячейку "прямым текстом", записав ее адрес "задом наоборот" с учетом порядка следования байт на x86, т.е. в данном случае искомая строка будет выглядеть так: "28 AF 56 00").

Переходим к точкам останова. Вызываем soft-ice привычным нажатием <Ctrl-D> (игра при этом уже должна быть запущена), переключаемся на нужный процесс командой "addr legacy", и ставим бряк на запись памяти: "bpm 56AF28 w", где 56AF28 — адрес ячейки с патронами. Если не указывать "w", soft-ice будет всплывать на чтении количества патронов, то есть постоянно (под VM Ware после нескольких всплытий виртуальная машина обрушивается. впрочем, это явный баг, который разработчики в обозримом будущем должны исправить).

После установки аппаратной точки останова на запись, soft-ice всплывает при первом же выстреле, отображая следующий код (см. рис. 10). Не обращайте внимание на гамму – отладчик не смог восстановить VGA-палитру, переопределенную игрушкой и текст едва можно разглядеть.

Рисунок 10 точка останова на "патронную" переменную сработала и soft-ice выдал машинную инструкцию, уменьшающую количество патронов

На всякий случай мыщъх (как порядочный хакер) приводит ключевой фрагмент листинга в "текстовом режиме", поскольку графика на бумаге наверняка будет не видна (издержки дешевой полиграфии, это вам не Финляндия, это гораздо хуже):

00442A91 8D B3 60 01 00 00        lea    esi, [ebx+160h]

00442A97 8B 0C 02                 mov    ecx, [edx+eax]

00442A9A 8B 94 8B C8 00 00 00            mov    edx, [ebx+ecx*4+0C8h]

00442AA1 4A                       dec    edx




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