socket库中的send和recv函数在被自定义的hook函数监视劫持后,想把send发送过程的http报文头里目标网站篡改,虽然把host:的域名替换了,但是结果浏览器显示的效果是请求被服务器禁止了,错误代码403,这时,WireShark显示的http数据中目标IP地址仍然是未篡改网站的IP,也就是说,我一直在向它请求另一个网站的数据,服务器自然会禁止我的非法请求。那么,不光要hook住send()和recv(),还要追根溯源,把connect()也要监视起来,通过篡改它的参数sock_Addr结构中的IP地址这一项,把连接转向自己的目标网站,这样在修改了报文头中host:下的域名后,目标网站就被正确的访问了。
int WSAAPI hook_connect(IN SOCKET s,IN const struct sockaddr *name,IN int namelen)
{
OutputDebugString("MyConnect Function");
struct sockaddr_in *paddr =(struct sockaddr_in *)name;
paddr->sin_addr.S_un.S_addr = inet_addr("我的目标网站IP");
char temp[50];
char *ip =inet_ntoa(paddr->sin_addr);
int port =ntohs(paddr->sin_port);
sprintf(temp,"connect: ip=%s, port=%d\r\n",ip,port);
OutputDebugString(temp);
BYTE *p =(BYTE *)GetProcAddress(GetModuleHandle("ws2_32.dll"), "recv");
if(p)
{
sprintf(temp, "my connect: data of recv=%x:%x %x %x %x %x", p, p[0], p[1],p[2],p[3],p[4]);
OutputDebugString(temp);
}
//在这里返回换好了我的自定义地址paddr
return Real_connect(s, (sockaddr*)paddr, namelen);
}
这个是我自定义的Hook connect函数