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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 08.10.2010, 20:05   #181
Местный
 
Регистрация: 10.08.2010
Сообщений: 634
Сказал Спасибо: 22
Имеет 95 спасибок в 70 сообщенях
mira пока неопределено
По умолчанию

попробывал порисовать ченеть средствами клиента, вчера поигралса..
начал с линии и квадрата... получилось как ни странно только долго искал че хукнуть чтоб 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;

рисовать строку не пробывал, нада шрифт создавать или тоже хукать гдето) времени уже не было
mira вне форума   Ответить с цитированием
За это сообщение mira нажился 3 спасибками от:
Старый 09.10.2010, 01:27   #182
Местный
 
Регистрация: 10.08.2010
Сообщений: 634
Сказал Спасибо: 22
Имеет 95 спасибок в 70 сообщенях
mira пока неопределено
По умолчанию

строчки тоже нарисовал простейшие средствами клиента..


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.
mira вне форума   Ответить с цитированием
За это сообщение mira нажился 3 спасибками от:
Старый 10.10.2010, 15:34   #183
Пользователь
 
Регистрация: 19.07.2010
Сообщений: 45
Сказал Спасибо: 10
Имеет 23 спасибок в 12 сообщенях
Guzh пока неопределено
По умолчанию

Спасиб, завтра гляну =)
Guzh вне форума   Ответить с цитированием
Старый 25.10.2010, 12:18   #184
Пользователь
 
Регистрация: 19.07.2010
Сообщений: 45
Сказал Спасибо: 10
Имеет 23 спасибок в 12 сообщенях
Guzh пока неопределено
По умолчанию

Еще вопросик появился. Кто-нибудь добавлял/уничтожал пакет приходящие в функцию AddNetworkQueue ? Через использование FArray::Add(int,int) и FArray::Remove(int,int,int) делали это или как-то по-другому?
Guzh вне форума   Ответить с цитированием
Старый 27.10.2010, 18:27   #185
Местный
 
Регистрация: 10.08.2010
Сообщений: 634
Сказал Спасибо: 22
Имеет 95 спасибок в 70 сообщенях
mira пока неопределено
По умолчанию

сначала я менял ид ненужных пакетов на $1F - action failed
клиент сам разруливал удалять не удалять. потом просто перестал вызывать для пакета оригинальную AddNetworkQueue изменений не заметил в работе. я чет думал что пакет нада удалять если он попал в DispatchNetworkQueue только
mira вне форума   Ответить с цитированием
За это сообщение mira нажился 2 спасибками от:
Старый 30.10.2010, 11:42   #186
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

mira, менять id на $1F это хорошо придумано. Если просто не вызывать оригинал AddNetworkQeue думаю будут утечки памяти.

Кто нибудь разобрался каким образом через клиент отправить пакет на логин сервер (нужно для правильного выбора сервера), а то стандартный SendPacket игнорируется?
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Старый 30.10.2010, 12:12   #187
Рыцарь
 
Аватар для Morfik
 
Регистрация: 13.10.2009
Сообщений: 665
Сказал Спасибо: 38
Имеет 172 спасибок в 108 сообщенях
Morfik пока неопределено
По умолчанию

Цитата:
Сообщение от Yegor Посмотреть сообщение
Кто нибудь разобрался каким образом через клиент отправить пакет на логин сервер (нужно для правильного выбора сервера), а то стандартный SendPacket игнорируется?
может ?RequestServerLogin@UNetworkHandler@@UAEHAAVL2Para mStack@@@Z покатит? вот тока формат аргумента хз какой (class L2ParamStack &)
Morfik вне форума   Ответить с цитированием
За это сообщение Morfik нажился спасибкой от:
Старый 30.10.2010, 13:59   #188
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Morfik, надо покурить какую функцию использует в свою очередь RequestServerLogin
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)

Последний раз редактировалось Yegor, 24.11.2010 в 17:29.
Yegor вне форума   Ответить с цитированием
Старый 22.11.2010, 20:18   #189
Местный
 
Аватар для Prixmegently
 
Регистрация: 09.01.2010
Сообщений: 384
Сказал Спасибо: 60
Имеет 27 спасибок в 24 сообщенях
Prixmegently пока неопределено
По умолчанию

RequestAuthLogin -> RequestServerList -> RequestServerLogin
Prixmegently вне форума   Ответить с цитированием
За это сообщение Prixmegently нажился 2 спасибками от:
Старый 09.01.2011, 21:58   #190
Новичок
 
Регистрация: 09.01.2011
Сообщений: 1
Сказал Спасибо: 0
Имеет 1 спасибку в 1 сообщении
ancient пока неопределено
По умолчанию

Разбираюсь с перехватом функций клиента и возникла непонятная ситуация: некоторые функции хукаются нормально, а некоторые вызывают криты в клиенте без видимых на то причин.

Вот пример кода:
PHP код:
#include <Windows.h>

#pragma pack(push, 1)
struct jmp_struct {
    
BYTE instruction;
    
DWORD argument;
};
#pragma pack(pop)

BYTE old[5];
DWORD written 0;
jmp_struct jump;

typedef DWORD (__stdcall *t_Func)(voidparam1/*, int param2*/);
t_Func Original_Func NULL;

DWORD WINAPI Intercept_Func(voidparam1/*, int param2*/) {
    
// Сохранение контекста класса перехваченного метода.
    
DWORD this_ptr NULL;
    
__asm mov this_ptrecx;

    
// Восстанавливаем 5 первых байт функции.
    
WriteProcessMemory(GetCurrentProcess(), (void*)Original_Func, (void*)&old5, &written);

    
MessageBox(0L"Hooked"L""MB_OK);

    
// Восстановление в регистр ecx контекста класса перехваченного метода.
    
__asm mov ecxthis_ptr;
    
DWORD originalResult Original_Func(param1/*, param2*/);

    
// Снова заменяем  5 байт функции на команду перехода на нашу функцию
    
WriteProcessMemory(GetCurrentProcess(), (void*)Original_Func, (void*)&jump5, &written);

    return 
originalResult;
}

void InterceptFunctions() {
    
HMODULE hEngine GetModuleHandleA("engine.dll");

    
/* DWORD UGameEngine::OnSocialAction(User* user, int id) */
    //Original_Func = (t_Func)GetProcAddress(hEngine, "?OnSocialAction@UGameEngine@@UAEHPAUUser@@H@Z"); // Работает

    /* DWORD UNetworkHandler::AddNetworkQueue(NetworkPacket* networkPacket) */
    
Original_Func = (t_Func)GetProcAddress(hEngine"?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z"); // Не работает

    
if(Original_Func == 0) {
        
MessageBox(NULLL"Can't get address"L"Error!"MB_OK);
        return;
    }

    
jump.instruction 0xE9;
    
jump.argument = (DWORD)&Intercept_Func - ((DWORD)Original_Func 5); // Смещение для jmp = <адрес назначения> - (<адрес jmp> + sizeof(BYTE) + sizeof(int))

    
ReadProcessMemory(GetCurrentProcess(), (void*)Original_Func, (void*)&old5, &written);
    
WriteProcessMemory(GetCurrentProcess(), (void*)Original_Func, (void*)&jumpsizeof(jmp_struct), &written);
}


BOOL APIENTRY DllMain(HANDLE hModuleDWORD ul_reason_for_callLPVOID lpReserved ) {
    if(
ul_reason_for_call == DLL_PROCESS_ATTACH ) {
        
// MessageBox(0, L"Injected", L"", MB_OK);
        
InterceptFunctions();
    }
    return 
TRUE;

Перехват OnSocialAction (как и многих других функций) работает вполне успешно, а вот AddNetworkQueue перехватить не получается. В чем может быть дело?

P.S. Крит возникает в момент вызова оригинальной функции из функции-перехватчика, т.е сразу после MessageBox(0, L"Hooked", L"", MB_OK);
ancient вне форума   Ответить с цитированием
За это сообщение ancient нажился спасибкой от:
Ответ

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



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

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


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

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

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