可是我没有意识到问题的严重性。重装系统之后,用移动硬盘里的软件安装包重装各种软件,结果我没有意识到,安装包有可能也被感染,于是系统又中毒了。印象中因为这个病毒,那个暑假天天装系统玩。一个暑假重装系统几十遍。最后去别人那里复制了一个新版瑞星杀毒软件的安装包回来装,才解决问题。移动硬盘里十多个 GB 的 exe 格式的软件全部被感染,无一幸免。 这样一个病毒,就是利用了 PE 格式的漏洞,把自己插入 exe 文件的空隙之中,修改相关数据,使得用户执行这个 exe 文件的时候,病毒首先被运行。病毒为了让用户不发现自己,在自己启动完成之后,创建一个同名的.tmp扩展名的进程,比如~winword.tmp,然后在那个进程里执行原来程序的代码。这样是非常隐蔽的。如果不是病毒自己疏忽了,我是发现不了的。当时病毒没有对已感染文件进行判断,出现了一个文件重复感染的情况。这样,那个文件在打开的时候就不显示任何窗口了源]自=优尔-^论-文"网·www.youerw.com/ ,这才引起我的疑心。现在想想,如果要不是这个缺陷,如果这是个木马病毒而不是蠕虫,我要泄漏多少帐号密码呀。 这个病毒在我家大面积感染硬盘里文件,还有个原因,那就是杀毒软件没有更新。这就引出来一个问题:如何在杀毒软件没有更新的情况下、如何在杀毒软件将新出现的病毒加入病毒库之前,帮助用户防范这类病毒? 1.2 PE文件 在 WindowsNT 推出的时候微软引进了一个新的可执行文件格式。这种格式被称为可移植的可执行(Portable Executable,后面简称 PE)文件格式,因为它被设计成一个可以在所有微软的 32 位操作系统上移植的格式。同样的 PE 格式的可执行文件可以在任何版本的 WindowsNT、Windows95 以及其他 Win32 系统上执行。同时,同样的格式也可以用在运行在 Intel x86 以外的架构的处理器上的WindowsNT 系统上,比如 MIPS、Alpha 以及PowerPC。32 位的dll 和WindowsNT的设备驱动程序也遵循同样的 PE 格式。 这种格式的优点很多,否则微软也不会采用这种格式作为可执行文件的格式,而且用了将近 20 年。
但是,这种格式也是有缺陷的。比如为病毒提供了一定的寄存环境等。 1.3 课题意义 本课题正是这样一个题目。通过对一个 PE 文件的文件头进行采集、记录,在运行前进行比对,来发现病毒对 PE 文件头的篡改,从而达到防范的目的。因为不论病毒多么的新,它为了达到启动自己的目的,它一定会对 PE 文件头进行篡改的。而篡改之后,我们就可以在比对中发现不同,从而向用户报警。在一定程度上为用户使用提供方便。 1.4 技术选择 “用 hash 算法计算一下文件的 hash 值不就行了么?”这个问题我也在开题之初问过。 Hash 这东西是会存在 hash 冲突的。即,两个不一样的东西的 hash 值是相同的。一旦篡改前和篡改后,文件的 hash 值不变,那么我们的软件就会失效,就会让病毒肆虐。 可能你会说 hash 冲突的概率很低。的确,这个概率很低。网上有人做过实验,用一台超级计算机,不停的算 MD5,每秒钟计算几百万个,平均每 24 小时才出现一次冲突。 但是,这个概率实在随机数据情况下的。而病毒的制造者则可以通过一些算法,让病毒在感染的时候故意制造一些特殊的数据,使 MD5 等hash算法的冲突的概率大大增加,这是我们不得不放弃通过 hash 来比对的方案。只有对 PE 文件中的资源逐一记录,比对,才能完全确保安全。 Windows环境下具有可信软件管理功能的Shell实现(2):http://www.youerw.com/jisuanji/lunwen_65875.html