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

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 12.04.2010, 21:39   #1
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 60
Сказал Спасибо: 3
Имеет 107 спасибок в 21 сообщенях
GoldFinch пока неопределено
По умолчанию [C++] перехват AddNetworkQueue

Перехват UNetworkHandler::AddNetworkQueue, для фришек
cpp Код:
#include <Windows.h> class UNetworkHandler {}; #pragma pack(push, 1) struct NetworkPacket {     unsigned char id, _padding1, exid, _padding2;     unsigned short size, _padding3;     unsigned char* data; }; #pragma pack(pop) int (__fastcall *UNetworkHandler_AddNetworkQueue)(UNetworkHandler*, int, NetworkPacket*); int __fastcall UNetworkHandler_AddNetworkQueue_hook(UNetworkHandler* This, int /*edx*/, NetworkPacket* packet) {     // Полезная нагрузка перехвата     char buf&#91;1024];     wsprintfA(buf, "Packet id=0x%x, size=0x%x", packet->id, packet->size);     OutputDebugStringA(buf);     //-----------------------------------------     return (*UNetworkHandler_AddNetworkQueue)(This, 0/*чтоугодно*/, packet); } DWORD WINAPI InitThread(LPVOID) {     HMODULE hEngine = LoadLibraryA("Engine.dll");     (FARPROC&) UNetworkHandler_AddNetworkQueue = GetProcAddress(hEngine, "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z");     void** UNetworkHandler_vftable = (void**)GetProcAddress(hEngine, "??_7UNetworkHandler@@6BUObject@@@");     while(*UNetworkHandler_vftable != (void*)UNetworkHandler_AddNetworkQueue)         ++UNetworkHandler_vftable;     *UNetworkHandler_vftable = (void*)UNetworkHandler_AddNetworkQueue_hook;     return 0; } BOOL WINAPI DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID) {     if (DLL_PROCESS_ATTACH != ul_reason_for_call)         return 1;     DisableThreadLibraryCalls(hModule);     CreateThread(0, 0, &InitThread, 0, 0, 0);     return 1; }

Спасибо Demion за идею использовать __fastcall вместо __thiscall.
GoldFinch вне форума   Ответить с цитированием
За это сообщение GoldFinch нажился 7 спасибками от:
Старый 13.04.2010, 01:18   #2
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от GoldFinch Посмотреть сообщение
Спасибо Demion за идею использовать __fastcall вместо __thiscall
да, идея отличная, избавляет от враперов)
ток думаю надо следить чтоб edx в функции не испортился а то он в вызывающей может использоваться потом...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 13.04.2010, 19:20   #3
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 60
Сказал Спасибо: 3
Имеет 107 спасибок в 21 сообщенях
GoldFinch пока неопределено
По умолчанию

xkor, функции с соглашением __thiscall (а также stdcall и cdecl) могут портить edx (а также eax и ecx)
GoldFinch вне форума   Ответить с цитированием
Старый 13.04.2010, 23:29   #4
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

GoldFinch, во заразы...)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 14.04.2010, 11:24   #5
Новичок
 
Регистрация: 07.04.2010
Адрес: Питер
Сообщений: 9
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
tgl пока неопределено
По умолчанию

а откуда инфа про формат struct NetworkPacket ?
tgl вне форума   Ответить с цитированием
Старый 14.04.2010, 15:25   #6
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

tgl, в функции вызывающей AddNetworkQueue хорошо видно что туда посылается)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 14.04.2010, 18:23   #7
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 60
Сказал Спасибо: 3
Имеет 107 спасибок в 21 сообщенях
GoldFinch пока неопределено
По умолчанию

tgl, если в отладчике поставить клиент на паузу и немного подождать, то в очереди пакетов скопится сразу несколько, и так как они хранятся в массиве, то в дампе очереди пакетов будет хорошо видно их структуру.
GoldFinch вне форума   Ответить с цитированием
За это сообщение GoldFinch нажился спасибкой от:
Старый 14.04.2010, 18:58   #8
Новичок
 
Регистрация: 07.04.2010
Адрес: Питер
Сообщений: 9
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
tgl пока неопределено
По умолчанию

понятно, значит-с мне надо еще покурить дебагер )
tgl вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



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

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


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

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

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