Показать сообщение отдельно
Непрочитано 30.05.2011, 16:03   #8
Пользователь

Автор темы (Топик Стартер) Re: Как узнать заточку, на системном уровне с клиента

Цитата:
Сообщение от Azagthtot Посмотреть сообщение
Можно и подробнее.

Приведенные ниже рекомендации подразумевают, что вы знаете ассеблер и методики работ с памятью процесса в Windows. Если таковых знаний нет, то прежде чем читать приведенный ниже текст, советую их приобрести.
Все имена и адреса будут даны для клиента хроник Interlude, для других - по аналогии.

И так, как известно, для обработки каждого пакета вызывается соответствующий метод. Таким образом, при получении пакета CharInfo, будет вызван метод UGameEngie::OnCharInfo. Это экспортируемая функция, таким образом, его адрес можно получить через GetProcAddress.
Этот метод определен в engine.dll и его отмэнгленное имя будет
?OnCharInfo@UGameEngine@@UAEHPAUUser@@VFVector@@HA AVL2ParamStack@@@Z

Теперь посмотрим код его вызова
Код:
jmp +00181c78h
т.о. зная адрес метода, можно найти само тело. У меня получается так:
адрес метода 03f3db3h, соответственно тело находится по адресу 0575A2Bh
Первая часть выполнена. Теперь мы пишем свой перехватчик, по адресу метода вместо jmp +00181c78h записываем jmp адрес_нашего_перехватчика, не забываем, что ваш перехватчик должен быть оформлен как cdecl функция. После обработки вами данных, вам надо вызвать "родной" метод перейдя (т.е. выполнив jmp) по сохраненному адресу "тела".

Теперь вторая часть. Как нам получить доступ к данным.
А тут еще проще. Параметры можно восстановить по мэнгл имени. Или, просто поставьте точку останова на этом методе и посмотрите стек, помятуя о том, что OnCharInfo это thiscall вызов.

На самом деле, вас будет интересовать только один параметр это L2ParamStack * который будет передан по адресу ESP+010h
Дальше вам предстоит заниматься отладкой, т.к. данный метод я не ковырял.
Спасибо, за пояснение, но это не дало просвета в моей туманной голове! Т.к. ассамблер я не знаю и приобретать знания ассамблера для мну пока не возможно (знаю язык программирования С++). Значит объясню вам свою идею, может вы сможете мне помочь или объяснить какой-то метод попроще! Я думал написать прогу для заточки, которая будет точить и в определённый момент когда точка достигла нужного результата, эта прога остановила процесс точки или начинала точить следующую шмотку! Вот зачем мне нужно было узнать заточку вещи в определённый момент времени! Так что если вы можете мне помочь (и вам не лень, так как знаю что программисты народ ленивый ) то будьте добры, буду очень благодарен!
spenar вне форума Ответить с цитированием