Winsock2 recv()挂钩到一个远程进程

时间:2010-02-10 09:53:07

标签: c++ visual-c++ hook recv winsock2

我试图将一个自定义的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周前开始学习。 感谢。

1 个答案:

答案 0 :(得分:1)

你在哪里找到这样的例子?

第一行尝试定义一个新类型WSAREC,它是一个指向与recv()具有相同签名的函数的指针。不幸的是,它也试图声明这种类型的变量来存储recv()函数的地址。 typedef是错误的,因为函数缺少返回类型。所以它不能在Visual Studio 2003下编译。

你可能会有更多运气:

int (WINAPI * WSAREC)( SOCKET s, char *buf, int len, int flags ) = &recv;

,它只声明一个“指向函数的指针”类型的变量,它存储recv()的地址。

现在第二个片段是一个与recv()函数具有相同签名的函数,它打印一条消息,然后通过上面声明的函数指针调用原始recv()

此处的代码仅显示如何通过指针调用函数:它不会替换当前进程中的任何内容。

另外,我不确定您是否可以干扰其他过程并根据您的意愿更换一个功能。这将是对系统安全的巨大威胁。但是你为什么要这样做呢?