|
You last visited: Today at 19:52
Advertisement
Winsock send Hook crasht Programm?
Discussion on Winsock send Hook crasht Programm? within the C/C++ forum part of the Coders Den category.
06/21/2013, 08:41
|
#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
|
|
|
06/21/2013, 09:44
|
#2
|
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.
|
|
|
06/21/2013, 13:20
|
#3
|
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
|
Quote:
Originally Posted by Dr. Coxxy
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
|
|
|
06/21/2013, 13:44
|
#4
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
Quote:
Originally Posted by Master674b
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.
|
|
|
06/21/2013, 16:22
|
#5
|
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
|
|
|
06/21/2013, 17:38
|
#6
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
Quote:
Originally Posted by Padmak
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
|
|
|
06/21/2013, 17:43
|
#7
|
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 593
|
Quote:
Originally Posted by Master674b
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
|
|
|
06/21/2013, 17:49
|
#8
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
Quote:
Originally Posted by Cambios
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).
|
|
|
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
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
|
|
|
06/21/2013, 20:04
|
#10
|
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
|
Quote:
Originally Posted by Cambios
The memory could not be "executed".
|
Hier stands übrigens schon :P
Padmak
|
|
|
06/21/2013, 20:51
|
#11
|
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 593
|
Quote:
Originally Posted by Padmak
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..
|
|
|
06/29/2013, 10:26
|
#12
|
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,287
|
der Code kommt mir bekannt vor
|
|
|
06/30/2013, 03:33
|
#13
|
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 593
|
Quote:
Originally Posted by buFFy!
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
|
|
|
06/30/2013, 10:45
|
#14
|
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
|
Quote:
Originally Posted by Cambios
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.
|
|
|
06/30/2013, 19:49
|
#15
|
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 593
|
Quote:
Originally Posted by Master674b
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
|
|
|
 |
|
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.
|
|