Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 10:10

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



recv hook problem

Discussion on recv hook problem within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Oct 2007
Posts: 856
Received Thanks: 35
recv hook problem

hey, also ich habe ein kleines problem, oder doch eher großes problem
arbeite gerade zum ersten mal mit hooks und so und hab versucht recv zu hooken,
also ich habe in einem spiel die recv funktion gehookt( glaube zumindest das ich das hab)

z.b wenn ich mich einlogge sehe ich auch meine id/pw name etc.. andere namen die erscheinen kommen auch vor , aber am meisten ist da son müll drin

sobald ich auf log in drücke kommen extreeeeem viele recv an ( ka ob soviel normal ist xD und dann nach mehreren sekunden stoppts einfach und nix kommt mehr...

hier meine funktionen die ich benutze

BOOL WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID)
{
if (reason == DLL_PROCESS_ATTACH)
{
Console();
RecvAddr = (DWORD)GetProcAddress(GetModuleHandleA("ws2_32.dll "), "recv");
cout << hex << RecvAddr; // nur zum checken ob die richtige adresse kam
oDraw2D = (tDraw2D)DetourFunction((BYTE*)RecvAddr, (BYTE*)&Draw2D, 5);

}
return 1;
}

// ka ob man das was jetzt kommt so machen kann wie ich das jetzt gemacht habe xD

typedef int(__stdcall *tDraw2D)(SOCKET Socket, char *Buffer, int Length, int Flags);
tDraw2D oDraw2D = NULL;

void Draw2D(SOCKET Socket, char *Buffer, int Length, int Flags)
{
__asm PUSHAD;


for (int i = 0; i < Length; i++)
{
cout << Buffer[i];
printf(" ");
}
printf("\n");


__asm POPAD;
oDraw2D(Socket,Buffer,Length, Flags );
}

//und hier die detour function die ich aus einem tutorial ausm internet habe

void *DetourFunction(BYTE *orig, BYTE *hook, int len)
{
DWORD dwProt = 0;
BYTE *jmp = (BYTE*)malloc(len + 5);
VirtualProtect(orig, len, PAGE_READWRITE, &dwProt);
memcpy(jmp, orig, len);
jmp += len; // increment to the end of the copied bytes
jmp[0] = 0xE9;
*(DWORD*)(jmp + 1) = (DWORD)(orig + len - jmp) - 5;
memset(orig, 0x90, len);
orig[0] = 0xE9;
*(DWORD*)(orig + 1) = (DWORD)(hook - orig) - 5;
VirtualProtect(orig, len, dwProt, 0);
return (jmp - len);
}

ich bitte um hilfe ^^
Slade100 is offline  
Old 04/10/2015, 20:36   #2
 
elite*gold: 0
Join Date: Dec 2014
Posts: 442
Received Thanks: 211
Quote:
Originally Posted by erfan100 View Post
hey, also ich habe ein kleines problem, oder doch eher großes problem
arbeite gerade zum ersten mal mit hooks und so und hab versucht recv zu hooken,
also ich habe in einem spiel die recv funktion gehookt( glaube zumindest das ich das hab)

z.b wenn ich mich einlogge sehe ich auch meine id/pw name etc.. andere namen die erscheinen kommen auch vor , aber am meisten ist da son müll drin

sobald ich auf log in drücke kommen extreeeeem viele recv an ( ka ob soviel normal ist xD und dann nach mehreren sekunden stoppts einfach und nix kommt mehr...

hier meine funktionen die ich benutze

BOOL WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID)
{
if (reason == DLL_PROCESS_ATTACH)
{
Console();
RecvAddr = (DWORD)GetProcAddress(GetModuleHandleA("ws2_32.dll "), "recv");
cout << hex << RecvAddr; // nur zum checken ob die richtige adresse kam
oDraw2D = (tDraw2D)DetourFunction((BYTE*)RecvAddr, (BYTE*)&Draw2D, 5);

}
return 1;
}

// ka ob man das was jetzt kommt so machen kann wie ich das jetzt gemacht habe xD

typedef int(__stdcall *tDraw2D)(SOCKET Socket, char *Buffer, int Length, int Flags);
tDraw2D oDraw2D = NULL;

void Draw2D(SOCKET Socket, char *Buffer, int Length, int Flags)
{
__asm PUSHAD;


for (int i = 0; i < Length; i++)
{
cout << Buffer[i];
printf(" ");
}
printf("\n");


__asm POPAD;
oDraw2D(Socket,Buffer,Length, Flags );
}

//und hier die detour function die ich aus einem tutorial ausm internet habe

void *DetourFunction(BYTE *orig, BYTE *hook, int len)
{
DWORD dwProt = 0;
BYTE *jmp = (BYTE*)malloc(len + 5);
VirtualProtect(orig, len, PAGE_READWRITE, &dwProt);
memcpy(jmp, orig, len);
jmp += len; // increment to the end of the copied bytes
jmp[0] = 0xE9;
*(DWORD*)(jmp + 1) = (DWORD)(orig + len - jmp) - 5;
memset(orig, 0x90, len);
orig[0] = 0xE9;
*(DWORD*)(orig + 1) = (DWORD)(hook - orig) - 5;
VirtualProtect(orig, len, dwProt, 0);
return (jmp - len);
}

ich bitte um hilfe ^^
1. Also erstmal vermeide bitte diese "Hook Funktionen" aus dem Internet, die sind totaler müll, nimm doch die Microsoft Detours oder die schönen .
2. Am besten die Funktion "Draw2D" mit der __declspec(naked) calling convention umschreiben.
3. Ich denke, dass diese "kryptischen" Zeichen nur kommen, da die Packets vermutlich noch enrypted werden (Vermutung).
_asm is offline  
Thanks
1 User
Old 04/10/2015, 20:52   #3
 
elite*gold: 0
Join Date: Oct 2007
Posts: 856
Received Thanks: 35
Quote:
Originally Posted by _asm View Post
1. Also erstmal vermeide bitte diese "Hook Funktionen" aus dem Internet, die sind totaler müll, nimm doch die Microsoft Detours oder die schönen .
2. Am besten die Funktion "Draw2D" mit der __declspec(naked) calling convention umschreiben.
3. Ich denke, dass diese "kryptischen" Zeichen nur kommen, da die Packets vermutlich noch enrypted werden (Vermutung).
danke für die hilfe, zu
1. erst wollte ich detours.h verwenden aber ich bin noch ein ziemlicher anfänger in visual studio und daher konnte ich das nicht includen :/ das einfache #include hat nicht gereicht.. ( habe die header datei zu den headerdateien eingefügt) kann es seind as ich die auch noch iwo anders includen muss?
2. habe das jetzt zu
__declspec(naked) void Draw2D(SOCKET Socket, char *Buffer, int Length, int Flags)
{
__asm PUSHAD;


for (int i = 0; i < Length; i++)
{
cout << Buffer[i];
printf(" ");
}
printf("\n");


__asm POPAD;
oDraw2D(Socket,Buffer,Length, Flags );
}
umgeschrieben, ist das falsch? weil das game crashed

3. stimmt kann ich mir gut vorstellen, aber welche möglichkeiten habe die encrypteten zu kriegen? das problem ist das gamehackshield lässt mich nicht mit ollydbg drauf zugreifen
Slade100 is offline  
Old 04/10/2015, 21:08   #4
 
elite*gold: 0
Join Date: Dec 2014
Posts: 442
Received Thanks: 211
Quote:
Originally Posted by erfan100 View Post
danke für die hilfe, zu
1. erst wollte ich detours.h verwenden aber ich bin noch ein ziemlicher anfänger in visual studio und daher konnte ich das nicht includen :/ das einfache #include hat nicht gereicht.. ( habe die header datei zu den headerdateien eingefügt) kann es seind as ich die auch noch iwo anders includen muss?
2. habe das jetzt zu
__declspec(naked) void Draw2D(SOCKET Socket, char *Buffer, int Length, int Flags)
{
__asm PUSHAD;


for (int i = 0; i < Length; i++)
{
cout << Buffer[i];
printf(" ");
}
printf("\n");


__asm POPAD;
oDraw2D(Socket,Buffer,Length, Flags );
}
umgeschrieben, ist das falsch? weil das game crashed

3. stimmt kann ich mir gut vorstellen, aber welche möglichkeiten habe die encrypteten zu kriegen? das problem ist das gamehackshield lässt mich nicht mit ollydbg drauf zugreifen
Du musst noch die detours lib linken und in deinem Projekt einbinden, also:
Code:
#pragma comment(lib, "detours.lib")
Welches Spiel ist es denn?... vielleicht kenne ich es und kann dir dabei mehr helfen, sonst kannst du die "Interne" Recv Funktion im Spiel suchen und die Assembler Funktion hooken.
Da wird dann dein Buffer in irgendeinem Register stehen, welches du dann nur noch returnen musst .
Aber du sagtest doch, dass das ein Hackshield besitzt, also wird auch dein JMP Detour erkannt?

Sonst schau mal im letzten Post hier: rein.
_asm is offline  
Thanks
1 User
Old 04/10/2015, 21:23   #5
 
elite*gold: 0
Join Date: Oct 2007
Posts: 856
Received Thanks: 35
Quote:
Originally Posted by _asm View Post
Du musst noch die detours lib linken und in deinem Projekt einbinden, also:
Code:
#pragma comment(lib, "detours.lib")
Welches Spiel ist es denn?... vielleicht kenne ich es und kann dir dabei mehr helfen, sonst kannst du die "Interne" Recv Funktion im Spiel suchen und die Assembler Funktion hooken.
Da wird dann dein Buffer in irgendeinem Register stehen, welches du dann nur noch returnen musst .
Aber du sagtest doch, dass das ein Hackshield besitzt, also wird auch dein JMP Detour erkannt?

Sonst schau mal im letzten Post hier: rein.
also ein hackshield hats aufjedenfall und obs erkannt wird weiß ich nicht aber das würde vielleicht der grund sein wieso nach 30-60 sec keine recv mehr in der konsole rein kommen
das mit dem pragma comment hab ich gemacht, hat nicht funktioniert, trotzdem findet der die detours.h nicht obwhohl die da ist-.- oder muss ich die detours.lib im linker oder so auch noch hinzufügen?

kannst du mir noch sagen ob das hier so richtig ist? weil das game crasht wenn ich das so injecte
__declspec(naked) void Draw2D(SOCKET Socket, char *Buffer, int Length, int Flags){
.....
}

werde mit den link mal ansehen
edit: habe mir den link angeguckt, meinst du also ich soll am ende einfach extern "C" __declspec(naked) void Draw2D(); schreiben?
Slade100 is offline  
Old 04/10/2015, 23:22   #6
 
elite*gold: 0
Join Date: Dec 2014
Posts: 442
Received Thanks: 211
Du nimmst dir einfach die Klasse, die er dort bereitgestellt hat und compilst die DLL o.O?
Wenn's immer noch nicht klappt dann versuch deine Hook-Func so zu gestalten:

Code:
INT WINAPI OurRecv(SOCKET sock, CHAR* buf, INT len, INT flags)
{
	std::cout << "Received: ";
	for (int i = 0; i< strlen(buf);i++)
		std::cout <<  std::hex << static_cast<WORD>(buf[i]) << ' ';
	std::cout << std::endl;
	return RealRecv(sock, buf, len, flags);
}
_asm is offline  
Thanks
1 User
Old 04/11/2015, 00:11   #7
 
elite*gold: 0
Join Date: Oct 2007
Posts: 856
Received Thanks: 35
erstmal danke die sehr für deine hilfe, habe das ganze jetzt umeschrieben und meine hook func in die form gebracht wie du gesagt hast und benutze die detours 1.5 diesmal sieht das ganze schonmal viel besser aus^^
unzwar so

Received: 24 5f 2f 32
Received: a
Received: a
Received: a
Received: 22 3e 9 32
Received: a
Received: a
Received: a
Received: 22 ffa7 ffff 2e
Received: f
Received: f
Received: f
Received: ff94 ff9e 49 9
Received: f
Received: ff94 72 ffe5 2f
Received: f
Received: ff94 2c ffeb 31
Received: f
Received: ff94 ff85 f 32
Received: f
Received: ff94 ffae 1b 32
Received: f
Received: ff94 64 2d 32
Received: f
Received: ff94 2b 2f 32
Received: f
Received: ff94 5f 2f 32
Received: a
Received: a
Received: a
Received: a
Received: a
Received: a
Received: a
Received: a
Received: a
Received: a
Received: a
Received: a
Received: a
Received: a
Received: a
Received: a
Received: a
Received: 23 3e 9 32
Received: a
Received: 22 6 10 30
Received: a
Received: a
Received: a
Received: a
Received: a
Received: 23 6 10 30
Received: f
Received: f
Received: f
Received: ff94 ff89 74
Received: f
Received: ffff fff4
Received: f
Received: ff94 31 ff9a 19
Received: f
Received: ffff fff4
Received: f
Received: ff94 5 ff82 1c
Received: f
Received: ffff fff4
Received: f
Received: ff94 ffa8 ffa6 20
Received: f
Received: ffff fff4
Received: f
Received: ff94 fff3 13 22
Received: f
Received: ffff fff4
ob das jetzt 100 pro richtig ist weiß nicht da ich mich nicht so gut auskenne^^, aber vllt könntest du ja sagen obs richtig aussieht

aber trotzdem hören die recv nach ca 30 sec auf :S weißt du vllt woran das liegt? vielleicht am hackshield?
Slade100 is offline  
Old 04/11/2015, 00:19   #8
 
elite*gold: 0
Join Date: Dec 2014
Posts: 442
Received Thanks: 211
Hmm... Kannst du mal WPE Pro ausprobieren und schauen ob das auch nach ca 30 sek aufhört? Wenn ja -> irgendein "Anti-Hack" Mechanismus
_asm is offline  
Thanks
1 User
Old 04/11/2015, 00:34   #9
 
elite*gold: 0
Join Date: Oct 2007
Posts: 856
Received Thanks: 35
wpe pro hab ich mal ausprobiert das kann nicht nichtmal erst attachen, sobald ich wpe pro start stürzt das game ab :/
Slade100 is offline  
Old 04/11/2015, 00:45   #10
 
elite*gold: 0
Join Date: Dec 2014
Posts: 442
Received Thanks: 211
Also bevor du überhaupt attachst, stürzt es schon ab?
Wenn das so ist, dann wird es anscheind vom Spiel erkannt, pack es mit UPX wenn dies der Fall ist.
_asm is offline  
Old 04/11/2015, 01:06   #11
 
elite*gold: 0
Join Date: Oct 2007
Posts: 856
Received Thanks: 35
Quote:
Originally Posted by _asm View Post
Also bevor du überhaupt attachst, stürzt es schon ab?
Wenn das so ist, dann wird es anscheind vom Spiel erkannt, pack es mit UPX wenn dies der Fall ist.
jo bevor ich attache, ich werde upx mal runterladen, aber ich glaube attachen klappt dann immernoch nciht, genau wie mit ollydbg wenn ich attachen will kommt immer error_access_denied, oder wenn ich injector start stürzt es entweder ab oder der prozess wird nicht angezeigt... auch mit uce kann ich eigentlich den prozess nicht auswählen aber wenn ich einstelle das es automatisch beim start vom prozess injected werden soll klappts( und das ist die einzige mögichkeit wie ich auch dlls injecten kann^^)
Slade100 is offline  
Old 04/11/2015, 01:14   #12
 
elite*gold: 0
Join Date: Dec 2014
Posts: 442
Received Thanks: 211
Okay habe die Lösung für das "30 sek Problem", anscheind wird bei Kalonline dein Detour "proofed" also die 5 bytes die gesetzt werden (E9 - JMP)...
Anders ausgedrückt: Hackshield erkennt Hooks von externen Anwendungen auf der Recv-Funktion.
Also dir bleiben viele Möglichkeiten, dass zu bypassen:
1. Hook 5 bytes nach der Recv-Funktion im Client (schau auch mal im debugger nach, was nach 30 sek auf der Adresse wo der Detour ist, passiert!)
2. Setz einen Hardware Breakpoint (bin mir da aber nicht sicher ob die vom Hackshield treiber entfernt werden)
3. Vectored Exception Handler / Structured Exception Handler setzen

Edit: Wegen dein Debugging Problem, hier eine Lösung wie du das "Hacking-Shield" (wortwitz haha bin ich lustig...) umgehst:

Lad dir und herunter.
Schmeiß die DLL's in deinem Olly ordner -> F3 in Olly -> Kalonline Prozess öffnen -> Tada alles API Hooks werden unhooked und du solltest debuggen können
2. Möglichkeit: Mit den VEH-Debugger von CE debuggen.
_asm is offline  
Old 04/11/2015, 01:20   #13




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,537
Du willst kal hooken? Du brauchst kein push und pop -

Nen recv Hook + 5 Bytes wegen Hackshild check
bloodx is offline  
Thanks
1 User
Old 04/11/2015, 01:26   #14
 
elite*gold: 0
Join Date: Dec 2014
Posts: 442
Received Thanks: 211
Quote:
Originally Posted by bloodx View Post
Du willst kal hooken? Du brauchst kein push und pop -

Nen recv Hook + 5 Bytes wegen Hackshild check
Sagte ich ja bereits mit den 5 bytes :s
_asm is offline  
Thanks
1 User
Old 04/11/2015, 01:31   #15
 
elite*gold: 0
Join Date: Oct 2007
Posts: 856
Received Thanks: 35
Quote:
Originally Posted by _asm View Post
Okay habe die Lösung für das "30 sek Problem", anscheind wird bei Kalonline dein Detour "proofed" also die 5 bytes die gesetzt werden (E9 - JMP)...
Anders ausgedrückt: Hackshield erkennt Hooks von externen Anwendungen auf der Recv-Funktion.
Also dir bleiben viele Möglichkeiten, dass zu bypassen:
1. Hook 5 bytes nach der Recv-Funktion im Client (schau auch mal im debugger nach, was nach 30 sek auf der Adresse wo der Detour ist, passiert!)
2. Setz einen Hardware Breakpoint (bin mir da aber nicht sicher ob die vom Hackshield treiber entfernt werden)
3. Vectored Exception Handler / Structured Exception Handler setzen

Edit: Wegen dein Debugging Problem, hier eine Lösung wie du das "Hacking-Shield" (wortwitz haha bin ich lustig...) umgehst:

Lad dir und herunter.
Schmeiß die DLL's in deinem Olly ordner -> F3 in Olly -> Kalonline Prozess öffnen -> Tada alles API Hooks werden unhooked und du solltest debuggen können
2. Möglichkeit: Mit den VEH-Debugger von CE debuggen.
jo habe im debuger von der ce gesehn das mein jmp auf der adresse nicht mehr da ist nach ca 30 sec^^

Quote:
Originally Posted by bloodx View Post
Du willst kal hooken? Du brauchst kein push und pop -

Nen recv Hook + 5 Bytes wegen Hackshild check
danke aber habe das mit push und pop nicht mehr

das ganze sieht jetzt so aus


int MyPacketRecv(SOCKET Socket, char *Buffer, int Length, int Flags);

int(__stdcall *PacketRecv)(SOCKET Socket, char *Buffer, int Length, int Flags);

int MyPacketRecv(SOCKET Socket, char *Buffer, int Length, int Flags) {
std::cout << "Received: ";
for (int i = 0; i< strlen(Buffer); i++)
std::cout << std::hex << static_cast<WORD>(Buffer[i]) << ' ';
std::cout << std::endl;
return PacketRecv(Socket, Buffer, Length, Flags);
}


BOOL WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID)
{
if (reason == DLL_PROCESS_ATTACH)
{
Console();
Color(15);
RecvAddr = (DWORD)GetProcAddress(GetModuleHandleA("ws2_32.dll "), "recv");
std::cout << std::hex << RecvAddr << std::endl;
PacketRecv = (int(__stdcall *)(SOCKET, char *, int, int))DetourFunction((PBYTE)RecvAddr, (PBYTE)MyPacketRecv);
}
return 1;
}

5 bytes weiter währen doch

PacketRecv = (int(__stdcall *)(SOCKET, char *, int, int))DetourFunction((PBYTE)(RecvAddr+5), (PBYTE)MyPacketRecv);

oder nicht?
aber wenn ich das mache gibts nen crash :S
Slade100 is offline  
Reply


Similar Threads Similar Threads
[Selling] Nostale Send/Recv Hook
11/01/2014 - Nostale Trading - 1 Replies
I sell a basic project for those who want to start programming hack for nostale (traffic injector). The project is made with Visual Studio 2013 but compatible with the 2012 version. Price: - 5€ PayPal - 10€ PaySafeCard Functions: - SendPacket - RecvPacket
c++ recv hook
07/22/2013 - C/C++ - 9 Replies
Hey, ich hab mir einen recv, send hook gebastelt. Die Send funktion funktioniert einwandfrei aber die recv funktion leitet die packete nachdem loggen nicht mehr weiter. Wenn ich die logging funktion bei der recv funktion austelle geht es einwandfrei. int WINAPI XRecv(SOCKET Socket, char *Buffer, int Length, int Flags) { char *Buf = Buffer; int leng = Recv(Socket, Buf, Length, Flags); if (leng > 0)
[request] alissafix with recv hook
06/27/2013 - Mabinogi - 62 Replies
can anyone fix the recv hook problem for alissa? thanks in advance
[Question] Recv hook
01/10/2013 - Kal Online - 3 Replies
I'm having a bit weird problem with that. I've managed to hook recv function directly in winsock dll and i can sniff the data being exchanged between client and server. I guess that they are encrypted because i didn't hook recv in engine exactly but in dll. In main thread: RealRecv = (RecvPtr)GetProcAddress(GetModuleHandle(L"ws2 _32.dll"), "recv"); RealRecv = (RecvPtr)Detour((BYTE*)RealRecv, (BYTE*)&OurRecv, 5); OurRecv func: INT WINAPI OurRecv(SOCKET sock, CHAR* buf, INT len, INT...
[C++]Hook all Recv function Problem
08/21/2010 - C/C++ - 5 Replies
Hi Leute wenn ich send hooke egal welches läuft das alles super nur wenn ich irgendein recv hooke habe ich immer eine Packet size von 1000 bis 10000. sry das ich schon wieder nerve #include "WinSock2.h" #include <cstdio> #include <ctime> #include <fstream> #include <iomanip>



All times are GMT +2. The time now is 10:10.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.