|
You last visited: Today at 23:02
Advertisement
Winsock send Hook Problem
Discussion on Winsock send Hook Problem within the General Coding forum part of the Coders Den category.
08/03/2011, 18:43
|
#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;
}
|
|
|
08/03/2011, 19:10
|
#2
|
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.
|
|
|
08/03/2011, 19:41
|
#3
|
elite*gold: 0
Join Date: Jun 2011
Posts: 96
Received Thanks: 21
|
Quote:
Originally Posted by buFFy!
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.
|
|
|
08/03/2011, 20:01
|
#4
|
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,287
|
tja dann ^^ ollydbg ist dein freund!
|
|
|
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...
|
|
|
08/03/2011, 22:24
|
#6
|
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
|
Quote:
Originally Posted by kurrbis
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.
|
|
|
08/03/2011, 22:41
|
#7
|
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,287
|
mach an die potenziellen fehlerquellen ein
olly wird dort automatisch breaken
|
|
|
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?
|
|
|
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.
|
|
|
08/04/2011, 00:31
|
#10
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
Calling Convention von deinen Funktionen falsch? Versuch es mit __stdcall.
|
|
|
08/04/2011, 02:17
|
#11
|
elite*gold: 0
Join Date: Jun 2011
Posts: 96
Received Thanks: 21
|
Quote:
Originally Posted by xNopex
Calling Convention von deinen Funktionen falsch? Versuch es mit __stdcall.
|
WINAPI ist ein Makro für einen stdcall
|
|
|
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...
|
|
|
08/04/2011, 13:22
|
#13
|
elite*gold: 0
Join Date: Jun 2011
Posts: 96
Received Thanks: 21
|
Quote:
Originally Posted by Bot_interesierter
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
|
|
|
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?
|
|
|
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
|
|
|
 |
|
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.
|
|