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




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


Рисунок 8 определение идентификатора процесса (PID) при помощи диспетчера задач

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

Рисунок 9 с автопатчером количество патронов застывает на отметке 66

Настоящие мыщъх'и правят машинный код программы так, чтобы патроны (жизни, здоровье) не убывали. Код, обращающийся к ячейке с патронами, можно найти двояко: по перекрестным ссылкам и через аппаратную точку останова. Первый способ ориентирован на дизассемблер и вообще говоря не очень надежен, второй — на отладчик и срабатывает в 100% если, конечно, программа дружит с soft-ice.

Начнем с перекрестных ссылок. Загружаем dumped_1.exe в IDA PRO и дождавшись, когда дизассемблирование завершится, переходим по адресу 56AF28h (<g>, "0x56AF28") и смотрим — удалось ли ей восстановить перекрестные ссылки или нет. Ага! Есть две перекрестные ссылки: одна на чтение, другая — на запись.

.data:0056AF28 dword_56AF28 dd 32h               ; DATA XREF: .text:004615AA^r

.data:0056AF28                                         ; .text:00461711^w

Листинг 4 IDA PRO нашла две перекрестных ссылки к ячейке с патронами одна из которых на запись (она выделена полужирным)

Переходим к той ссылке что на запись (в данном случае это .text:00461711h)и видим следующий код:

.text:00461707                    mov    dword_575BB8, 1

.text:00461711                    mov    dword_56AF28[ecx], eax

.text:00461717                    mov    dword_575BBC, eax

Листинг 5 код, обращающийся к "патронной" ячейке

Ни хрена не понятно что тут, зачем и куда! К тому же ячейка 56AF28h адресуется через регистр ECX, то есть используется в качестве базового указателя.


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