Поиск указателей. На примере игры "Warcraft 3"


Если случается так, что ранее найденные и сохраненные адреса становятся недействительными, это значит, что игра использует динамическое распределение памяти. Чтобы сделать таблицу работающую всегда нужно найти указатели. В программ есть 3 метода поиска указателей, включая “Указатель на Указатель” до 5 уровня (для SE редакции поиск “Указатель на Указатель” ограничен вторым уровнем). Адреса меняются после перезапуска игры. Но игра должна знать, где её параметры, поэтому существует ячейка, в которой записан адрес этого параметра. Эта ячейка называется указателем на адрес, фактически она его содержит.



Адрес указателя при перезагрузке игры не меняется. То есть, если адреса в таблице привязать к указателю, то получим таблицу, значения в которой всегда актуальны.

Рекомендуем искать только статические указатели (с галочкой "Только статические адреса в модулях"). Статические указатели гарантировано работают на любых компьютерах! Для Windows 32-бита почти 99% указателей четные, для Windows 64-бита кратны четырем! Итак, выделяем ячейку с опытом и делаем команду "Искать указатель на этот адрес". Находим этот указатель и привязываем командой "Установить указатель на все" или "на группу".





Упс, но мы ничего не находим! Это значит что указатель не на адрес с опытом, а на структуру, начало которой мы не знаем. Итак, опять выделяем ячейку с опытом и делаем команду меню "Искать Указатель с максимально возможным смещением".



Тем самым мы найдем все указатели первого уровня с максимально возможным смещением. Таких указателей нашлось 50 штук.



Перезапускаем игру. Нажимаем кнопку "Отсеять" и делаем "Отсеивание указателей" на значение 650.



Такой указатель один. Если указатель не один, то перезапускаем игру и опять делаем "Отсеивание указателей". И так несколько раз. Если все равно получается несколько адресов, то выбираем любой. В левой таблице выделяем указатель, в правой таблице выделяем ячейку с опытом и делаем команду "Установить указатель на все".



Вот и всё! Мы имеем таблицу, адреса которой не меняются при перезагрузке игры.






Указатель 6F71C7B8 указывает на адрес 01170088
Адрес 01170088 есть адрес начала структуры, описывающей нашего героя.
Адрес 01170088 плюс смещение 1684, равный 0117071C, есть адрес опыта.
Тем самым мы привязались к адресу началу структуры, и имеем дело с относительными адресами. Адрес опыта 1684 относительно начала структуры получаемого из указателя 6F71C7B8.
Полученная таблица выглядит следующим образом:
Указатель 6F71C7B8 + 1684 / Experience
Указатель 6F71C7B8 + 1688 / Points
Указатель 6F71C7B8 + 1692 / Power
Указатель 6F71C7B8 + 1712 / Dexterity
Указатель 6F71C7B8 + 1712 / Health
Указатель 6F71C7B8 + 1744 / Manna






Если вы не нашли простого указателя, то возможна структура типа "Указатель на указатель", в этом случае используйте поиск "Указатель на указатель". Сначала ищем 2 уровень, если не находим, тогда 3 уровень. Каждый следующий уровень ищется в 10 раз медленнее предыдущего. Если 2 уровень 1 минута, то 3 уровень 10 минут, а 4 уровень 100 минут при одинаковом смещении. Поэтому рекомендуется уменьшать смещение до 500-1000 байт на 4-5 уровнях.

  1. Сохранить адрес/указатель - сохранить адрес/указатель/смещение для последующей работы.

  2. Установить указатель на все (на группу) - выделяем один указатель в найденных и один адрес в таблице, сопоставляем их, то есть предполагается, что искали указатель на этот адрес, остальные адреса/указатели в таблице переводятся в указатели со смещение относительно исходного адреса.

  3. Установить сохраненный указатель на все (на группу) - тоже самое, что выше, но указатель берется из сохраненного командой "Сохранить адрес/указатель ". Плюс дополнительно добавляется ко всем смещениям - сохраненное смещение.

  4. Установить все указатели на этот адрес - всем указателям в таблице присваивается смещение, чтобы они указывали на этот адрес (адрес должен быть выделен).

  5. Установить все указатели на сохраненный адрес - тоже самое, что выше, но адрес берется из сохраненного командой "Сохранить адрес/указатель".

  6. Преобразовать указатели в адреса - обратная команда к "Установить указатель". Все выбранные указатели превращаются в адреса.
Назад Содержание Вперед

Copyright (C) 1996-2017, System SoftLab.
Дата последнего обновления
27 июля 2017 года