Поиск указателей. На примере игры "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 уровнях.
|