Показать сообщение отдельно
Старый 30.07.2010, 00:51   #128
Новичок
 
Регистрация: 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
...

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