WINSOCK2 RECV()リモートプロセスにフック
-
19-09-2019 - |
質問
私は私の機能ではなく、プロセス内の一つで実行されるように、リモートプロセスにカスタムのrecv()winsock2.0メソッドをフックしようとしていた、私はこれをグーグルでてきたと私はいくつかの本当に良い例を見つけましたが、彼ら不足記述
typedef (WINAPI * WSAREC)( SOCKET s, char *buf, int len, int flags ) = recv;
今、私の質問は、これはどういう意味か、何をするか、これは本当のrecv()関数へのポインタのいくつかの並べ替えですか?
[カスタム関数のコードの他の部分
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?
}
これらの質問は本当に基本的な音ならば、申し訳ありませんが、私は2または3週間前に学び始めました。 おかげます。
解決
ここで、あなたは、このような例を見つけましたか?
最初の行はrecv()
と同じシグネチャを持つ関数へのポインタである新しいタイプのWSARECを定義しよう。残念ながら、また、recv()
関数のアドレスを格納するために、この型の変数を宣言しようとしています。関数は、戻り値の型を欠いているので、typedefが間違っています。それは、Visual Studio 2003の下でコンパイルされません。
あなたが使用してより多くの運を持っていることがあります:
int (WINAPI * WSAREC)( SOCKET s, char *buf, int len, int flags ) = &recv;
recv()
のアドレスを記憶する「機能へのポインタ」型の唯一の変数を宣言します。
次に第二のスニペットは、次いで、上記の宣言された関数ポインタを介して元のrecv()
を呼び出し、メッセージを出力recv()
function、同じシグネチャを持つ関数です。
ここでのコードは、ポインタを使用して関数を呼び出す方法を示しています。それは、現在のプロセスで何かを置き換えるものではありません。
また、私はあなたが別のプロセスを妨害し、あなたの意志で一つの機能を置き換えることができますかわかりません。それは、システムのセキュリティにとって大きな脅威となります。しかし、なぜあなたは、
??最初の場所でそれを行うだろう