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 :)
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;
}