//部分代码来自CSDN
//Hook.cppAPIHOOK32_ENTRY hkS;//**************************************************************************************//
// 自定义函数Send
//**************************************************************************************//
int WINAPI MySend(SOCKET s, char *buf, int len, int flags)
{
return MessageBoxA(NULL,"my send",NULL,NULL);
}BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
hInst = static_cast <HINSTANCE> ( hModule );
hModDLL = (HMODULE)hModule;
hkS.hModCallerModule = hModDLL;
hkS.pszAPIName = "send";
hkS.pszCalleeModuleName = "ws2_32.dll";
hkS.pfnDummyFuncAddress = (PROC) & MySend;
hkS.pfnOriginApiAddress = GetProcAddress(GetModuleHandle("ws2_32.dll"),"send");
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
SetWindowsAPIHook(&hkS);
break; case DLL_PROCESS_DETACH:
UnhookWindowsAPIHooks(hkS);
break;
}
return TRUE;
}//需要hook的程序主要包含以下函数
#pragma comment ( lib, "ws2_32.lib" )
#include "Winsock2.h"
main()
{
if (WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
return FALSE;
}
connect(serversock,(struct sockaddr*)&server,sizeof(server));
send(serversock,buf,sizeof(buf),0);
}
//Hook.cppAPIHOOK32_ENTRY hkS;//**************************************************************************************//
// 自定义函数Send
//**************************************************************************************//
int WINAPI MySend(SOCKET s, char *buf, int len, int flags)
{
return MessageBoxA(NULL,"my send",NULL,NULL);
}BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
hInst = static_cast <HINSTANCE> ( hModule );
hModDLL = (HMODULE)hModule;
hkS.hModCallerModule = hModDLL;
hkS.pszAPIName = "send";
hkS.pszCalleeModuleName = "ws2_32.dll";
hkS.pfnDummyFuncAddress = (PROC) & MySend;
hkS.pfnOriginApiAddress = GetProcAddress(GetModuleHandle("ws2_32.dll"),"send");
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
SetWindowsAPIHook(&hkS);
break; case DLL_PROCESS_DETACH:
UnhookWindowsAPIHooks(hkS);
break;
}
return TRUE;
}//需要hook的程序主要包含以下函数
#pragma comment ( lib, "ws2_32.lib" )
#include "Winsock2.h"
main()
{
if (WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
return FALSE;
}
connect(serversock,(struct sockaddr*)&server,sizeof(server));
send(serversock,buf,sizeof(buf),0);
}
main()
{
hModDLL = LoadLibrary("Hook.DLL");
if (hModDLL == NULL)
{
return();
}
pfnInsertDll = (PFN)GetProcAddress(hModDLL,"InsertDll");
hHook = pfnInsertDll();
}
HHOOK InsertDll ()
{
hwnd=FindWindow(NULL,WINDOW_NAME);
if (!IsWindow(hwnd))
{
return NULL;
}
dwTID=GetWindowThreadProcessId(hwnd,&dwPID);
if (dwTID && dwPID)
{
hHook = SetWindowsHookEx(WH_GETMESSAGE,&GetMsgProc,hModDLL,dwTID);
return hHook;
}
return NULL;
}主要函数都是从csdn杂志的例程中copy过来的
事实证明messagebox是可以hook到的,而send就不可以!我很郁闷
原来win2000是要钩WSASend(),不知道98下是怎样的?
不同的系统send函数是不一样的?
望高手补充!