修改recv的缓冲区数据

时间:2016-10-11 06:54:47

标签: c++ sockets tcp network-programming recv

我正在制作一个应用程序来操作send和recv,使用send执行它很容易,但我无法弄清楚如何伪造或替换recv。

我尝试做的是,例如,如果程序收到"Hello",请对其进行过滤并使程序认为收到"Bye"

以下是我尝试过滤recv的代码部分:

int WINAPI MyRecv(SOCKET s, char* buf, int len, int flags)
{  
      int i = 0;
      int ret = pRecv(s, buf, len, flags);
      while (i < ret && buf)
      {
         if (strncmp(buf, "Hello\0", 5) == 0)
         {               
              strcpy(buf,"Bye\0");
         }// End of if

         int len = strlen(buf) +1;
         buf += len;
         i += len;
      }//End of While
      return ret;

}//End of Function

实际上这种方法很有效,但是在收到"Hello"之后尝试使用下一个调用来执行此操作并且没有意图,我想替换包含"Hello"的实际数据包并将其更改为"Bye"

1 个答案:

答案 0 :(得分:-1)

通过注入DLL并将原始函数绕过钩子函数来钩住函数。这是我使用的x86绕道代码的一个例子。

20 = FILES
20 {
  ...
  maxItems = 1
  ...
}

如果你无法弄清楚,最好开始研究。