2017-08-22 4 views
0

J'essaye de raccorder la fonction recv() et cela fonctionne parfaitement. Ce n'est pas montré ici, mais la fonction hookée imprime ce qu'elle reçoit dans la console.Comment utiliser correctement DetourRemove?

Maintenant, j'essaie de décrocher la fonction sur une touche, mais cela ne marche évidemment pas puisque les nouveaux paquets reçus sont encore imprimés sur la console, donc la fonction est probablement encore accrochée. J'ai essayé de changer et de changer des trucs pour que DetourRemove fonctionne mais ça ne fonctionne pas si quelqu'un peut aider, je serais reconnaissant. Le code de base est en bas.

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

Avez-vous essayé avec 'recv_orig' comme premier argument de' DetourRemove'? –

+0

Non, mais je vais essayer – SoLux

+0

Ok, donc après avoir essayé cela tous les entiers se convertissent en hexadécimal ce qui se passe ici, cela n'a aucun sens pour moi – SoLux

Répondre

0

L'a corrigé. Je passais les mauvais arguments:

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