Frage zu pakets

03/31/2011 23:59 ufoman444#1
Vorab: Bin mit Walter Sobschak`s Tutorial vertraut.

Ich habe ein paar (natürlich verschlüsselte) Pakete von einem Server gesnifft und die mir mal angeschaut.

Die ersten 2 Bytes ergeben zusammen immer Zahlen 15k+.

Als Ascii-Code sieht das ganze z.B. so aus:

...4}...@"l,..zf0.3s./U..m....W$


Kann mir jemand weiterhelfen?
Was ist zu tun :o ?

Danke schonmal im vorraus und sorry wenn ich offensichtliche Dinge nachfrage.
04/01/2011 00:12 MoepMeep#2
Quote:
Originally Posted by ufoman444 View Post
Vorab: Bin mit Walter Sobschak`s Tutorial vertraut.

Ich habe ein paar (natürlich verschlüsselte) Pakete von einem Server gesnifft und die mir mal angeschaut.

Die ersten 2 Bytes ergeben zusammen immer Zahlen 15k+.

Als Ascii-Code sieht das ganze z.B. so aus:

...4}...@"l,..zf0.3s./U..m....W$


Kann mir jemand weiterhelfen?
Was ist zu tun :o ?

Danke schonmal im vorraus und sorry wenn ich offensichtliche Dinge nachfrage.
entschlüsseln? :> Such dir die entsprechende Funktion im Clienten und bau sie nach.
04/01/2011 00:19 ufoman444#3
Mit CLient meinst du den Spielclient, oder?

Wie soll ich dort an eine Funktion herankommen?
04/01/2011 03:12 Flyff_Service#4
Durch debuggen geht alles ganz einfach, nimm am besten OllyDbg
04/01/2011 13:37 ufoman444#5
Ich dachte mit OllyDbg kann man nichts mit Paketen machen?
04/01/2011 14:08 yihaaa#6
Drei mal darfst du raten, welche Funktion du dir dazu ansehen musst. Richtig, die send Funktion in der WS2_32.dll. Wenn du jetz noch wüstest, welche Parameter die Funtkion hat, könntest du die Daten aus dem Stack lesen. Wenn du das nicht möchtest kannst du die Funktion auch hooken.

Code:
typedef int ( *_send )( SOCKET s, const char* buf, int len, int flags );
_send __send;

BOOL IsOpen = TRUE;

int hsend( SOCKET s, const char* buf, int len, int flags )
{
// Hier kannst du dir dein buf ausgeben lassen.
	return __send( s, buf, len, flags );
}

void ReadPackets( HMODULE dll )
{


	DWORD address = ( DWORD )GetProcAddress( GetModuleHandleA( "WS2_32.dll" ), "send" );
	__send = ( _send )CreateD3DDetour( ( void* )address, hsend, 5 );
}
Ich hoffe ich konnte dir helfen, wie du die Packets auch ohne zu sniffen auslesen kannst.
MfG

Edit: Mit der Verschlüsslung kannst du ja auch nachschauen und eine Gegenentschlüsselung einsetzen du die Packets schreiben willst.
04/01/2011 14:34 MoepMeep#7
Quote:
Originally Posted by yihaaa View Post
Drei mal darfst du raten, welche Funktion du dir dazu ansehen musst. Richtig, die send Funktion in der WS2_32.dll. Wenn du jetz noch wüstest, welche Parameter die Funtkion hat, könntest du die Daten aus dem Stack lesen. Wenn du das nicht möchtest kannst du die Funktion auch hooken.

Code:
typedef int ( *_send )( SOCKET s, const char* buf, int len, int flags );
_send __send;

BOOL IsOpen = TRUE;

int hsend( SOCKET s, const char* buf, int len, int flags )
{
// Hier kannst du dir dein buf ausgeben lassen.
	return __send( s, buf, len, flags );
}

void ReadPackets( HMODULE dll )
{


	DWORD address = ( DWORD )GetProcAddress( GetModuleHandleA( "WS2_32.dll" ), "send" );
	__send = ( _send )CreateD3DDetour( ( void* )address, hsend, 5 );
}
Ich hoffe ich konnte dir helfen, wie du die Packets auch ohne zu sniffen auslesen kannst.
MfG

Edit: Mit der Verschlüsslung kannst du ja auch nachschauen und eine Gegenentschlüsselung einsetzen du die Packets schreiben willst.
"Packets von einem Server gesnifft" Wird er wohl eher recv mit meinen, aber der aufbau ist ja relativ gleich ;)

Gegenentschlüsselung, epic. Schonmal was von verschlüsselung gehört? :p
04/01/2011 14:39 yihaaa#8
Er sollte in Olly schauen wo sie verschlüsselt werden.
MfG

Edit: Ja, hatte mich vertippt :P So langsam finde ich das Wort schon sehr geil :D
04/01/2011 21:04 ufoman444#9
also mit olly die .exe scannen und dann schauen wo sie verschlüsselt werden und dann gegebenfalls auf die verschlüsselung kommen?

ich habs mit wpe gemacht :o
04/01/2011 22:24 MoepMeep#10
wpe zeigt dir die Packets an, olly ist ein debugger ;)
04/03/2011 16:07 Flyff_Service#11
Es gibt zwei einfache Methoden:
Methode 1:
Da eigentlich jedes Online Game eine Chat Funktion besitzt, tippst du z.B "asd" ein sendest es aber noch nicht ab. Nun öffnest du Cheat Engine und scannst nach "asd", wenn was gefunden wurde fügst du die Adresse unten hinzu und drückst Rechtsklick und klickst "Find out what access this address". Jetzt drückst du Enter und siehst wo überall das "asd" benutzt wird. So kommst du eig ganz einfach zu der Funktion die Packete baut.

Methode 2:
Du öffnest Ollydbg und suchst nach Intermodul Calls (oder so ähnlich) welche WSASend, send bzw. sendto beinhalten. Um zu der Funktion zurückzuspringen welche die momentane aufgerufen hat, kannst du ganz einfach einen Breakpoint auf die Funktion RET/RETN setzen (meist am Ende der Funktion). Irgendwann kommst du dann zu der Verschlüsselungsroutine und kannst entweder die debuggen oder selber benutzen. Um sie selber benutzen zu können, musst du wissen was für Parameter sie annimmt und dann kannst du die ganz einfach in C++ benutzen. Da die meisten Funktionen eher zu einer Klasse gehören, musst du ausschau nach dem ECX Register halten und dafür dann einen Pointer suchen.

PHP Code:
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
    
voidfunc_Encrypt = (void*)0x000000;
    
charbuf = new char[100];
    
int buf_size;
    ...

    
__asm
    
{
        
PUSH buf_size
        PUSH buf
        CALL func_Encrypt
    
}