几天前,笔者发现了一个后门程序,并史无前例地与其奋战了一整天,收获不小,值得一 "吹"。在本文的开始,笔者会先对该后门程序的起源以及运作原理做个说明。而后再阐述破解之道。
动态链接程序库
笔者先说说何谓"动态链接程序库"。所谓"动态链接程序库",英文名称为Dynamic Linking Library,以下简称DLL,其用途在于为其他应用程序提供其本身并不具备的功能。比如,假设系统中有一DLL具备了与远端系统进行网络联接的功能,我们假设其名称为Network.dll;如果有另外一个应用程序想使用该功能,则这个程序只需在执行时与Network.dll进行动态链接(Dynamic Linking),就可以运用Network.dll的网络联接功能来实现远端联接系统。简单地说,DLL的特性是:
1、DLL本身无法自行执行,必须靠其他程序调用 。
2、在系统刚建立时 (如刚装好windows时),系统中即存在有一定数量的DLL,而某些应用程序亦会将自已所需的DLL添至系统中,导致DLL的数量随应用程序的增加而增加。
后门程序的进驻流程
相信聪明的读者在看完了笔者的上述介绍后,应该大致猜出本文介绍的后门程序的性质了吧。没错,这个后门程序正是以DLL的形式存在的。但上面也说过,DLL本身不能自行执行,那么这个后门程序是如何在系统中作怪的呢?据笔者推测,该后门程序进驻系统的流程应该是:
1、DLL文件随着某免费软件的安装而进入了Windows系统。
2、该免费软件在安装时,更改了系统的设定值,使Windows的核心程序Kernel能在一开机时即启动该DLL。
3、软件安装完成后,提示使用者 "重新启动系统",就在系统重新启动时,Windows的核心程序会在开机过程中将该DLL读入系统中并加以执行。至此,该后门程序的安装与执行已全部大功告成。
这个后门程序之所以刁钻,与后门程序本身以DLL的形式存在有关。首先,我们可在Windows系统中轻易地找出"正在执行中的程序",但要找出"正在执行中的DLL"则很不容易 (笔者是在整理文件时。偶然发现一来路不明的文件夹,这才发现了这个DLL),其次,这个后门程序在Windows开机时就被载人,而Windows系统的特性是"不允许使用者删除正在执行的DLL"!换句话说,Windows的这个特性保护了这个后门程序,使我们删除它的难度变得很高!
解决方法
要删除DLL,首先得让Windows在开机时不启动它,方法是在 "开始"+
"运行"窗口中,打人:"regsvr32.exe/u DLL的名称",并按回车。这时,Windows会出现一行英文字,提示你该DLL已被系统反注册 (这里的反注册指的是Windows将该DLL移出开机所必须执行的列表,但此时这个DLL仍处于执行状态),此时重新开机,并在启动后将该DLL删除即可。
后记
上面提过,笔者与这个后门程序搏斗了一整天,原因就在于这个后门程序受到了Windows的保护,无法轻易删除。笔者在试了一天后,才找出用regsvr32.exe进行反注册的方法,也因此得以顺利地将这个后门程序移出系统。在本次搏斗中,笔者深深感受到了Windows对自身内容的严密保护,笔者曾试着想在Windows的所有文件中,找出"记录Windows开机时所必须读取的DLL列表",结果是徒劳无功,白白浪费了两个多小时。
笔者认为,Windows之所以这么处理,一方面是帮使用者简化了必须操作的流程,让使用者在不需了解Windows系统的情况也能操作系统 但另一方面,Windows也间接地保护了恶意侵入系统的DLL,让DLL不但不容易被察觉,而且还相当难以删除。Windows的这个特性是利是弊,就由你自行判断吧。