回 帖 发 新 帖 刷新版面

主题:请教高手!HOOK API 问题!!!!!!

这段代码是哪里有问题!!,收发数椐包总是不正常,,,
Byte dwOldBytes[2][2]//原来的API首字节 
Byte btNewBytes[8]//指令代码
pSend pRecv  API地址
//''''''
int _stdcall WSAAPI Mysend(IN SOCKET s,IN const char FAR * buf,IN int len,IN int flags)
 {  DWORD dwSize;
    int sendReturn;
    //发送处理
.................略
................
    ::WriteProcessMemory(hProcess,(void *)pSend, (void *)dwOldBytes[0], sizeof(DWORD)*2, &dwSize ); //写入原来的地址
    sendReturn= send(s, buf,len,flags);//这里,发不出去!????????
    ::WriteProcessMemory( hProcess, (void *)pSend, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize ); //写入我的函数地址
    return(sendReturn);
 }
//---------------------------------------------------------------------------
int _stdcall WSAAPI Myrecv(IN SOCKET s,OUT char FAR * buf,IN int len,IN int flags)
 {  DWORD dwSize;
    int recvReturn;
    ::WriteProcessMemory(hProcess,(void *)pRecv, (void *)dwOldBytes[1], sizeof(DWORD)*2, &dwSize );//写入原来的地址
    recvReturn= recv(s, buf,len,flags);//这里,收也有问题!????????
    ::WriteProcessMemory( hProcess, (void *)pRecv, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize );//写入我的函数地址
   //收包处理。。
.................略
................
    return(recvReturn);
 }


BOOL HookAPI()
{   HINSTANCE  hModule;
    DWORD dwIdOld;
    hProcess = GetCurrentProcess();
    hModule = LoadLibrary("WS2_32.dll");
    if (hModule != 0)
    {
      pSend = (DWORD)GetProcAddress( hModule, "send" );
      pRecv = (DWORD)GetProcAddress( hModule, "recv" );

      ::ReadProcessMemory( hProcess, (void *)pSend, (void *)dwOldBytes[0], sizeof(DWORD)*2, &dwSize );
      *(DWORD *)( btNewBytes + 1 ) = (DWORD)Mysend; //跳转指令
      ::WriteProcessMemory( hProcess, (void *)pSend, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize );

      ::ReadProcessMemory( hProcess, (void *)pRecv, (void *)dwOldBytes[1], sizeof(DWORD)*2, &dwSize );
      *(DWORD *)( btNewBytes + 1 ) = (DWORD)Myrecv; //跳转指令
      ::WriteProcessMemory( hProcess, (void *)pRecv, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize );

    FreeLibrary(hModule);
    }



    return(true);
}

回复列表 (共4个回复)

沙发

你这个是hook吗,怎么没有看到有安装钩子的地方

板凳

这只是其中一段代码,安装钩子没有问题,,在调用我的函数send recv 发送和接收数椐包,总是不正确

3 楼

我看过一个钩子,像这种在钩子内部互相调用的程序不能用stdcall关键字
要用far

4 楼

跟 FAR 什么的没关系,最好动态跟一下,要确信你 hook 的函数没问题,
就看看你 send/recv 的 packet 到底有多大,发送大的话是不是组塞了。
判断下返回值。

我来回复

您尚未登录,请登录后再回复。点此登录或注册