关于HOOK RECV

gy188166520 2009-11-02 11:05:41
我HOOK了IE的RECV函数....步骤如下
1.::GetProcAddress(::GetModuleHandle(L"ws2_32"),"recv");取得recv的地址
2.修改这个地址对应的指令为jmp xxx这个xxx是我的函数的地址
3.xxx里的代码如下
_asm
{

pushad
push [esp+0x30] ;flags
push [esp+0x30] ;bufsize
push [esp+0x30] ;buffer
push [esp+0x30] ;Socket
call RecvData
mov ea,eax ;这个ea是我在外部定义的一个int变量
popad
mov eax,ea
retn 0x10

}

4.下面是RecvData函数代码
CString str;
DWORD dwNumberOfBytesWrite;
DWORD dwNumberOfBytesRead;
::WriteProcessMemory(::GetCurrentProcess(),p1,buf1,5,&dwNumberOfBytesWrite);//恢复原始代码
int ret=::recv(s,buf,len,flags);
if(ret==-1) //问题貌似出现在这里.如果我把这个if全部删掉IE能正常访问.但是如果我就
{ //这样留着就会出问题访问任何网站直接弹出接收失败,错误代码100053
//请高手讲解一下

str.Format(L"接收失败,错误代码%d",::GetLastError());
MessageBox(NULL,str,L"",0);
}
::WriteProcessMemory(::GetCurrentProcess(),p1,NewAddress,5,&dwNumberOfBytesWrite);//改回继续HOOK代码
return ret;
...全文
212 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2009-11-04
  • 打赏
  • 举报
回复
弹出对话框影响就多了,首先执行时间变长了,其次LastError可能会改变,还有其它可能。
bobo_2003 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cnzdgs 的回复:]
recv返回失败是很常见的,返回失败不一定就有问题,如果socket设置了非阻塞模式,recv经常会失败,错误码是10035。
[/Quote]

顶这个,不要去判断
oyljerry 2009-11-03
  • 打赏
  • 举报
回复
Socket error 10053 - Software caused connection abort
gy188166520 2009-11-03
  • 打赏
  • 举报
回复
那为什么我不弹出对话框就能成功弹出就失败呢??????
cnzdgs 2009-11-03
  • 打赏
  • 举报
回复
recv返回失败是很常见的,返回失败不一定就有问题,如果socket设置了非阻塞模式,recv经常会失败,错误码是10035。
dirdirdir3 2009-11-03
  • 打赏
  • 举报
回复
异步的话返回失败是很正常的事,

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧