利用HOOK技术捕获IIS服务器的数据时出现的问题
近期在做一个防范网络攻击IIS服务器的系统,设想是先利用HOOK技术钩住IIS服务器的WSARecv,recv接受数据的函数,用自己的监测函数对接收的数据进行检测处理后,返回正常的WSARecv,recv处理。现在已经可以获取服务器接收的数据.
现在出现的问题是:即使钩子函数不返回服务器WSARecv,recv处理,网站照样可以被访问。
这个过程中用到了Detour工具。
函数框架如下:
钩IIS的recv函数:
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD dwReason,
LPVOID lpReserved
)
{ ...............
DetourAttach(&(PVOID&)Truerecvfrom, MyRecvfrom);
DetourAttach(&(PVOID&)TrueWSARecv, MyWSARecv);
...................}
插入的钩子函数:
int WINAPI MyWSARecv(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesRecvd,LPDWORD lpFlags,LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,int argc, char *argv[])
{
LPWSABUF p_buf;
p_buf = lpBuffers;
..........
............
int h = TrueWSARecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine);
.........对数据进行检测的函数............
return h;
}
现在已经可以将iis服务器接收的数据拿到,问题就出现在:即使不执行int h = TrueWSARecv(),网站同样可以被访问。
请问是什么原因? hook技术可以将iis服务器接收的数据完全阻断吗?即可以阻断对服务器的访问吗/?