关于HOOK RECV
我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;