Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 23:02

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

Advertisement



Winsock send Hook Problem

Discussion on Winsock send Hook Problem within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jun 2011
Posts: 96
Received Thanks: 21
Winsock send Hook Problem

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 freuen wenn jemand einen Fehler in meinem Code entdecken würde, oder mir andersweitig helfen könnte.

Schonmal danke im vorraus


Code:
#include "stdafx.h"
#include "detours.h"
#include <winsock2.h>
#include <Ws2tcpip.h>
#include <Windows.h>

#pragma comment( lib, "Ws2_32.lib" )
#pragma comment( lib, "Mswsock.lib" ) 
#pragma comment( lib, "detours.lib" ) 

typedef int ( WINAPI *sendOrigT )( SOCKET s, const char *buf, int len, int flags );
sendOrigT sendOrig = NULL;

typedef int ( WINAPI *WSASendT)( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSend, DWORD dwFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine );
WSASendT WSASendOrig = NULL;

int mySend(SOCKET s, const char *buf, int len, int flags)
{
	MessageBoxA(NULL,"Packet send got called","Detour",MB_OK);
	return sendOrig(s, buf, len, flags);
}


int myWSASend(SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSend, DWORD dwFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
{
	return WSASendOrig(s,lpBuffers,dwBufferCount,lpNumberOfBytesSend,dwFlags,lpOverlapped,lpCompletionRoutine);
}

int Hook()
{
	sendOrig = reinterpret_cast<sendOrigT>(DetourFunction((PBYTE)send, (PBYTE)mySend));
	return 0;
}

void Unhook()
{
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)Hook,NULL,NULL,NULL);
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
	Unhook();
		break;
	}
	return TRUE;
}
kurrbis is offline  
Old 08/03/2011, 19:10   #2


 
buFFy!'s Avatar
 
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,287


nicht grad das best gelungenste tutorial, sollte dir aber weiter helfen.
buFFy! is offline  
Old 08/03/2011, 19:41   #3
 
elite*gold: 0
Join Date: Jun 2011
Posts: 96
Received Thanks: 21
Quote:
Originally Posted by buFFy! View Post


nicht grad das best gelungenste tutorial, sollte dir aber weiter helfen.
Danke für deinen Tipp, aber es hilft mir leider wenig weiter. Wenn du meinen Code und dem aus dem tut vergleichst, kannst du erkennen, dass er sich ziemlich ähnelt. Der einzige unterschied ist, dass ich ms detours nutze und keine eigene hook funktion.
kurrbis is offline  
Old 08/03/2011, 20:01   #4


 
buFFy!'s Avatar
 
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,287
tja dann ^^ ollydbg ist dein freund!
buFFy! is offline  
Old 08/03/2011, 20:52   #5
 
elite*gold: 0
Join Date: Jun 2011
Posts: 96
Received Thanks: 21
Soo habe es einfach noch mal mit der Detour Funktion aus dem Tutorial probiert und es klappt weiterhin nicht^^

Mit OllyDbg kenne ich mich leider nicht gut genug aus um auf dieser Ebene Fehleranalyse zu betreiben...
kurrbis is offline  
Old 08/03/2011, 22:24   #6
 
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
Quote:
Originally Posted by kurrbis View Post
Soo habe es einfach noch mal mit der Detour Funktion aus dem Tutorial probiert und es klappt weiterhin nicht^^

Mit OllyDbg kenne ich mich leider nicht gut genug aus um auf dieser Ebene Fehleranalyse zu betreiben...
Stell olly einfach so ein das er automatisch pausiert wen eine Dll geladen wird, dann injectest du die Dll und setzt sein Breakpoint auf den anfahng deiner mySent funktion. Dann lässte olly weiterlaufen so das er bei den PB breakt und dan kannste deine funktion durch stepen. Weil der fehler wird ja warscheinlch dan auftreten wen das programm deine mySent funktion ausführt oder wen er die original funktion aufruft.
Akorn is offline  
Old 08/03/2011, 22:41   #7


 
buFFy!'s Avatar
 
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,287
mach an die potenziellen fehlerquellen ein
Code:
__asm INT3
olly wird dort automatisch breaken
buFFy! is offline  
Old 08/03/2011, 23:24   #8
 
elite*gold: 0
Join Date: Jun 2011
Posts: 96
Received Thanks: 21
ok habe das mal probiert. das problem entsteht beim aufrufen der original send funktion...das würed heißen, dass ms detours eine falsche adresse zurückgibt oder nicht?
kurrbis is offline  
Old 08/03/2011, 23:44   #9
 
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
Einfach nur zu wissen das es am aufruf der originalfunktion scheitert reicht nicht aus um den fehler genau zu finden. Aber du kannst deine vermutung ganz einfach prüfen indem du mitells olly einfach nochmal deine mySent funktion durchstepst und guckst ob du am ende in der Trampolin funktion die MS detours angelegt hat landest und ob du von da aus auch weiter zur original funktion direkt hinter den hook jumpst.
Akorn is offline  
Old 08/04/2011, 00:31   #10
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Calling Convention von deinen Funktionen falsch? Versuch es mit __stdcall.
xNopex is offline  
Thanks
1 User
Old 08/04/2011, 02:17   #11
 
elite*gold: 0
Join Date: Jun 2011
Posts: 96
Received Thanks: 21
Quote:
Originally Posted by xNopex View Post
Calling Convention von deinen Funktionen falsch? Versuch es mit __stdcall.

WINAPI ist ein Makro für einen stdcall
kurrbis is offline  
Old 08/04/2011, 09:31   #12
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Schön, du hast also die Funktionszeiger mit der richtigen Calling Convetion definiert, aber was ist mit deinen eigenen Funktionen?
Richtig, bei denen handelt es sich aller Wahrscheinlichkeit nach um __cdecl Funktionen und jetzt rate mal was dass für dich bedeutet...
Bot_interesierter is offline  
Thanks
1 User
Old 08/04/2011, 13:22   #13
 
elite*gold: 0
Join Date: Jun 2011
Posts: 96
Received Thanks: 21
Quote:
Originally Posted by Bot_interesierter View Post
Schön, du hast also die Funktionszeiger mit der richtigen Calling Convetion definiert, aber was ist mit deinen eigenen Funktionen?
Richtig, bei denen handelt es sich aller Wahrscheinlichkeit nach um __cdecl Funktionen und jetzt rate mal was dass für dich bedeutet...

Danke Danke Danke
und thx @xNopex, du meintest glaube ich das gleiche, habe es nur falsch verstanden^^

Das habe ich komplett vergessen und jetzt funktioniert es einwandfrei
kurrbis is offline  
Old 08/05/2011, 21:56   #14

 
elite*gold: 556
Join Date: Aug 2006
Posts: 502
Received Thanks: 404
du hast jetzt send gehooked.
Ich send zum beispiel ein packet auf n server, speicher sfort den SOCKET s und wie schaffe ich jetzt ein neues packet zu erstellen und zu verschicken auf den selben socket?
uragan is offline  
Old 08/06/2011, 00:26   #15
 
elite*gold: 0
Join Date: Jun 2011
Posts: 96
Received Thanks: 21
Socket mySocket;

In mySend machste dann einfach: mySocket = s;

Und dann kannste die Original send Funktion mit mySocket aufrufen um Pakete an den Server zu senden
kurrbis is offline  
Reply


Similar Threads Similar Threads
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"
[VB6]Winsock Packet Sending Program & [C++] ws_32 Hook&DLL
06/07/2009 - C/C++ - 1 Replies
Hi.. im trying to create a program that send packet to the server.. someone told me to hook my program using the ws_32 hook and dll can someone give me or teach me how to do these codes? the client i need to attach to is "KhanClient.exe" i hope you can help me..
[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 23:02.


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.