在WINDOWS95/98及NT系统中,如何防病毒呢?我想这个问题很多朋友都感兴趣,在饱受CIH病毒之苦后,的确是应该好好考虑这个问题了。特别是在当今互联网时代,WORD宏病毒等各种病毒的确是很容易神不知鬼不觉,不管你愿不愿意就进驻你的电脑。对于我们大多数主要精力是在于日常开发使用电脑的普逻大众来说,的确是没有安全感。有一点象家里虚掩着门,等候梁上君子的大架光临一样。而我们常常在报纸杂志上看到这个那个病毒被发现等等消息。在这场病毒大战中,我们这些普通电脑用户可以做些什么呢?能不能在自己的电脑中装一个免费的报警器?正是凭住这个目的,使我想起猎人装野兽的把戏,挖上一个“美丽”的陷井,坐等待猎物的到来。对,守株待兔!何乐而不为?而这里我们要捉的是病毒这个可恶的“猎物”,以对付所有已知或未知的病毒。
那么我们怎么样设计这个陷井呢?设计思想如下:由于病毒最基本的特征之一是具有传染性,要传染就必需对宿主程序进行修改。从而必然引起程序代码的变化。不管传统病毒又好,变形病毒又好,宏病毒又好,将来的未知病毒也好。这都是通性,不然就不叫病毒。因此,只要放出文件以作“诱饵”,并且保留其正确副本,待病毒来“偷吃”。而我们每次开机时或必要时对“诱饵”和副本文件作比较。不同则报警。所以从理论上来说,只要诱饵放得好,这个陷井一定不放过所有病毒。并且是以逸待劳,稳坐钓鱼台。何乐而不为?这就象保险箱中的报警器一样,平常“沉默寡言”,一有警情马上铃声大作。并且绝不会要求什么“待遇”。更不会象某些防病毒的实时防火墙软件,采用VXD技术,修改WINDOWS内核,从而会造成运行速度的下降。并且,本软件采用高级语言编写,有我们的自主有版权,所有有经验的用户都可以看得懂,可自行对程序进行扩充了。如果发现了病毒,可作自己研究之用,或立即用杀毒软件进行杀毒。从而为自己的电脑多了一分保障。
以下,我以VB5.0编写了一段小程序,用于比较“诱饵”文件及其副本,只要一有不同,立即报警!而选为诱饵的有两个,一个是对付感染可执行EXE文件的病毒,例如CIH病毒。我把本程序编译成的DENVEN.EXE文件变成了诱饵,正本存于WINDOWS98下的SYSTEM子目录下,而副本存于D:盘根目录的VB子目录下,但扩展名改为DAT。另一个是对付WORD宏病毒的“诱饵”,我采用OFFSET子目录下的模板normal.dot,因为几乎所有的宏病毒都会通过感染这个通用的模板,增加AUTOOPEN或AUTOCLOSE等的自动宏,来达到感染所有打开或新建的WORD文件,进行传染,所以应该对它们进行全天24小时的监视。而对应的副本也改名为normal.dat。 至于其他的“诱饵”,我就一下子想不到,读者可以发挥你的聪明才智了。我在屏幕上设立一个窗口,定义窗体装载代码,然后把程序编译成名为DENVEN.EXE的可执行程序。代码如下:
Private Sub Form_Load()
‘以下分别对两个诱饵文件进行较验,不同则预警
cmp "c:\windows\system\denven.exe", "d:\vb\denven.dat"
‘normal.dot模板的位置随WORD的安装位置不同而不同,可根据具体情况而改动以下语句
cmp "D:\Microsoft Office\Templates\normal.dot", "D:\Microsoft Office\Templates\normal.dat"
End
End Sub
‘ 以下为比较两个文件的子程序,形式参数为两个文件的文件名
Private Sub cmp(filename1 As String, filename2 As String)
Dim filenum1 As Integer, filenum2 As Integer
‘定义两个1K字节的缓冲区
Dim num1(1024) As Byte, num2(1024) As Byte
Dim i As Integer, sumlen As Integer, mess As Integer
mess = 0
filenum1 = FreeFile
‘以只读方式打开两个文件
Open filename1 For Binary Access Read As filenum1
filenum2 = FreeFile
Open filename2 For Binary Access Read As filenum2
Do Until EOF(filenum1)
Get filenum1, , num1
Get filenum2, , num2
‘每次读取1K字节的文件内容进行比较判别
For i = 1 To 1024
If num1(i) <> num2(i) Then
sumlen = sumlen + i
Exit For
End If
Next
If i <> 1025 Then
‘如两文件有不同,则立即报警
Exit Do
End If
sumlen = sumlen + 1024
Loop
If i <> 1025 Then
mess = MsgBox("警告:文件 " & filename1 & "可能已受病毒感染!" & "两文件在地址 " & sumlen & " 处不相等,可能在你的计算机中发现了未知名的病毒!如果确定是你自己改动的,可按确定键将会自动更新备份文件,否则按取消键。", vbOKCancel + vbExclamation + vbDefaultButton2, "病毒预警程序报告:")
‘本程序具有增加更新副本文件的功能,允许在肯定的情况下通过拷贝更新副本文件
If mess = vbOK Then
mess = 2
Close (filenum1)
Close (filenum2)
‘对文件副本进行更新
FileCopy filename1, filename2
Else
‘如果不对副本进行更新,则会再提示是否用正确副本文件对受病毒感染或破坏的诱饵文件进行更新
mess = MsgBox("是否用备份文件 " & filename2 & "更新诱饵文件” & filename1 & “?", vbOKCancel + vbExclamation + vbDefaultButton2, "病毒预警程序报告:")
If mess = vbOK Then
mess = 1
Close (filenum1)
Close (filenum2)
‘对诱饵文件进行更新
FileCopy filename2, filename1
endif
End If
End If
If mess <> 1 Then
‘关闭两文件
Close (filenum1)
Close (filenum2)
End If
End Sub
把本程序编译后,再拷贝到WINDOWS98下的SYSTEM子目录下。 并且再拷贝多一个副本,把扩展名改为DAT。为了使每次启动电脑预警程序都会自动执行。应把此可执行文件加入到注册表中,从而让计算机每次开机时立即依据副本对WORD下的NORMAL.DOT及WINDOWS下的DENVEN.EXE进行检测,以发现落入陷井中的“猎物”立即报警!以达到及早发现病毒,及早采取杀毒措施,把潜在的损失降到最低。当然,也可以把本程序用于在适当时候对“诱饵”文件进行检查。而不用等到开机时候。
把此预警程序加入系统注册表中的开机自动运行序列的步骤如下:先单击“开始”下的“运行”功能,在命令行中输入 REGEDIT 回车,运行注册表编辑软件,然后按Hkey_Local_machine à software à microsoft à windows à CurrentVersion à run续项双击鼠标进入,然后在窗口右边再单击鼠标右键,新建一项字符串值,为本功能起一标签名(如DENVEN),然后再单击鼠标右键,在键值处输入本程序所在路径及文件名即可(例如"c:\windows\system\denven.exe")。从此一个忠实的“看家狗”就在你的电脑里出现了。本人靠此方法,已发现了几种宏病毒对自已计算机感染的事例。的本程序在 VB5.0及WINDOWS98下实现通过。有兴趣的朋友可试一试,或与作者进行交流。
|