Hilfe bei winsock hook
-
Hi,
ich möchte die Pakete eines Programms empfangen und modifizieren können. Das möchte ich machen, indem ich recv und send hooke.
Ich habe mir schon Tutorials durchgelesen, komme allerdings nicht weiter. Kann man einen winsock hook mit der Funktion SetWindowsHookEx() machen? Wenn ja wie?Danke schonmal im voraus!
-
wie hast du es denn versucht und wo kommst du nicht weiter?
-
Ich habe mich zunächst an diesem Tutorial orientiert:
http://elearning.tutorials.de/flashpaper/c_c++/c-Mouse-Systemhook.swf
Meine Probleme treten dann darin auf, dass ich nicht weiß welche Parameter ich der SetWindosHookEx()-Funktion übergeben muss, in der msdn habe ich schon nach geschaut aber nichts gefunden, was etwas mit winsock zu tun hat.DLLIMPORT BOOL InstallHook() { if(g_hMouseHook != NULL) return TRUE; g_hMouseHook = SetWindowsHookEx(WH_MOUSE, MouseProc, g_hInst, 0); if(g_hMouseHook == NULL) return FALSE; return TRUE; }In diesem Fall wird für einen Mouse Hook "WH_MOUSE" übergeben, was muss ich bei einem Winsock Hook übergeben?
-
das ist ein anderer hook und hat nix mit function hooking zu tun. such ma nach detours.
-
Ok, ich habe mir jetz detours einmal angeschaut. Allerdings habe ich Probleme beim kompilieren. Ich bekomme Fehler in der detours.h:
In file included from detours.cpp:18: detours.h: In function `LONG InterlockedCompareExchange(LONG*, LONG, LONG)': detours.h:369: error: `LONG InterlockedCompareExchange(LONG*, LONG, LONG)' was declared `extern' and later `static' C:/Cpp/Dev-Cpp/include/winbase.h:1603: error: previous declaration of `LONG InterlockedCompareExchange(long int*, LONG, LONG)' detours.h: In function `LONG InterlockedCompareExchange(LONG*, LONG, LONG)': detours.h:370: error: cannot convert `void**' to `LONG*' for argument `1' to `LONG InterlockedCompareExchange(LONG*, LONG, LONG)'Das ist nur ein kleiner Teil der Errors, alle zu posten wäre zu viel.
Auf codeproject.com habe ich einen Artikel gefunden und daraus diesen Quellcode entnommen:
#include "dll.h" #include <windows.h> #include "detours.h" int (WINAPI *pSend)(SOCKET s, const char* buf, int len, int flags) = send; int WINAPI MySend(SOCKET s, const char* buf, int len, int flags); int (WINAPI *pRecv)(SOCKET s, char* buf, int len, int flags) = recv; int WINAPI MyRecv(SOCKET s, char* buf, int len, int flags); INT APIENTRY DllMain(HMODULE hDLL, DWORD Reason, LPVOID Reserved) { switch(Reason) { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hDLL); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach((PVOID*)pSend, (void*)MySend); if(DetourTransactionCommit() == NO_ERROR) OutputDebugString("send() detoured successfully"); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach((PVOID*)pRecv, (void*)MyRecv); if(DetourTransactionCommit() == NO_ERROR) OutputDebugString("recv() detoured successfully"); break; }; } int WINAPI MySend(SOCKET s, const char* buf, int len, int flags) { return pSend(s, buf, len, flags); } int WINAPI MyRecv(SOCKET s, char* buf, int len, int flags) { return pRecv(s, buf, len, flags); }Ich benutze wxDev-Cpp!
-
Es ist nicht unwahrscheinlich, daß Detours sich nicht ohne größere Schwierigkeiten mit dem GCC übersetzen läßt. Schon für den BCC waren einige Änderungen notwendig, und für den GCC dürfte es eher schlimmer werden.
Der einfachste Weg wäre, MSVC oder BCC zu benutzen; beide sind kostenlos erhältlich.
-
audacia schrieb:
Es ist nicht unwahrscheinlich, daß Detours sich nicht ohne größere Schwierigkeiten mit dem GCC übersetzen läßt. Schon für den BCC waren einige Änderungen notwendig, und für den GCC dürfte es eher schlimmer werden.
Der einfachste Weg wäre, MSVC oder BCC zu benutzen; beide sind kostenlos erhältlich.
Gut, das habe ich mir schon gedacht, habe mir MSVC runtergeladen und werde es installieren. Man kann bei wxDev-Cpp den MSVC als compiler auswählen, mal schauen ob es dann funktioniert.
Danke für die Hilfe!!
-
Ich habe jetz soweit alles hingekreigt.
Ich bekomme allerdings bei dem oben genannten Quellcode Kompilierungsfehler:Kompilieren... dllmain.cpp Verknüpfen... detours.lib(detoured.obj) : error LNK2005: _DllMain@12 ist bereits in dllmain.obj definiert. C:\Dokumente und Einstellungen\Tim\Eigene Dateien\Visual Studio 2008\Projects\WinsockHookDLL7\Debug\WinsockHookDLL7.dll : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.