recv () hook Winsock2 em um processo remoto
-
19-09-2019 - |
Pergunta
Eu estava tentando ligar um método winsock2.0 recv () personalizada para um processo remoto, de modo que meus executa a função em vez de a um no processo, eu tenho sido pesquisando isso e eu encontrei alguns realmente bom exemplo, mas eles falta description
typedef (WINAPI * WSAREC)( SOCKET s, char *buf, int len, int flags ) = recv;
Agora, a minha pergunta é: o que isso significa, ou não, isso é algum tipo de um ponteiro para a função recv real ()?
E, em seguida, o outro pedaço de código para a função personalizada
int WINAPI Cus_Recv( SOCKET s, char *buf, int len, int flags )
{
printf("Intercepted a packet");
return WSAREC( s, buf, len, flags ); // <- What is this?
}
Desculpe se estas perguntas soar muito básico, eu só comecei a aprender 2 ou 3 semanas. Obrigado.
Solução
Onde você encontrou um exemplo?
a primeira linha tenta definir um novo tipo WSAREC, que é um ponteiro para uma função com a mesma assinatura como recv()
. Infelizmente, ele também está tentando declarar uma variável deste tipo para armazenar o endereço da função recv()
. o typedef é errado já que a função está faltando um tipo de retorno. por isso não compila em Visual Studio 2003.
Você pode ter mais sorte usando:
int (WINAPI * WSAREC)( SOCKET s, char *buf, int len, int flags ) = &recv;
que declara apenas uma variável do tipo "ponteiro para função", que armazena o endereço do recv()
.
Agora, o segundo trecho é uma função que tem a mesma assinatura que o recv()
function, que imprime uma mensagem, em seguida, chama o recv()
original através do ponteiro função declarada acima.
o código aqui apenas mostra como chamar uma função através de um ponteiro: Ele não substitui nada no processo atual.
Além disso, eu não estou certo que você pode interferir com outro processo e substituir uma função em sua vontade. seria uma grande ameaça para a segurança do sistema. mas por que você faria isso em primeiro lugar ??