Winsock 2.0 recv
機能を使用するアプリケーションがあり、Redox Packet Editorなどの出力をキャッチして、そのバージョンが2.0であることを確認できます。Winsock recv Detoursとのフック
私は機能フックするために、このコードがあります:send
については
#define _CRT_SECURE_NO_DEPRECATE
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <WinSock2.h>
#include <detours.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
FILE *pSendLogFile;
FILE *pRecvLogFile;
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, MySend);
if(DetourTransactionCommit() == NO_ERROR)
MessageBox(0,"send() detoured successfully","asd",MB_OK);
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pRecv, MyRecv);
if(DetourTransactionCommit() == NO_ERROR)
MessageBox(0,"recv() detoured successfully","asd",MB_OK);
break;
case DLL_PROCESS_DETACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
int WINAPI MySend(SOCKET s, const char* buf, int len, int flags)
{
MessageBox(0,"sent","sent",MB_OK);
return pSend(s, buf, len, flags);
}
int WINAPI MyRecv(SOCKET s, char* buf, int len, int flags)
{
MessageBox(0,"recvd","recvd",MB_OK);
return pRecv(s, buf, len, flags);
}
を、すべてが完璧に動作しますが、私はrecv
のための任意の出力を得ることはありません。私は1.1バージョンのWinsockを使って別のアプリケーションで試してみましたが、うまくいきました。 WSARecv、WSARecvExには何の不便もなくフックしようとしました。
WinAPIOverride32でアプリをチェックしたところ、それは明らかにrecv
機能を使用していると表示され、successfulyがその使用状況を記録します。 Winsock Packet Editorもデータをよく読み取っています。
アイデア?
私の助言:代わりにLSP(層別サービスプロバイダ)を書いてください。LSPサンプルの1つを変更すると、フックアプローチよりもさらに多くの情報が得られます。 TDIのドライバーや友人に代わるユーザーモードとして想像してみてください。 – 0xC0000022L
このLSPの記事またはサンプルコードはありますか?それほど複雑ではないことを願っています。 – methyl
もちろん、これは大部分の場合でも有効です:https://www.microsoft.com/msj/0599/layeredservice/layeredservice.aspxもちろん:http://msdn.microsoft.com/en-us/ライブラリ/ windows/desktop/bb513664(v = vs.85).aspx – 0xC0000022L