Программинг Форум для тем связанных с программированием
12.04.2010, 21:39
#1
Пользователь
Регистрация: 03.11.2008
Сообщений: 60
Сказал Спасибо: 3
Имеет 107 спасибок в 21 сообщенях
[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[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 нажился 7 спасибками от:
13.04.2010, 01:18
#2
Admin!
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
Цитата:
Сообщение от
GoldFinch
Спасибо Demion за идею использовать __fastcall вместо __thiscall
да, идея отличная, избавляет от враперов)
ток думаю надо следить чтоб edx в функции не испортился а то он в вызывающей может использоваться потом...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
13.04.2010, 19:20
#3
Пользователь
Регистрация: 03.11.2008
Сообщений: 60
Сказал Спасибо: 3
Имеет 107 спасибок в 21 сообщенях
xkor , функции с соглашением __thiscall (а также stdcall и cdecl) могут портить edx (а также eax и ecx)
13.04.2010, 23:29
#4
Admin!
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
GoldFinch , во заразы...)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
14.04.2010, 11:24
#5
Новичок
Регистрация: 07.04.2010
Адрес: Питер
Сообщений: 9
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
а откуда инфа про формат struct NetworkPacket ?
14.04.2010, 15:25
#6
Admin!
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
tgl , в функции вызывающей AddNetworkQueue хорошо видно что туда посылается)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
14.04.2010, 18:23
#7
Пользователь
Регистрация: 03.11.2008
Сообщений: 60
Сказал Спасибо: 3
Имеет 107 спасибок в 21 сообщенях
tgl , если в отладчике поставить клиент на паузу и немного подождать, то в очереди пакетов скопится сразу несколько, и так как они хранятся в массиве, то в дампе очереди пакетов будет хорошо видно их структуру.
За это сообщение GoldFinch нажился спасибкой от:
14.04.2010, 18:58
#8
Новичок
Регистрация: 07.04.2010
Адрес: Питер
Сообщений: 9
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
понятно, значит-с мне надо еще покурить дебагер )
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 14:22 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!