2017-08-22 5 views
0

Ich versuche, die recv() -Funktion zu haken und das funktioniert perfekt. Es wird hier nicht angezeigt, aber die Hooked-Funktion druckt, was es in die Konsole eingibt.Wie wird DetourRemove richtig verwendet?

Jetzt versuche ich, die Funktion auf einen Tastendruck auszuhängen, aber es funktioniert offensichtlich nicht, da neue empfangene Pakete noch auf die Konsole gedruckt werden, so dass die Funktion wahrscheinlich immer noch süchtig ist. Ich habe versucht, Dinge zu wechseln und zu ändern, um DetourRemove funktionieren zu lassen, aber es funktioniert einfach nicht, wenn jemand helfen könnte, ich wäre dankbar. Der grundlegende Code ist unten.

int(__stdcall *recv_orig)(SOCKET s, char *buf, int len, int flags); 
int __stdcall recv_hook(SOCKET s, char *buf, int len, int flags) 
{ 
    return recv_orig(s, buf, len, flags); 
} 

///DETOUR 

recv_orig = (int(__stdcall *)(SOCKET s, char *buf, int len, int flags))DetourFunction(reinterpret_cast<BYTE*>(GetProcAddress(GetModuleHandleW(L"Ws2_32.dll"), "recv")), reinterpret_cast<BYTE*>(recv_hook)); 

///REMOVE 

DetourRemove(reinterpret_cast<BYTE*>(GetProcAddress(GetModuleHandleW(L"Ws2_32.dll"), "recv")), reinterpret_cast<BYTE*>(recv_hook)); 
+0

Haben Sie versucht, es mit 'recv_orig' als erstem Argumente an' DetourRemove'? –

+0

Nein, aber ich werde versuchen, – SoLux

+0

Ok, nachdem ich versuche, dies alle Ganzzahlen in Hexadezimal konvertieren, was zum Teufel hier los ist, macht dies keinen Sinn für mich – SoLux

Antwort

0

Fixed es. Ich passiere die falschen Argumente:

DetourRemove(reinterpret_cast<BYTE*>(recv_orig), reinterpret_cast<BYTE*>(recv_hook) 
Verwandte Themen