Поиск базового адреса, смещения. Jade Dynasty
Пошаговое руководство по определению базового адреса и смещений для игровых величин (HP, MP и т.д.).
В целом, процедура абсолютно одинакова для большинства программ, посему, раз прочитав подобное руководство для другой игры, которых хватает на нашем ресурсе, читать уже для Jade Dynasty особого смысла нет. Хотя, здесь я приведу несколько дополнительных вещей и пояснений.
Note:
- здесь не дается определения базовому адресу, смещениям и т.п.
- здесь нет детального описания функций и окон CE
- здесь нет детального описания ассемблерных команд
- данное руководство на 90% применимо и для Perfect World’а, т.к. движки у этих двух игр одинаковые.
- перед многими значениями стоит символ «$». Используется для идентификации шестнадцатеричных величин
Приступим.
Загружаем клиент Jade Dynasty, запускаем Cheat Engine (CE) и присоединяем последний к процессу игры «elementclient.exe». Объектом поиска будет самая доступная величина – количество жизней (HP), в моем случае, равная 779 единиц. [Only registered and activated users can see links. Click Here To Register...]
В поле «Value» CE вводим значение 779, выбираем тип сканирования «Exact value» и тип величины «4 bytes», и начинаем сканирование «first scan»
По завершению первого сканирования, CE отобразит список адресов (если он не очень велик), значения которых в момент поиска равнялись 779. Таких адресов может быть 10, может быть и сотни тысяч. Поэтому, нам требуется точно определить нужный адрес. Возвращаемся в игру и любым способом меняем значение HP, например, снимем с чара какую-либо вещь, дающую прирост HP: [Only registered and activated users can see links. Click Here To Register...]
Как только значение изменится, продолжаем поиск в CE, при этом тип сканирования оставляя «Exact value»
Найдено 4 адреса. Можно еще раз изменить значение HP и посмотреть, как будут меняться значения у этих адресов. [Only registered and activated users can see links. Click Here To Register...]
Через несколько секунд становится ясно: два первых адреса не имеют отношения к искомой величине, а два последних – текущее значение HP и максимальное.
Добавляем оба адреса в список и, выбрав «HP max», вызываем контекстное меню.
Нам требуется отыскать участок кода, который записывает значения в выбранный адрес $1265F098: «Find out what writes to this address»
Выполнив указанную команду, CE отобразит окно со списком опкодов (operation code, код операции)
Quote:
Код операции, операционный код, опкод — часть машинного языка, называемой инструкцией, определяющей операцию, которая должна быть выполнена.
Убедимся, что отображаются все опкоды, для чего требуется вернуться в клиент и изменить значение HP
Посмотрим дополнительную информацию для инструкции по адресу «$0046b5ca»:
CE отобразит окно, где будут указаны значения регистров и дизассемблированный участок кода клиента; инструкция mov [esi + $288], ecx как раз и отвечает за запись величины HP по адресу $1265F098, а значение указателя равно $1265EE10.
Смещение: +288.
$1265EE10 – следующая величина для поиска.
Note: если не будет найдено ни одного значения, значит требуется повторить процедуру по определению значения указателя (просмотр списка опкодов)
Берем первый из найденных адресов (совсем не обязательно, что данный адрес даст какой-либо результат), добавляем его в список (название +$288 для более легкой идентификации смещений) и теперь начнем поиск того, что обращается к данному адресу
Список опкодов достаточно велик, что, по большей части, свидетельствует о правильности поиска.
Рассмотрим две инструкции.
первая по адресу: $004c2ad2
Видим, что значение указателя уже было использовано нами для поиска, следовательно, требуется выбрать другую инструкцию.
вторая по адресу: $004d11c8
Человек, знакомый с ассемблером, сразу видит результат… К этому результату вернемся чуть позже, т.к. завершим процедуру поиска базового адреса по выработанному алгоритму.
$039F6E20 – следующая величина для поиска.
Осуществив сканирование, CE выдаст список и выделит первый адрес зеленым цветом, что означает «статический адрес»
Это и есть «почти» базовый адрес, которым пользуются большинство ботоделов. Используя его, и указанные ранее смещения, можем записать:
[$00B06B5C] + $28 + $288 – Максимальное значение HP
Однако (возвращаясь к ассемблеру), хоть мы и нашли статический адрес, но этот адрес является адресом «структуры игрока», в то время как истинный базовый адрес - $00B03064
mov eax, [00B03064]
mov eax, [eax+1c]
mov eax, [ecx+28]
Итог:
[Базовый адрес] = $00B03064
[BA] + $1C + $28 + $288 – Максимальное значение HP
Note: Текущее значение HP искать нет уже необходимости, т.к. адрес был найден на первых шагах и он отличается от HP max на 18 байт, т.е.:
[BA] + $1C + $28 + $270 - Текущее значение HP
(c) Dwar
копирование материала разрешено только с указанием автора и адреса источника
re: Поиск базового адреса, смещения. Jade Dynasty
Quote:
Originally Posted by Dwar
Note: Текущее значение HP искать нет уже необходимости, т.к. адрес был найден на первых шагах и он отличается от HP max на 8 байт, т.е.:
[BA] + $1C + $28 + $280 - Текущее значение HP
отличается не на 8 а на 18 байт
[BA] + $1C + $28 + $270 - Текущее значение HP
За гайд спс [Only registered and activated users can see links. Click Here To Register...]
re: Поиск базового адреса, смещения. Jade Dynasty
Quote:
не на 8 а на 18 байт
точно :). подправил
re: Поиск базового адреса, смещения. Jade Dynasty
спасибо кое что новое узнал....если же у кого то знание ассемблера и команд на уровне табуретки (вопщем как у меня)я думаю вам поначалу будет проще использовать Artmoney (качаете последнюю версию ,открываете хелп и переходите к пункту 10 все подробно описано )