Вернуться   CoderX :: Forums > Основные форумы > Полезности
Войти через OpenID

Полезности Исключительно для полезных тем из других разделов.
Темы тут не создаются!
Темы сюда перемещаются из других разделов, и на их старых местах остаются постоянные перенаправления.

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 30.07.2010, 00:51   #1
Новичок
 
Регистрация: 11.05.2010
Сообщений: 19
Сказал Спасибо: 0
Имеет 10 спасибок в 6 сообщенях
Эдвадко пока неопределено
По умолчанию

AddNetworkQueue иногда не срабатывает.
Был у нас местный сервак, где защита была сделана через
правку на лету той-же engine.dll. Уже не помню точно,
но патчилась таблица вызовов обработки пакетов и еще чего-то.
Пришлось перехватывать неэкспортируемую функцию, которые
вызывают все функции разбора пакетов.
Функция обработки хука выглядела страшно -

void UserHookerParseServerPacket(DWORD SavedEAX, PDWORD StackPtr)
{
DWORD SavedRet=0;
DWORD SavedArg0=0;
DWORD SavedArg4=0;
static char str[200];
char *name;
if (StackPtr) SavedRet=*(StackPtr)-(DWORD)hEngineDll+0x2550000;
if (StackPtr+1) SavedArg0=*(StackPtr+1); //Parent_Class_Addr
if (StackPtr+2) SavedArg4=*(StackPtr+2); //parse mask

if (SavedRet == 0x28C591F) name="MacroList";
else if ((SavedRet >= 0x28C5932) && (SavedRet <= 0x28C5A41)) name=0;

else if (SavedRet == 0x28C9AAA) name="SkillList";
else if (SavedRet == 0x28C9B3A) name=0;

else if (SavedRet == 0x28CA290) name="SayPacket2";
else if (SavedRet == 0x28CA31F) name=0;

else if (SavedRet == 0x28CB0B0) name="ShortCutInit";
else if ((SavedRet >= 0x28CB0F4) && (SavedRet <= 0x028CB28B)) name=0;

Но это было давно...

А сейчас вот на офе, при переходе на Фрею изменился формат
пакета CharInfo. Не кардинально, но изменился - Скорость бега стал браться неправильно. Я по дампу пакета нашел и подправил код.
Но может где есть уже описание пакетов Фреи ?

Дальше... Название предметов я надеюсь в будущем брать из клиента
а не из настроечных файлов, а то некоторых нет.
Надеюсь на функцию -
(FARPROC&) UObject__GetName = GetProcAddress(hCore, "?GetName@UObject@@QBEPBGXZ");

И последнее. Может откроете тайну рисования непосредственно в окне клиента. А то в отдельном окошечке приходится карту рисовать.

Когда ставишь хук на UObject_ProcessEvent выдается вот что :
....
[3396] Process_Tick ecx=A93E880 ret=20045B4A
[3396] Process_Tick ecx=A93E880 ret=20045B4A
[3396] Reset ecx=A372940 ret=200626DC
[3396] Process_PreRender ecx=A93E880 ret=20045C89
[3396] Process_PreRender ecx=A93E880 ret=20045C89
[3396] Process_PostRender ecx=A93E880 ret=20045BE9
[3396] Process_PostRender ecx=A93E880 ret=20045BE9
[3396] OnTimer ecx=F91E380 ret=A99503E
...

Пре и пострендер вызываются два раза. В котором из них рисовать ?
Эдвадко вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Полезности



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 19:09.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!