Register for your free account! | Forgot your password?

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

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

Advertisement



Winsock send Hook crasht Programm?

Discussion on Winsock send Hook crasht Programm? within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 593
Winsock send Hook crasht Programm?

Hey,
Habe vorhin ein Hook zusammengeschraubt womit ich mir bisschen die Pakete von Netzwerk Programmen anschauen wollte. In Counterstrike funktioniert das ganze ohne große Probleme, bei Firefox oder WoW schmiert es aber mit ner Acces Violation ab.. hab ich da irgendwas übersehen im Code?
Versuch schon seit gut ner Stunde rum, bekomms aber nicht gebacken.. mittlerweile schaut der Code auch schon bissel wüsst aus vom rumprobieren..

Code:
#include <windows.h>
#include <iostream>
using namespace std;
#pragma comment(lib, "ws2_32.lib")
void WINAPI my_thread();
void log(char* msg);
void* detourFunc(BYTE *src, const BYTE *dst, const int len);
int WINAPI  hkSend(SOCKET sock, const char* buffer, int len,int flags);

//WSA Funktion "send"
typedef int (__stdcall * send_t)(SOCKET sock, const char* buffer, int len,int flags);
send_t pSend;

BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
{
 switch (reason)
 {
  case DLL_PROCESS_ATTACH:
  CreateThread(0, 0, (LPTHREAD_START_ROUTINE)my_thread, 0, 0, 0);
  break;

  case DLL_PROCESS_DETACH:
  break;
 }

return TRUE;
}

void GetConsole(LPCSTR sTitle) {
	FILE *fh;
	AllocConsole();
	freopen_s(&fh, "CONOUT$", "wb", stdout);
	SetConsoleTitleA(sTitle);
}

 void WINAPI my_thread()
{
 GetConsole("Sendlog");
 DWORD dwSend = (DWORD)GetProcAddress(GetModuleHandleA("ws2_32.dll"), "send");
 pSend = (send_t)detourFunc((byte*)dwSend, (byte*)hkSend, 5);
}

int WINAPI hkSend(SOCKET sock, const char* buffer, int len,int flags)
{
	printf("buffer: %p\n", buffer);
	printf("length: %i\n", len);
	printf("flags: %i\n", flags);
	printf("---------------------\n");	
	return pSend(sock, buffer, len, flags);
}

void log(char* msg)
{
 FILE* fp = fopen("log.txt","a");
 fputs(msg, fp);
 fclose(fp);     
}

void* detourFunc(BYTE *src, const BYTE *dst, const int len) //gamedeception hook funktion..
{
	BYTE *jmp = (BYTE*)malloc(len+5);
	DWORD dwback;
	VirtualProtect(src, len, PAGE_READWRITE, &dwback);
	memcpy(jmp, src, len);   jmp += len;
	jmp[0] = 0xE9;
	*(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;
	src[0] = 0xE9;
	*(DWORD*)(src+1) = (DWORD)(dst - src) - 5;
	VirtualProtect(src, len, dwback, &dwback);
	return (jmp-len);
}
Hab ich da ne Deklation falsch gesetzt oder sonstige Noob fehler die man normal sehen sollte?
Bin verwirrt :s..

Die Log vom Wow Ordner sagt mir leider auch nicht all zu viel..

Code:
Program:	Wow.exe
ProcessID:	1132
Exception:	0xC0000005 (ACCESS_VIOLATION) at 0023:104E2F78

The instruction at "0x104E2F78" referenced memory at "0x104E2F78".
The memory could not be "executed".
Grüße
Cambios is offline  
Old 06/21/2013, 09:44   #2
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
musst in der detour funktion dem allokierten buffer mit virtualprotect execute rechte geben, ansonsten kriegste obige access violation wenn der prozess mit DEP läuft und versucht dein trampolin auszuführen.
Dr. Coxxy is offline  
Old 06/21/2013, 13:20   #3
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by Dr. Coxxy View Post
musst in der detour funktion dem allokierten buffer mit virtualprotect execute rechte geben, ansonsten kriegste obige access violation wenn der prozess mit DEP läuft und versucht dein trampolin auszuführen.


Mit VirtualProtect, oh Gott... Du weißt hoffentlich, das VirtualProtect immer eine ganze memory PAGE ändert.
Wie wärs mal mit nem heap der HEAP_CREATE_ENABLE_EXECUTE gesetzt hat?

Was soll überhaupt diese Rotz Detourfunktion. Weißt du überhaupt was passiert, wenn ein anderer Thread gerade in dem Moment in dem du versuchst einen Detour zu schreiben diese 5+ bytes ausführt?

Threadsicherheit = NULL
Master674b is offline  
Old 06/21/2013, 13:44   #4
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Quote:
Originally Posted by Master674b View Post


Mit VirtualProtect, oh Gott... Du weißt hoffentlich, das VirtualProtect immer eine ganze memory PAGE ändert.
Wie wärs mal mit nem heap der HEAP_CREATE_ENABLE_EXECUTE gesetzt hat?

Was soll überhaupt diese Rotz Detourfunktion. Weißt du überhaupt was passiert, wenn ein anderer Thread gerade in dem Moment in dem du versuchst einen Detour zu schreiben diese 5+ bytes ausführt?

Threadsicherheit = NULL
weißte wie wenig das bei einem 0815 hack interessiert, dass es in 0.0000000000000001% der fälle mal nicht so optimal laufen kann?
wenn man direkt alle rechte setzt kann eh ziemlich wenig schiefgehen @ page.
Dr. Coxxy is offline  
Old 06/21/2013, 16:22   #5
 
Padmak's Avatar
 
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
Was ist aber, wenn dieser "0.0000000000000001% der fälle" mal eintritt, das kriegst du niemals richtig debuggt und gefixed.
Ausreden wie "das ist doch hier nicht wichtig" oder "wen interessiert das, das ist nur für mich" sind immer Schwachsinn, man sollte IMMER richtigen Code schreiben und nicht nur wenn's wichtig ist.

Padmak
Padmak is offline  
Thanks
1 User
Old 06/21/2013, 17:38   #6
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Quote:
Originally Posted by Padmak View Post
Was ist aber, wenn dieser "0.0000000000000001% der fälle" mal eintritt, das kriegst du niemals richtig debuggt und gefixed.
Ausreden wie "das ist doch hier nicht wichtig" oder "wen interessiert das, das ist nur für mich" sind immer Schwachsinn, man sollte IMMER richtigen Code schreiben und nicht nur wenn's wichtig ist.

Padmak
warum nicht gleich alle werte die du jemals benutzt doppelt abspeichern, am besten noch mit nem server synchronisieren, kann ja sein, dass kosmische strahlung mal nen bit im ram dreht, oder die NSA deine daten manipuliert!!!111einself11
Dr. Coxxy is offline  
Old 06/21/2013, 17:43   #7
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 593
Quote:
Originally Posted by Master674b View Post


Was soll überhaupt diese Rotz Detourfunktion. Weißt du überhaupt was passiert, wenn ein anderer Thread gerade in dem Moment in dem du versuchst einen Detour zu schreiben diese 5+ bytes ausführt?

Threadsicherheit = NULL
Das ist die ganz normale Gamedeception Detour Funktion die du eigendlich überall findest, wenn mal nicht die Ms Detour benutzt wird..
Was erwartest du bitte von mir?..
Es geht mir hier nur darum die Netzwerkpakete die mit Winsock send rausgeschickt werden abzufangen und mir anzuzeigen, nicht darum nen ultra Programm zu machen das 100% sicher ist und sauber läuft bei anderen.

@Topic
Habe jetzt versucht die Execute Rechte (PAGE_EXECUTE_READWRITE) zu setzen, aber komischerweise schmiert das ganze immer noch ab, werde mir das ganze irgendwie später nochmal anschaun müssen.. hm
Cambios is offline  
Old 06/21/2013, 17:49   #8
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Quote:
Originally Posted by Cambios View Post
Das ist die ganz normale Gamedeception Detour Funktion die du eigendlich überall findest, wenn mal nicht die Ms Detour benutzt wird..
Was erwartest du bitte von mir?..
Es geht mir hier nur darum die Netzwerkpakete die mit Winsock send rausgeschickt werden abzufangen und mir anzuzeigen, nicht darum nen ultra Programm zu machen das 100% sicher ist und sauber läuft bei anderen.

@Topic
Habe jetzt versucht die Execute Rechte (PAGE_EXECUTE_READWRITE) zu setzen, aber komischerweise schmiert das ganze immer noch ab, werde mir das ganze irgendwie später nochmal anschaun müssen.. hm
was fürn windoof, zeig mal, was du genau machst und guck mal mitm taskmanager nach ob der prozess data execution prevention aktiviert hat (musste evtl noch die spalte im taskmanager aktivieren).
Dr. Coxxy is offline  
Old 06/21/2013, 18:03   #9
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 593
Quote:
Originally Posted by Dr. Coxxy View Post
was fürn windoof, zeig mal, was du genau machst und guck mal mitm taskmanager nach ob der prozess data execution prevention aktiviert hat (musste evtl noch die spalte im taskmanager aktivieren).
Also beim Wow.exe Prozzes is die DEP Aktiviert laut Taskmanager..
Habe das ganze jetzt nochmal bisschen anders gemacht (hatte vorhin nochmal ne eigene detour funktion versucht die ich damals mal schrieb, aber die ist schrott.. ) - jetzt Crasht das ganze nicht mehr.. nur werden jetzt in der Console keine Pakete mehr angezeigt.
Bei Wow.exe könnte es vllt daran liegen das es per WSAsend schickt aber bei Counterstrike hats gestern ja geklappt, aber dort wirds auch nicht mehr angezeigt.. ein teufels kreis

Momentanige Detour Funktion ->
Code:
void* detourFunc(BYTE *src, const BYTE *dst, const int len) //gamedeception. i rather use windows detours, but however :P
{
	BYTE *jmp = (BYTE*)malloc(len+5);
	DWORD dwback;
	VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &dwback);
	memcpy(jmp, src, len);   jmp += len;
	jmp[0] = 0xE9;
	*(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;
	src[0] = 0xE9;
	*(DWORD*)(src+1) = (DWORD)(dst - src) - 5;
	VirtualProtect(src, len, dwback, &dwback);
	VirtualProtect(jmp-len,len+5,PAGE_EXECUTE_READWRITE,&dwback);
	return (jmp-len);
}
Momentaniger Thread + send Funktion ->
Code:
 void WINAPI my_thread()
{
 GetConsole("Sendlog");
 DWORD dwSend = (DWORD)GetProcAddress(GetModuleHandleA("ws2_32.dll"), "send");
 pSend = (send_t)detourFunc((byte*)dwSend, (byte*)hkSend, 5);

}

int WINAPI hkSend(SOCKET sock, const char* buffer, int len,int flags)
{

	printf("buffer: %p\n", buffer);
	printf("length: %i\n", len);
	printf("flags: %i\n", flags);
	printf("---------------------\n");	

	return pSend(sock, buffer, len, flags);
}
Eigendlich sollte es ja die Anzeige anzeigen, tuts aber leider nicht..hm..
Jetzt erstmal was futtern.. später nochmal drüber schaun^^

p.s: Hab grade bei Filezilla getestet, da funktionierts - in Wow jetzt auch^^ Danke für eure Hilfe
Hätte ich eigendlich selbst drauf kommen können wegen den EXECUTE Rechten.. grml Peinlich^^

Grüße
Cambios is offline  
Old 06/21/2013, 20:04   #10
 
Padmak's Avatar
 
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
Quote:
Originally Posted by Cambios View Post
The memory could not be "executed".
Hier stands übrigens schon :P

Padmak
Padmak is offline  
Old 06/21/2013, 20:51   #11
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 593
Quote:
Originally Posted by Padmak View Post
Hier stands übrigens schon :P

Padmak
sowas kann ja auch mal andere ursachen haben..
Hatte das z.b damals auch bei Detours wo es andere Fehler gab wo es dann zur selben Meldung kam, es aber an völlig anderen Dingen lag.. von daher war das dann etwas verwirrend für mich.. hätte aber eigendlich selbst drauf kommen sollen..
Cambios is offline  
Old 06/29/2013, 10:26   #12


 
buFFy!'s Avatar
 
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,287
der Code kommt mir bekannt vor

buFFy! is offline  
Thanks
1 User
Old 06/30/2013, 03:33   #13
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 593
Quote:
Originally Posted by buFFy! View Post
der Code kommt mir bekannt vor

Ausschnitte davon sind teilweise von dort übernommen ja
Aber ich benutze das Progg (btw die Dll) ja nur für mich und release es nicht (mittlerweile hab ich ne eigene Version geschrieben) , weil ich von WoW die gesendeten Pakete abfangen wollte und dann bisschen Pakete reversen - da kam mir die kleine Vorlage recht zum bisschen rumprobieren mit den Paketen. Hatte lange nicht mehr mit Hooks gearbeitet, nur damals bei Counterstrike noch mit Opengl Hooks.. und da brauchte ich bisschen Einstieg wieder - und dafür sind Tutorials ja da
Cambios is offline  
Old 06/30/2013, 10:45   #14
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by Cambios View Post
Ausschnitte davon sind teilweise von dort übernommen ja
Aber ich benutze das Progg (btw die Dll) ja nur für mich und release es nicht (mittlerweile hab ich ne eigene Version geschrieben) , weil ich von WoW die gesendeten Pakete abfangen wollte und dann bisschen Pakete reversen - da kam mir die kleine Vorlage recht zum bisschen rumprobieren mit den Paketen. Hatte lange nicht mehr mit Hooks gearbeitet, nur damals bei Counterstrike noch mit Opengl Hooks.. und da brauchte ich bisschen Einstieg wieder - und dafür sind Tutorials ja da
Tu dir einfach selbst den gefallen und nimm MS Detours 2.x+
Außer für kommerzielle Projekte, da darfst du das nicht benutzen.
Master674b is offline  
Old 06/30/2013, 19:49   #15
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 593
Quote:
Originally Posted by Master674b View Post
Tu dir einfach selbst den gefallen und nimm MS Detours 2.x+
Außer für kommerzielle Projekte, da darfst du das nicht benutzen.
Ich mag Ms Detours nicht, ich komme mit der Gamedeception Methode besser klar und es kommt ohne externe Libs etc aus. Von daher, Nope
Cambios is offline  
Reply


Similar Threads Similar Threads
Winsock send Hook Problem
08/08/2011 - General Coding - 20 Replies
Huhu, Ich würde gerne die send(...) Mehtode hooken, um das Socket abfangen zu können, damit ich danach eigene Pakete verschicken kann. Das Problem besteht darin, dass sobald ich die dll injecte(z.b in firefox) und ein paket versende, einmal die MessageBox erscheint, das send() aufgerufen wurde und danach das Programm abstürtzt. Zum hooken benutze ich microsoft detours 1.5 und arbeite unter win 7 64bit. Die dll compile ich als 32bit und injecte sie auch in einen 32bit prozess. Würde mich...
How to send a packet taken from WPE PRO with Winsock control vb2010
06/03/2011 - .NET Languages - 53 Replies
Hi all , here's my code Public Class Form1 Private Sub AxWinsock1_ConnectEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Winsock1.ConnectEvent Me.Text = "Connected to bot" MsgBox("Connection Successful") End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Winsock1.RemoteHost = "localhost"
[C++] winsock ws_32.dll hook
06/05/2009 - C/C++ - 5 Replies
i am trying to make a hack for a online game. but i don't know how to hook my program to the process name : khanclient.exe can someone help me? this is my current code in VB2008 the point in this is i want to click a button and send a packet to server from client. i hope you get what i mean. here is a screenshot:



All times are GMT +1. The time now is 19:54.


Powered by vBulletin®
Copyright ©2000 - 2025, 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 ©2025 elitepvpers All Rights Reserved.