Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Игровой клиент (https://forum.zone-game.info/forumdisplay.php?f=54)
-   -   Как узнать заточку, на системном уровне с клиента (https://forum.zone-game.info/showthread.php?t=14281)

spenar 25.05.2011 15:33

Как узнать заточку, на системном уровне с клиента
 
Ребят, кто знает как узнать уровень заточки определёной вещи системно, чтоб можно было это значение вытянуть с какого-то файла.... Помогите если знаете!

Credo 25.05.2011 16:18

Re: Как узнать заточку, на системном уровне с клиента
 
Какой заточки, какой вещи, как системно? Ты с какой планеты?

Tassadar999 27.05.2011 16:17

Re: Как узнать заточку, на системном уровне с клиента
 
В смысле к примеру бегая по серверу, и видя чела с заточенной пушкой узнать точно на сколько она заточена? Патч на цвета заточки в таком случае в помощь.

Credo 27.05.2011 16:42

Re: Как узнать заточку, на системном уровне с клиента
 
Если включить логику, то (раз мы находимся на форуме Администраторов игровых серверов) вот несколько вариантов (если, конечно, это то, о чем я думаю исходя из поста выше):
1. alt+G
2. Непосредственно в БД игрового сервера.
3. Обвязка с сайта (или нечто подобное). Хотя... этот пункт - дочерний из второго, по сути.

Azagthtot 27.05.2011 19:31

Re: Как узнать заточку, на системном уровне с клиента
 
Анализироавть пакет CharInfo на клиенте (напишите свою dll-перехватчик). Заточка передается в нем

spenar 30.05.2011 08:49

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

Сообщение от Azagthtot (Сообщение 123917)
Анализироавть пакет CharInfo на клиенте (напишите свою dll-перехватчик). Заточка передается в нем

А можете поподробней как это зделать?

Azagthtot 30.05.2011 11:35

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
Дальше вам предстоит заниматься отладкой, т.к. данный метод я не ковырял.

spenar 30.05.2011 16:03

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

Сообщение от Azagthtot (Сообщение 124219)
Можно и подробнее.

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

Спасибо, за пояснение, но это не дало просвета в моей туманной голове! Т.к. ассамблер я не знаю и приобретать знания ассамблера для мну пока не возможно (знаю язык программирования С++). Значит объясню вам свою идею, может вы сможете мне помочь или объяснить какой-то метод попроще! Я думал написать прогу для заточки, которая будет точить и в определённый момент когда точка достигла нужного результата, эта прога остановила процесс точки или начинала точить следующую шмотку! Вот зачем мне нужно было узнать заточку вещи в определённый момент времени! Так что если вы можете мне помочь (и вам не лень, так как знаю что программисты народ ленивый :D) то будьте добры, буду очень благодарен!

Azagthtot 30.05.2011 16:11

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

Сообщение от spenar (Сообщение 124248)
Я думал написать прогу для заточки, которая будет точить и в определённый момент когда точка достигла нужного результата, эта прога остановила процесс точки или начинала точить следующую шмотку! Вот зачем мне нужно было узнать заточку вещи в определённый момент времени! Так что если вы можете мне помочь (и вам не лень, так как знаю что программисты народ ленивый :D) то будьте добры, буду очень благодарен!

Тогда правильно ставьте задачу - в этом случае вам надо анализировать совсем другие пакеты.
К сожалению, ни LameGuard, ни CatsGuard, ни CCPGuard, ни Frost вашу прогу не оценят, и выдадут ей кик за незаконные действия.
Отсюда первый вопрос - а стоит ли это делать?
Второй вопрос (если ответ на первый "стоит"): зачем что-то изобретать, когда можно написать скрипт для phx
Ну и третий пункт. Если вы собрались что-то писать для клиента, то будте любезны, изучите предметную область.

spenar 30.05.2011 16:16

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

Сообщение от Azagthtot (Сообщение 124249)
К сожалению, ни LameGuard, ни CatsGuard, ни CCPGuard, ни Frost вашу прогу не оценят, и выдадут ей кик за незаконные действия.
Отсюда первый вопрос - а стоит ли это делать?
Второй вопрос (если ответ на первый "стоит"): зачем что-то изобретать, когда можно написать скрипт для phx
Ну и третий пункт. Если вы собрались что-то писать для клиента, то будте любезны, изучите предметную область.

Так вот дело в том что если писать скрипт через phx, то это оч легко спалить! Мне не нужно чтоб кто-то прогу оценивал, прога нужна мне... Мне нужно просто прогу которая будет улавливать уровень заточки определёной вещи в определёный момент ну и записывала в файл, всё остальное я могу зделать сам... Просто на этом куске я застрял...


Текущее время: 09:23. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot