首先用getdate函数获取系统当前日期并输出 。接着用findfirst函数查找扩展名为C的文件 , 将其信息保存到ffblk里面 。
用fgets函数读文件的第一行 , 长度是80-1个字符 。然后用strstr函数检测病毒的标志 , 看文件是否有INFECT这个标志 。
如果有 , 表示文件已经被传染 , 关闭文件 , 不进行传染 。当含有病毒部分的程序被执行时 , 首先进入病毒程序 。
它在磁盘上查找*.C的匹配文件 , 一旦找到 , 查找“已被传染过”的标志INFECTED 。若有此标志 , 继续找其它*.C文件 , 直至全部检查一遍 。
如果没有这个标志 , 将文件全部读入a[500][80] , 如果发现文件超过500行 , 不传染 , 返回 。将文件指针指向文件头 , 打开带病毒的文件 。
如果打不开 , 返回 。然后读取带病毒文件的前4行 , 也就是病毒子程序要用到的头文件 , 写入将被传染的文件 。
若不能读取带病毒文件 , 返回 。用n_line变量控制行数 , 把将被传染文件的源程序写回原文件 。
其中要进行处理不写入病毒文件已有的包含语句 , 也就是说使#Include语句不重复 。这点是这样实现的:定义一个字符数组char include_h[]={“dos.h”, “stdio.h”, “dir.h”}; strstr函数查看将被传染文件的头文件是否和*include_h[]相同 , 如果相同 , 不进行插入 。
找出CALL VIRUSES;的插入点:如果有一行有printf、break、for、while语句其中之一 , 就对其后插入调用VIRUSES函数的调用语句 。把病毒子程序写入文件 。
最后处理更改被感染的文件名 。如果不进行改名 , 就不能进行多次传染 , 也就是说不能体现病毒的自我复制能力 。
查找一行是static char viruses_f[]={“virus.c”} , 把其中的文件名改为被感染的文件名 。接着查找下一个匹配文件 。
3.1.2病毒清除程序REVIURS.C病毒的清除过程是和传染过程相逆的 。传染的时候插入调用viruses函数的调用语句 , 在病毒清除文件里面就要删除掉这个语句 。
然后还要删除掉病毒子程序VIURSES_SUB和VIURSES 。有一个问题不能进行还原 。
因为当时插入病毒子程序需要的头文件时没有记录传染前文件的头文件信息 , 所以不能进行还原 。但是这一点不影响原文件 。
所以这点在病毒清除程序中没有进行处理 。由于演示的时候病毒程序VIRUS.C和清除病毒程序REVIURS.C放在同一个目录下进行演示 。
考虑到VIRUS.C会把REVIURS.C传染和REVIRUS.C会把VIRUS.C清除两种情况 。所以编写这两个程序的时候必须加入一条条件语句if(strcmp(ffblk.ff_name,"REVIRUS.C")!=0)和if(strcmp(ffblk.ff_name,"VIRUS.C")!=0) 。
当含有清除部分的程序被执行时 。它在磁盘上找扩展名为C的匹配文件 , 如果找到 , 查找是否有被传染过的标志“INFECTED” 。
如果无此标志 , 继续找其它的C文件 , 直至全部检查一遍 。若有这个标志 , 则(1)查找磁盘文件 , 如果是有病毒的传染标志“INFECTED”则打开文件 。
如果没有则关闭文件并且寻找下一个TEST*.C 。(2)读取文件 , 首先判断是否为Viruses();如果不是则判断是否为int Viruses_sub() , 如果都不是 , 则把读取 。
6. 用C语言怎么编辑病毒的代码 C语言病毒代码 #include