ПолезностиИсключительно для полезных тем из других разделов. Темы тут не создаются!
Темы сюда перемещаются из других разделов, и на их старых местах остаются постоянные перенаправления.
попробывал порисовать ченеть средствами клиента, вчера поигралса..
начал с линии и квадрата... получилось как ни странно только долго искал че хукнуть чтоб CanvasUtil выловить. клиент видимо его не пользует или пользует нечасто)
в итоге хукнул ??0FCanvasUtil@@QAE@PAVFRenderTarget@@PAVFRenderIn terface@@W4EVertexShader@@W4EPixelShader@@@Z
это по всем понятиям должен быть конструктор..
функция рисующая квадрат получилась такой-
procedure uDrawRect(x,y,x1,y1:single; color : DWORD);
var
forig : pointer;
dllWORD;
begin
dll:=GetModuleHandle('engine.dll');
forig:=GetProcAddress(dll,'?DrawRect@FCanvasUtil@@ QAEXMMMMVFColor@@@Z');
asm
push color
push y1
push x1
push y
push x
mov ecx,uCanvas // объект возвращенный в EAX после хука конструктора
call forig
end
end;
рисовать строку не пробывал, нада шрифт создавать или тоже хукать гдето) времени уже не было
строчки тоже нарисовал простейшие средствами клиента..
procedure uDrawString(x,y :integer ; pText:PWideChar; pfntointer; color : DWORD);
var
forig : pointer;
dllWORD;
begin
dll:=GetModuleHandle('engine.dll');
forig:=GetProcAddress(dll,'?DrawString@FCanvasUtil @@QAEHHHPBGPAVUFont@@VFColor@@@Z');
asm
push color
push pfnt
push pText // шрифт взят из перехвата ??0UFont@@QAE@XZ (хз че за функция и че за шрифт) не заморачивалса)
push y
push x
mov ecx,uCanvas // в есх помещаем добытый ранее экземпляр класса
call forig
end
end;
врятли буду пользовать эти функции клиента, просто проверил для общего познания что работают =))))))))
Последний раз редактировалось mira, 01.12.2010 в 19:28.
Еще вопросик появился. Кто-нибудь добавлял/уничтожал пакет приходящие в функцию AddNetworkQueue ? Через использование FArray::Add(int,int) и FArray::Remove(int,int,int) делали это или как-то по-другому?
сначала я менял ид ненужных пакетов на $1F - action failed
клиент сам разруливал удалять не удалять. потом просто перестал вызывать для пакета оригинальную AddNetworkQueue изменений не заметил в работе. я чет думал что пакет нада удалять если он попал в DispatchNetworkQueue только
mira, менять id на $1F это хорошо придумано. Если просто не вызывать оригинал AddNetworkQeue думаю будут утечки памяти.
Кто нибудь разобрался каким образом через клиент отправить пакет на логин сервер (нужно для правильного выбора сервера), а то стандартный SendPacket игнорируется?
Кто нибудь разобрался каким образом через клиент отправить пакет на логин сервер (нужно для правильного выбора сервера), а то стандартный SendPacket игнорируется?
может ?RequestServerLogin@UNetworkHandler@@UAEHAAVL2Para mStack@@@Z покатит? вот тока формат аргумента хз какой (class L2ParamStack &)
Разбираюсь с перехватом функций клиента и возникла непонятная ситуация: некоторые функции хукаются нормально, а некоторые вызывают криты в клиенте без видимых на то причин.
// Восстановление в регистр ecx контекста класса перехваченного метода. __asm mov ecx, this_ptr; DWORD originalResult = Original_Func(param1/*, param2*/);
// Снова заменяем 5 байт функции на команду перехода на нашу функцию WriteProcessMemory(GetCurrentProcess(), (void*)Original_Func, (void*)&jump, 5, &written);