Как найти базовый адрес (Base address) для PW? Ручной способ

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

Ручной, более продвинутый способ.
Для поиска нам потребуется программа CheatEngine. Скачать вы ее можете на одноименном официальном сайте — http://cheatengine.org/
Если вы в первый раз работаете с данной программой, то рекомендую посмотреть маленький видеоурок, в котором показывается и рассказывается о принципе ее работы:

Итак, запускаем ПВ, логинимся на своего персонажа.

Запускаем Cheat Engine, выбираем процесс с игрой (elementclient.exe), жмём Open
Open pwi client via cheatengine
Всё, мы прицепили процесс ПВ к CheatEngine.

Я буду рассматривать поиск базового адреса на примере изменения полученного опыта персонажа. По аналогии, вы можете искать через другие значения характеристик персонажа, которые вы сможете изменить в любой момент (например, хп, мп и др).

Открываем характеристики персонажа и смотрим текущее количество опыта
Current EXP
Вводим текущее количество опыта в строку поиска CheatEngine. В моем случае это 883672. Обратите внимание, чтобы настройки поиска были такими же как у меня. В частности, Scan Type, Value Type и убрана галочка у Hex (поставив галочку, программа будет искать шестнадцатеричное значение, тогда как у нас оно — десятичное).
Ввели, жмем First Scan (первичное сканирование). На данном этапе программа производит сканирование памяти игры на предмет наличия в ней значения 883672 (у вас, напомню, оно своё).
Что мы получаем
got exp
1. CheatEngine нашел нам всего один адрес в памяти, который содержит значение нашего текущего опыта. Отлично!
2. Щелкаем два раза по найденному значению, чтобы оно добавилось в специальное поле ниже.

Мы получили самый простой вариант (зачем всё усложнять?), когда найденное значение — единственное. Это бывает не часто. В большинстве случаев, после первого отсеивания вы будете получать еще целую кучу адресов в памяти, которые будут содержать искомое значение. 99% из них — ненужный вам мусор.

Что-то типа такого
more results
Что делать? А что делать вы должны уже знать, посмотрев небольшой обучающий видеоролик, который я давал вам ранее на этой странице. Просто опять убейте какого-нибудь моба, значение текущего опыта изменится. Введите новое количество опыта в то же поле, куда вводили искомый опыт в первый раз, но теперь жмем не на New Scan, а Next Scan. Что делает программа? Она ищет новое значение опыта, но уже не во всей области памяти игры, а только среди ранее найденных значений.

В итоге список ранее найденных значений заметно сократится, потому что многие адреса хранили «мусор», а не текущее значение опыта, поэтому они останутся хранить прежнее значение, которое нам уже не нужно. В идеале, там должно остаться 1-2 значения. Если их больше — убиваете моба снова, и ищете новое значение через Next Scan до тех пор, пока не добьетесь нужного результата.

Итак, у нас с вами одно значение. Именно в этом месте памяти (1C40CD1C — не удивляйтесь, что адрес содержит и буквы — он представлен в шестнадцатеричном виде) хранится искомое нам значение. Мы можем считать его, изменить, заморозить.

Поменял опыт на 9999999
Change Exp
Чтобы изменить опыт на свой, просто кликните по текущему значению в колонке Value в нижней области (напомню, двойным кликом по найденному значению оно переносится в нижнюю рабочую область).

Конечно, стать бессмертным вы не сможете (только в оффлайн играх). Вы не сможете быстро прокачаться, поменяв значение опыта на 100000000000. Просто потому, что вся данная информация хранится на сервере игры, а не в клиенте. Мы редактируем область памяти клиента и повлиять на значения, хранящиеся на сервере никак не можем. Вы можете поменять имя персонажа, уровень, кол-во хп, мп, денег и т.п. но всё, что вы меняете — видите только вы. Такова особенность онлайн-игр.

Ну что ж, немного отступили.
Круто! Мы нашли определенное значение! Надо найти хп? Так же и найдем. Зачем что-либо еще искать? Зачем искать базовый адрес? А вот зачем: найденный адрес 1C40CD1C с текущим опытом является временным. Если мы перезапустим клиент, то по адресу 1C40CD1C мы уже опыт не найдем! Но мы сможем находить его быстро и всегда, зная базовый адрес и цепочку оффсетов от этого адреса до искомого адреса. Вперед!

Нажимаем правой кнопкой по найденному адресу в нижнем окне и в меню выбираем Find out what writes to this address (найдем, что пишет по этому адресу)

Нажимаем правой кнопкой по адресу и в меню выбираем Find out what writes to this address
Find out what writes to this address

Нас уведомляют, что к процессу прицепится отладчик. Жмем Yes
CheatEngine Debugger

Появилось окно, которое отлавливает всё, что записывает что-либо в нашу ячейку памяти
debug window

Чтобы поймать то, что же пишет (меняет значение опыта), нам надо, соответственно, поменять значение опыта. Для этого делаем что? Правильно — убиваем моба.
После убийства появляется инструкция
got first offset
Посмотрите. Как только мы убили моба, появляется строчка, которая непосредственно производит запись нового значения опыта в нашу ячейку памяти. А теперь посмотрите на подчеркнутую шестнадцатеричную цифру — это смещение до ячейки опыта! Самое последнее смещение, непосредственно указывающее на ячейку, хранящую опыт. Запомним его — 4D4. Теперь нам надо найти смещение, указывающее на смещение 4D4 (простите за тавтологию). Вперед.
Выделяем инструкцию, жмем More Information, Правой кнопкой по выделенному адресу и копируем его в буфер обмена
extra info
Закрываем окна отладчика.
Жмем ОК, Stop/Close. Ставим галочку у Hex, вставляем в поле скопированный адрес, жмем New Scan - First Scan
put new address
Адрес у нас в шестнадцатеричном виде, поэтому нам необходимо было поставить галочку у Hex, тем самым подсказывая CheatEngine, что мы ищем не десятичное значение, а шестнадцатеричное.

Итак, у нас появляется целая куча адресов. Кликаем два раза по первому адресу, он появляется в нижней области программы. Щелкаем правой кнопкой мыши по нему в нижней области программы и выбираем пункт Find out what accesses this address (что обращается к этому адресу).

Выпадает куча инструкций
access to address
Посмотрите Внимательно. У всех у них одинаковое смещение — 28. То, что нужно! Второй оффсет, ведущий к нашему ранее найденному. Запомним его.

Выделяем первую строчку, жмем More Information. Возможно искомый адрес (probably address) нам показывают 03230398.

Щелкаем по нему и копируем в буфер обмена
access 2nd address
Жмем ОК, Stop/Close, закрывая дополнительные окна. В поле для поиска вводим наш новый адрес 03230398. New Scan — First Scan

И что мы видим?! Зеленый адрес!!! D3B08C
first static address

Итак, зеленый адрес, это статичный (неизменяемый адрес). Но это еще не базовый адрес. Далее вы узнаете почему. Забегая вперед скажу, что мы нашли Game address. Гляньте на автоматический способ. Помните, что нам выдала программа?

А выдала она нам вот что
Посмотрите на строчку Game Address и сравните с зеленым адресом, который мы только что получили. Похожи? 🙂

Мы с вами нашли постоянный гейм адрес и вплотную подобрались к базовому адресу.

Кликаем два раза по зеленому адресу, добавляя его в рабочую область. В ней выделяем этот адрес, жмем правой кнопкой и всё так же выбираем Find out what accesses this address.

Выпадает куча инструкций со смещением 1C
1C offset

1C — это смещение, как мы уже знаем, к статическому гейм адресу. Запоминаем это смещение.

Выполняем привычные действия: берем самую первую инструкцию, выделяем ее и щелкаем по More Information. Возможный адрес нам показывают 00D3B070.

Щелкаем по нему правой кнопкой и копируем в буфер обмена.
last offset
Жмем ОК, Stop/Close, закрывая дополнительные окна. В поле для поиска вводим наш новый адрес 00D3B070. New Scan — First Scan

Нам попался второй зеленый адрес! 00D3A8EC
got base address
Что это? Базовый адрес? Гляньте на картинку из автоматического поиска и вы убедитесь, что это именно он!

Но нам то надо убедиться самим! Щелкаем по зеленому адресу двойным кликом, правой кнопкой по нему в нижней области экрана, выбираем Find out what accesses this address.

И что же мы видим?
base total

Смещений больше нет. везде фигурирует статический 00D3A8EC адрес. То есть это самое начало цепочки оффсетов.

Итак, мы нашли с вами базовый адрес: Baseaddress = 0xD3A8EC.
Мы нашли с вами цепочки оффсетов до ячейки памяти, хранящей текущее количество опыта: 0x1C, 0x28, 0x4D4.

Таким образом, цепочка оффсетов до текущего опыта примет вид: 0xD3A8EC + 0x1C + 0x28 + 0x4D4
Считывая значение по данной цепочке, мы всегда будем получать актуальную информацию об опыте даже после перезапуска клиента игры.

Так как мы уже знаем, что гейм адрес тоже является постоянным и на него указывает смещение 0x1C (смещение к гейм структуре) относительно базового адреса, то мы можем сократить нашу цепочку до вида GameAddress + 0x28 + 0x4D4, то есть 0xD3B08C + 0x28 + 0x4D4.

А что за смещение 0x28? Это смещение, указывающее на структуру нашего персонажа. В этой структуре хранятся многие другие характеристики нашего персонажа. То есть если вы будете искать хп или количество денег в инвентаре, то смещение структуры персонажа будет так же фигурировать в вашей найденной цепочке.

Отсюда какой можно сделать вывод? Если вы будете искать количество хп, например, то вам достаточно будет найти только самый первый из найденных нами оффсетов, указывающий непосредственно на саму ячейку памяти с хп, а не на другое смещение, так как мы уже знаем, что является характеристикой персонажа, а значит хранится в структуре персонажа, то есть по цепочке Baseaddress + 0x1C + 0x28 + хп

Вы можете прокомментировать, либо оставить trackback со своего сайта.

3 комментария to “Как найти базовый адрес (Base address) для PW? Ручной способ”

  1. Gabriel:

    Hello, thank you for sharing your work, through it I managed to find the following addresses in elementclient.exe «pw-br»: GameAddress = 00D2EAE8, BaseAddress = 92E364, the offsets: 1c, 28 and 4d4. good my project was to create a-statistic when hp and mp I lose in battle but I can not get this information would know tells me what to do starting this data?
    Forgive me if I write something wrong, I have no knowledge of any language other than Portuguese.

  2. Faratine:

    Вылетает pw на пункте Find out what writes to this address (найдем, что пишет по этому адресу)
    Что делать?

Leave a Reply

Powered by WordPress