Что нового

Как вычислить offset значения?

Shaman

Знающий
Сообщения
33
Репутация
5
Уважаемые, обращаюсь к вам, ибо гугл ничего толкового не подсказал. :(
Задача: вычислить оффсет найденного значения, если известен базовый адрес.
Например, я нахожу адрес здоровья чара, знаю базовый адрес, а что делать с этим дальше, что бы вычилсить оффсет - не знаю.
Ищу значения с помощью ArtMoney, пытался разобраться с Cheat Engine, но увы не понял как с ним работать :wacko:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
извини, по теме ничего подсказать не могу.
но вот по поводу ArtMOney и CheatEngine, то там, если мне не изменяет память, надо посмотреть нужное значение, сделать поиск в памяти по этому значению. их будет куча. потом изменить это значение, например потратив здоровье или пополнив его. потом снова сделать поиск, только на этот раз поиск будет производиться уже в найденных, кол-во будет уже поменьше, а может и вовсе одно. и так, пока не останется одно единственное, а с ним делать уже все что хочется - заморозить, увеличить и т.д.
мне по крайней мере никогда не приходилось вычислять все эти смещения и прочее... мне казалось что все эти проги как раз и предназначены чтобы делать это за нас
 
Автор
S

Shaman

Знающий
Сообщения
33
Репутация
5
Найти не проблема, но мне нужен оффсет, что бы бот, которого я пишу, получал нужное значение из игры. Для этого ему нужно считать определённую ячейку памяти. Но для определения адресса этой ячейки нужен оффсет и базовый адрес. Базовый у меня есть, осталось найти оффсет.
 

Sirioga

Знающий
Сообщения
48
Репутация
7
Shaman сказал(а):
Базовый у меня есть, осталось найти оффсет.
Пример для Cheat Engine
Вычисляешь адрес текущего ХП после чего, добавляешь этот адрес в строку для редактирования, жмёшь на него правой кнопкой мыши, откроется контекстное меню, жмёшь на "Find out what writes to this addres", если появится MsgBox в нём жми ОК, появится еще одно окошко в нём тычь на кнопку More information, красным будет подсвечена строка в ней офсет записан в хексе (нули не в счёт) и там же путь будет записан по какому принципу вычисляется данный адрес, думаю разберёшься, если нет, пиши.
Для какой игры бот если не секрет?
 
Автор
S

Shaman

Знающий
Сообщения
33
Репутация
5
Пишу для Perfect World на основе Mhs-bot-pw, нужно вычислить оффсет хп пета, его максимальное здоровье и верность, координаты перса и т.д.
 

Sirioga

Знающий
Сообщения
48
Репутация
7
Ясно :smile: я на другой ответ и не надеялся. Сейчас всё что пишется то для pw, мало кто пишет для других игр, ну что сказать...Perfect World Co LTD покорила всех своим творением...
 
Автор
S

Shaman

Знающий
Сообщения
33
Репутация
5
Отлично, оффсет я нашёл :ok:
А можно теперь узнать, как вычислить базовый адрес?
Нашалась такая строчка : mov [edi+38],eax
Как я понимаю, по адресу edi+38 помещается значение хранящееся в eax (38 - искомый оффсет). Но при каждом запуске в edi хранятся разные значения, как быть?
 

Sirioga

Знающий
Сообщения
48
Репутация
7
а EDI+38 это случайно не ESI получается?
(EDI это значение базового адреса)
Если так то:
Код:
#include <NomadMemory.au3>

$PROCESS_ID = WinGetProcess("Element Client")
$PROCESS_INFORMATION = _MemoryOpen($PROCESS_ID)

Global $OFFSET[3]
$OFFSET[1] = 38
$OFFSET[2] = Офсет интересующего нас адреса

$VARIABLE = _MemoryPointerRead("0xбазовый адрес", $PROCESS_INFORMATION , $OFFSET)
MsgBox(0, "Offset Info", $VARIABLE[1])


Надеюсь не ошибся. (От части копировал из MHS что бы понятней было)
Базовый адрес не составит труда найти, если иметь под рукой гайд найденый на любом читерском сайте.
 
Автор
S

Shaman

Знающий
Сообщения
33
Репутация
5
Увы, получается не esi, а edi. Вот скрин
HP_PEt.bmp


Пробовал предложенный код для здоровья, маны чара - работает, но при небольшом изменении ($OFFSET[1] = 32). Для здоровья пета - не работает, так как смещение идёт по edi, а не по esi как у здоровья чара.
 

Sirioga

Знающий
Сообщения
48
Репутация
7
Shaman сказал(а):
Для здоровья пета - не работает, так как смещение идёт по edi, а не по esi как у здоровья чара.
Хм, да немного неожиданно, сейчас сам попробую.
----
Долго издевался над CE ничего не понял, потом решил погуглить на этот предмет, почитай на elitepvpers.de, там парень с аналогичной проблемой, я ничего не понял что там насчёт этого но он сказал что нашел выход просматривая исходники AutoPot2.21.
Исходников я на том сайте не нашел, сейчас буду гуглить;)


Добавлено:
Сообщение автоматически объединено:

Исходник прикреплён.
Может поможет чем, но явно не в поиске офсетов.
Сам пока не догадался как их выудить.
А почитав:
Код:
Global $OSPetHp[5]

Совсем запутался.
 
Автор
S

Shaman

Знающий
Сообщения
33
Репутация
5
Спасибо за исходник :smile:
Вот мои размышления по поводу базового адреса для здоровья пета:
Сразу после строчки mov [edi+38], eax идёт выталкивание из стека в edi (pop edi), это значит, что востанавливается первоначлаьное значение в регистр edi, а следовательно до этого его поменяли на то, которое нам нужно для mov [edi+38], eax. Т.е. Нужно найти строчку push edi, перед mov [edi+38],eax и между ней и pop edi узнать как вычиляется значение в регистре edi на основе базового адреса (как понимаю, относительно регистра esi).
З.ы. На предложенном форуме был - но дошёл пока до 21 страницы - там есть много офсетов (координаты чара, и т.д.) и много другой инфы по PW, попытаюсь всё это проанализировать.
 

Sirioga

Знающий
Сообщения
48
Репутация
7
Shaman сказал(а):
На предложенном форуме был - но дошёл пока до 21 страницы - там есть много офсетов (координаты чара, и т.д.) и много другой инфы по PW, попытаюсь всё это проанализировать.

Про чат там ничего интересного? ато я как бы не особо дружу с лунным английским некоторых личностей.

OffTopic:
Вроде бы и родной язык а искаверкают порой до неузнаваемости, а потом сиди и думай на каком языке это выразились, даже google translate отказывается переводить хоть как нибудь. :laugh:
 
Автор
S

Shaman

Знающий
Сообщения
33
Репутация
5
Про чат там ничего интересного?
http://www.elitepvpers.de/forum/pw-hacks-bots-cheats-exploits/195923-rus-server-13.html Нарыл только это, если не ошибаюсь, чат был был в smurfit`е, но гугл его исходников не находит :(
 

Flame_xXx

Новичок
Сообщения
18
Репутация
0
прошу прощения, за вопрос не совсем по теме, а MHS 2.3 на данный момент работает для PW? Просто хотелось узнать стоит ли ковыряться в его коде как в рабочем примере.. заранее спасибо
 
Автор
S

Shaman

Знающий
Сообщения
33
Репутация
5
MHS 2.3 на данный момент работает для PW?
Да, работает
Но если вы хотите написать совего бота для PW, я бы всё равно советовал разбираться в его коде, т.к. причина его возможной неработоспособности - не правильно указанные базовый адрес и офсеты в файле Custom_OffSets.ini
 

Sirioga

Знающий
Сообщения
48
Репутация
7
Shaman сказал(а):
Нарыл только это, если не ошибаюсь, чат был был в smurfit`е, но гугл его исходников не находит :(

Ну я так и думал что исходниками автор снурфита не будет делится, а с чатом буду разбиратся, спасибо :beer:
 
Автор
S

Shaman

Знающий
Сообщения
33
Репутация
5
Наконец-то я понял как вычислить офсет здоровья пета относительно базового адреса. Расскажу, как его найти, может быть это кому-нибудь пригодится.
Итак, в процеесе поиска офсета мы нашли строчку ассемблера: mov [edi+38],eax. Но базовый адрес у нас находится в регистре esi (точнее в esi у нас хранится базовый адрес+ 20h), поэтому надо найти связь между edi и esi. Для этого с помощью Cheat Engine просматриваем дизассемблированный код. В процессе поиска находим такую строчку mov edi,[ecx+eax*4+10] и сразу выше неё mov ecx,[esi+00000c24]. Т.е. мы получили связь между edi и (esi и eax). Осталось найти значение eax. Дальнейший анализ результатов не дал, поэтому eax был вычислен опытным путём - он равен 0. Т.е. для здоровья пета пулучаем следующую формулу:
Base_Adress+20h+C24h+10h+38h.
При просмотре исходников автопота оказалось, что в eax хранится номер клетки петомца минус еденица.
Для всех новичков, которые только начинают (как я) писать ботов дам маленький совет - не брезгуйте дизассемблированием ;)
 

Flame_xXx

Новичок
Сообщения
18
Репутация
0
Еще бы ассемблер знать на должном уровне ;D
 

Flame_xXx

Новичок
Сообщения
18
Репутация
0
Ну mov то все знают.. Дизассемблер не поррекомендуете? ;)
 
Верх