需要限制程序A的网络连接(比如一天一个IP只能connect几次),无法修改程序A,于是采用了注入hook其accept,如下:
SOCKET WSAAPI myaccept(
SOCKET s,
struct sockaddr FAR * addr,
int FAR * addrlen
)
{
static int count=0;
lpfnaccept real_accept=(lpfnaccept)HookItem.pOldFunEntry;
SOCKET sClient=((lpfnaccept)addr)(s,addr,addrlen);
SYSTEMTIME systm;
::GetLocalTime(&systm);
SOCKADDR_IN peer_addr;
int peer_addrlen=sizeof peer_addr;
::getpeername(sClient,(LPSOCKADDR)&peer_addr,&peer_addrlen);
log(systm,peer_addr);
if (count>3)
{
count=0;
::closesocket(sClient);
return INVALID_SOCKET;
}
else
{
++count;
return sClient;
}
}
结果发现如果原本返回sClient则没有问题,如果拒绝访问return INVALID_SOCKET;一次后则后续的所有connect都会失败,并且不会写入log,也就是说没有再调用我的myaccept?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)