Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Packet Logger kod c++


cytrynowy012

Rekomendowane odpowiedzi

Opublikowano

Witam, poszukuje działającego kodu źródłowego do podglądania wysłanych oraz odebranych pakietów między klientem gry a serwerem. Dobrze by było, gdyby w kodzie znajdowała się również funkcja do wysyłania pakietów na serwer:) Próbowałem poniżej zamieszczonego kodu jednak on nie pozwala na wysyłanie pakietów, a na dodatek wywala błąd: nbqihu.png

#include <windows.h>
#include <stdio.h>

bool DetourFunc( BYTE* oldFunc, BYTE* newFunc, DWORD len )
{
	BYTE* newMem4base = NULL;
	DWORD dwOld;

	newMem4base = ( BYTE* )malloc( 5+len );

	if( newMem4base == NULL )
		return false;

	for( DWORD i = 0; i < ( len+5 ); i++ )
		newMem4base[i] = 0x90;

	VirtualProtect( oldFunc, len, PAGE_READWRITE, &dwOld );

	memcpy( newMem4base, oldFunc, len );
	oldFunc[0] = 0xE8;
	*( DWORD* )( oldFunc+0x01 ) = DWORD( newFunc-oldFunc-5 );
	oldFunc[5] = 0xE9;
	*( DWORD* )( oldFunc+0x06 ) = DWORD( newMem4base-( oldFunc+0x5 )-5 );
	newMem4base += len;
	newMem4base[0] = 0xE9;
	*( DWORD* )( newMem4base+0x01 ) = DWORD( ( oldFunc+10 )-newMem4base-5 );

	for( DWORD i = 10; i <len; i++ )
		oldFunc[i] = 0x90;

	return true;
}
bool bDataCompare(const unsigned char *pData, const unsigned char *bMask, const char *szMask)
{
	for(; *szMask; ++szMask, ++pData, ++bMask)
		if(*szMask == 'x' && *pData != *bMask )
			return false;
	return (*szMask) == 0;
}
DWORD dwFindPattern(BYTE *bMask, char *szMask)
{
	DWORD dw_Address =	0x00400000;
	DWORD dw_Len =		0x00436000;

	for(DWORD i = 0; i < dw_Len; i++)
		if(bDataCompare((unsigned char*) (dw_Address + i), bMask, szMask) )
			return (DWORD) (dw_Address + i);
	return 0;
}


void hkSend()
{
	char* packet;
	_asm
	{
		pushad 
		pushfd
		MOV packet,EDX
	}
	printf("Send: %s\n",packet);
	_asm
	{
		popfd 
		popad
	}
}
void hkRecv()
{
	char* packet;

	_asm
	{
		pushad 
		pushfd
		MOV packet,EDX
	}
	printf("Recv: %s\n",packet);
	_asm
	{
		popfd 
		popad
	}
}


DWORD WINAPI tThread(LPVOID param)
{
	AllocConsole();
	freopen("CONIN$", "r", stdin);
	freopen("CONOUT$", "w", stdout);
	freopen("CONOUT$", "w", stderr);

	/* Send */
	BYTE s_bPatter[] = {0x53,0x56,0x8B,0xF2,0x8B,0xD8,0xEB,0x04};
	char *s_cPatter = "xxxxxxxx";
	DWORD dSend = dwFindPattern(s_bPatter,s_cPatter);
	/* Recv */
	BYTE r_bPatter[] = {0x55,0x8B,0xEC,0x83,0xC4,0xF4,0x53,0x56,0x57,0x33,0xC9,0x89,0x4D,0xF4,0x89,0x55,0xFC,0x8B,0xD8,0x8B,0x45,0xFC};
	char *r_cPatter = "xxxxxxxxxxxxxxxxxxxxxx";
	DWORD dRecv = dwFindPattern(r_bPatter,r_cPatter);

	DetourFunc( ( BYTE* )dSend, ( BYTE* )&hkSend, 14 );
	DetourFunc( ( BYTE* )dRecv, ( BYTE* )&hkRecv, 11 );
	return 0x0;
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		CreateThread(nullptr, 0, tThread, nullptr, 0, nullptr);
		DisableThreadLibraryCalls(hModule);
		break;
	}
	return TRUE;
}

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...