游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1389|回复: 0

如何获取recv(socket,char*,int,int)的buf?

[复制链接]

83

主题

196

帖子

196

积分

注册会员

Rank: 2

积分
196
发表于 2008-3-10 13:23:00 | 显示全部楼层 |阅读模式
1.想获取客户端接受的数据,是hook recv()函数好,还是改写wsock32.dll好?还是其他方法?
2.如何改写recv()函数?

下面的如何?
(本人的动态链接库的一个函数)
int _stdcall hook_recv( SOCKET s, char *buf, int len, int flags )
{
   int nRet;   
   WaitForSingleObject( g_hRecvEvent, INFINITE );//有信号状态返回WAIT_OBJECT_0     
   //恢复API头8个字节,INVALID_HANDLE_VALUE,值为-1
   WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )g_pRecv,
                     ( void* )g_dwOldBytR[0], sizeof( DWORD )*2, NULL );   
   //真正执行API函数
   nRet = recv( s, buf, len, flags );
   recvbuf = buf;//char* recvbuf为动态连接库的一个全局变量,为了获取buf
   //写入跳转语句,继续Hook
   WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )g_pRecv,
                     ( void* )g_btNewBytR, sizeof( DWORD )*2, NULL );   
   SetEvent( g_hRecvEvent ); //设置为有信号   
   return nRet;
}
然后写一个输出函数 return recvbuf;

如何?谢谢先
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 09:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表