-
-
[求助][求助]ws2_32.dll的劫持
-
发表于:
2014-9-7 11:50
7750
-
这个ID是几年前一个前辈给我的,在今天之前我是完全没接触过crack之类的东西...
最近需要做一个针对单个进程的透明代理,我可以使用remote hook或者wpcap来做这个事情,但都有其缺点,所以考虑到了dll劫持这个方法。通过搜索找到了Aheadlib这个工具,编译出ws2_32.dll后放在相应进程的目录下完全OK。下面是我做的调整。
环境:win7 ultimate 32, vs2010 sp1
Aheadlib:即时调用/需要时载入/直接跳入
我需要在connect中拿到进程要连接的地址端口,通过sock4协议连接到代理服务器上,也就是说我要在AheadLib_connect中使用connect/send/recv这几个函数。
考虑到我知道connect函数的参数,我就将AheadLib中的实现替换为
extern "C" __declspec(dllexport) int __cdecl AheadLib_connect ( SOCKET sock, sockaddr *addr, int nlen )
{
connect_ptr foo_connect = (connect_ptr)GetProcAddress(m_hModule, "connect");
send_ptr foo_send = (send_ptr)GetProcAddress(m_hModule, "send");
recv_ptr foo_recv = (recv_ptr)GetProcAddress(m_hModule, "recv");
sockaddr_in addr_proxy;
//连接代理服务器的socket地址,代码略去
int ret = foo_connect( sock, (sockaddr *)&addr_proxy, sizeof(addr_proxy) );
if( 0 == ret )
{
sock4_header _msg;
//赋值代码略去
ret = foo_send( sock, (char *)&_msg, sizeof(_msg), 0 );
if( ret > 0 )
{
char buf[128] = {0};
ret = foo_recv( sock, buf, 8, 0 );
if( ret > 0 && buf[1] == PROXY_RESPONSE_OK )
{
//OK
return 0;
}
}
}
return -1;
}
1、在我的台式机上试验成功。对于recv函数,如果我使用GetProcAddress拿到的函数指针,调用的话就会产生ESP错误,应该是参数栈出问题了,直接使用recv则没问题。
2、在我的笔记本上(环境相同),执行完毕recv并能够打印出代理连接成功的日志,但我的测试进程在并没有打印connect成功的日志,所以应该是返回之后导致什么地方溢出了。
我的问题是,
对于我已经知道的函数声明,是否可以通过我修改实现的方式直接用c/c++代码来做我想做的工作?
已解决,结论是可行的。我之前的问题是自己代码的问题在此先谢过各位大神。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课