Показать сообщение отдельно
Непрочитано 30.05.2011, 11:35   #7
Аватар для Azagthtot
Эксперт

По умолчанию Re: Как узнать заточку, на системном уровне с клиента

Можно и подробнее.

Приведенные ниже рекомендации подразумевают, что вы знаете ассеблер и методики работ с памятью процесса в 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
Дальше вам предстоит заниматься отладкой, т.к. данный метод я не ковырял.
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Сказали спасибо: