Как найти смещение ID цели в таргете

Сегодня мы поговорим о том, как найти смещение ID цели в таргете. Выделив себя, соответственно, узнаем и свой ID.

Для начала определимся, что это вообще такое?

ID — это уникальный идентификатор (номер) персонажа, моба, нпс в игре. Многие функции в качестве аргумента принимают ID. ID того, кого вы хотите бафнуть/атаковать, ID того, кого хотите взять на руки. Даже самое простое: чтобы выделить кого-то — вам надо знать его идентификатор. Примеров можно привести множество. В конце концов, ID пригодится нам в будущих поисках.

Таким образом мы теперь знаем, что это значение, которое указывает на конкретный объект. Его-то и научимся находить.

Запускаем PW, логинимся на персонажа.

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

А дальше в поиске нам надо оттолкнуться от какого-то известного значения ID. «Но мы же не знаем ни одного» — скажете вы. Ну как же? Если в таргете никто не выделен, значит TargetID = … 0! Нулю, конечно. Но мы ноль искать не будем, т.к. таких значений — целое море. Мы выделим кого-нибудь. Сейчас мы знаем, что TargetID больше 0. Такое условие для поиска и задаем в Cheat Engine.

Ищем значения, которые больше нуля (scan type: Bigger than)
Search bigger than 0

Получили 105 миллионов значений. Начинаем отсеивать. Снимаем выделение, чтобы в таргете ничего не было.

Меняем Scan type с Bigger than на Exact Value и жмем Next Scan
Next 0

212 тысяч. Очень неплохо. Опять берем кого-нибудь в таргет.

Меняем Scan type с Exact Value на Bigger than и жмем Next Scan
Bigger than 0

В два раза уменьшили общее количество найденных результатов. Вы знаете что делать: вновь сбрасываем таргет.

Меняем Scan type с Bigger than на Exact Value и жмем Next Scan
Search 0

Количество уменьшилось. Но убывает уже не так быстро как хотелось бы. И тут есть маленький хинт: выделим не какого-нибудь перса, а НПС! Это существенно сократит результат поиска. Продолжаем выполнять нехитрое чередование: Выделить кого-нибудь — Bigger than — Next Scan, после чего снять выделение — Exact Value — Next Scan, выполняя отсеивание. В общей сложности после около десятка чередований (не забудьте выделять как персов, так и нпс), мы получим примерно такой результат:

Почти добрались до дна
Short result

Посмотрите. Сейчас у нас в таргете никого нет. TargetID, соответственно, равен нулю. Но и все найденные значения равны нулю. Где из них нужный — в данном случае непонятно.

Выделяем кого-нибудь, меняем Scan type с Exact Value на Bigger than и жмем Next Scan
Final result

Если у вас чуть больше значений — ничего страшного. Итак, теперь у нас есть два варианта.

1. Посмотрим внимательно на скриншот выше. Самый нижний результат отбрасываем. Выделенный персонаж не имеет ID равный 1. Смотрим на остальные результаты — некоторые из них меняют свое значение прямо в данный момент! Но мы же не меняем свой таргет сейчас. Значит все изменяющиеся результаты — мусор для нас. Останутся пару-тройку значений. Выделите нпс. Потом перса. Потом снова нпс. Там, где значение при выделении нпс будет принимать значение намного больше (на несколько порядков!), чем при выделении персонажа — наше искомое значение. На скрине выше оно подчеркнуто. В данном случае был выделен персонаж с ID = 6248640 или 0x5F58C0 в шестнадцатеричном формате. Для сравнения, нпс будет иметь ID вида = 0x80104B82. Не шестизначный, как ID перса!

2. Актуально для PWI. Берем ярлык нашего ПВ. Заходим с свойства ярлыка. В поле «Объект» дописываем строчку game:cpw console:1, чтобы получилось строка вида: «D:\Perfect World Entertainment\Perfect World International\element\elementclient.exe» startbypatcher game:cpw console:1
Данная строка активирует консоль. Заходим в игру с помощью нашего ярлыка. Активируем консоль сочетанием клавиш Shift+~ (Шифт + тильда). В появившемся окне вводим команду d_rtdebug 1. Данная команда в меню чата желтым показываем нам кого мы выделили в десятичном и шестнадцатеричном формате.

Выделяем кого-нибудь, смотрим высветившийся желтым ID и ищем десятичное число (в скобках) в значениях из списка, который мы отсеяли в Cheat Engine. Нашли? Это наш TargetID. Двойным кликом перемещаем его в область работы (нижнее окно программы).

Найдем смещение нашего TargetID.

Жмем правой кнопкой по адресу в рабочем окне.

Выбираем пункт Find out what accesses this address
What access this address

На запрос присоединения дебаггера отвечаем Yes.
Получаем список инструкций, которых объединяет одно — одинаковое смещение.

Общее смещение
Common offset

Как вы уже догадались — это смещение к TargetID. Далее, если подумать, по логике вещей оно должно находиться в структуре персонажа. Проверить вы это можете сами, покопавшись глубже. Точно так же, как мы это делали с поиском базового адреса через опыт персонажа.

Таком образом, цепочка оффсетов до TargetID будет такая: BaseAddress + 1C + 28 + 59C (Базовый адрес + структура игры + структура персонажа + TargetID).

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

Leave a Reply

Powered by WordPress