//部分代码来自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);
         
}

解决方案 »

  1.   

    调用dll的文件如下:
    main()
    {
    hModDLL = LoadLibrary("Hook.DLL");
    if (hModDLL == NULL)
    {
               return();
    }
    pfnInsertDll = (PFN)GetProcAddress(hModDLL,"InsertDll");
    hHook = pfnInsertDll();
    }
      

  2.   

    InsertDll函数为注入hook:
    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就不可以!我很郁闷
      

  3.   

    搞定了~~
    原来win2000是要钩WSASend(),不知道98下是怎样的?
    不同的系统send函数是不一样的?
    望高手补充!
      

  4.   

    啊,我也正在做这个。我是想构筑sendto函数。
      

  5.   

    要看应用程序,调用的是send还是WSASend了,最好把两个函数都hook掉