病毒感染简写怎么写( 二 )


(6)最后插入VIRUSES子程序 。这个子程序里面调用了VIRUSES_SUB,执行到这里返回执行结果信息 。
其中用到4个出错的返回值,分别是:
1:用户文件太大,不传染;
2:带病毒文件打不开,不传染;
3:带病毒文件读取不成功,不传染;
4:查找第一个匹配文件不成功 。
如果返回值是0代表文件传染成功 。
具体实现过程如下:
其中用到的函数和结构体用法参考3.3节 。
首先导入病毒子程序要用到的三个库文件,分别是dir.h, stido.h, dos.h.在主函数里面只调用VIRUSES函数 。紧跟定义VIRUSES函数里面要调用的VIURS_SUB函数 。里面定义了若干个变量 。ffblk用来保存查找到的匹配文件的信息,用到里面的ff_name变量来保存匹配文件名 。
然后定义保存未感染的文件和病毒文件的文件型指针变量,分别用是*virus_r和*virus_v.读取文件的缓冲区,放到二维数组a[500][80]里面临时存放 。因为此程序对大于500行的C文件不进行传染,所以完全可以放到里面 。首先用getdate函数获取系统当前日期并输出 。接着用findfirst函数查找扩展名为C的文件,将其信息保存到ffblk里面 。用fgets函数读文件的第一行,长度是80-1个字符 。然后用strstr函数检测病毒的标志,看文件是否有INFECT这个标志 。
如果有,表示文件已经被传染,关闭文件,不进行传染 。当含有病毒部分的程序被执行时,首先进入病毒程序 。它在磁盘上查找*.C的匹配文件,一旦找到,查找“已被传染过”的标志INFECTED 。若有此标志,继续找其它*.C文件,直至全部检查一遍 。
如果没有这个标志,将文件全部读入a[500][80],如果发现文件超过500行,不传染,返回 。将文件指针指向文件头,打开带病毒的文件 。如果打不开,返回 。
然后读取带病毒文件的前4行,也就是病毒子程序要用到的头文件,写入将被传染的文件 。若不能读取带病毒文件,返回 。用n_line变量控制行数,把将被传染文件的源程序写回原文件 。其中要进行处理不写入病毒文件已有的包含语句,也就是说使#Include语句不重复 。
这点是这样实现的:定义一个字符数组char include_h[]=; strstr函数查看将被传染文件的头文件是否和*include_h[]相同,如果相同,。
3.病毒是怎么写出来的汇编语言底层,灵活,速度快,体积小的优势能将一个病毒程序发挥到极至,通常一个程序写出来才几千字节就包含了所有的功能 。
一般一个病毒都有如下几个功能:一 代码重定位 二 自己找到所需API地址 三 搜索文件、目录 四 感染文件 五 破坏系统或文件(随便你了) 其中一,二项功能是必要的,五项功能是可选的 。而一个病毒程序感染文件的功能是它的核心,是衡量它质量的重要标准 。
(一)代码的重定位 一个变量或函数其实是一个内存地址,在编译好后,程序中的指令通过变量或函数的内存地址再去存取他们,这个地址是个绝对地址 。如果你将代码插入到其他任何地方,再通过原来编译时产生的地址去找他们就找不到了,因为他们已经搬家了 。
但是,在写程序时考虑到这个问题,可以在代码最开始,放上几行代码取得程序基地址,以后变量和函数作为偏移地址,显式的加上这个基地址就能顺利找到了,这就是重定位 。就象这段代码 。
Call getbaseaddress Getbaseaddress:pop ebx Sub ebx,offset getbaseaddress Mov eax,dword ptr [ebx+Var1] 如果使用宏汇编语言写病毒,请尽量使用ebx做基地址指针,不要使用ebp,因为ebp在调用带参数的函数时会改变 。(二)自己取得所需的API地址 一个win32程序文件,所调用的API函数地址,是由系统填入到程序文件中描述各类数据位置的数据结构中的 。