如何一次性干掉牛皮癣般的木马
来源:中国电子政务网 更新时间:2012-04-13

 问:现在的木马种类繁多,而且有些木马十分顽固,根本没法杀干净。有什么方法能有效的防止木马和清除它们的方法吗?

  答:

  什么是木马

  你所说的木马,也就是一种能潜伏在受害者计算机里,并且秘密开放一个甚至多个数据传输通道的远程控制程序,一般由两部分组成:客户端(Client)和服务器端(Server),客户端也称为控制端。

  木马的传播感染其实指的就是服务器端,入侵者必须通过各种手段把服务器端程序传送给受害者运行,才能达到木马传播的目的。当服务器端被受害者计算机执行时,便将自身复制到系统目录,并把运行代码加入系统启动时会自动调用的区域里,借以达到跟随系统启动而运行,这一区域通常称为“启动项”。当木马完成这部分操作后,便进入潜伏期——偷偷开放系统端口,等待入侵者连接。

  阻止木马运行——查杀更彻底

  任何操作系统都会在启动时自动运行一些程序,用以初始化系统环境或额外功能等,这些被允许跟随系统启动而运行的程序被放置在专门的区域里供系统启动时加载运行,这些区域就是“启动项”,不同的系统提供的“启动项”数量也不同,对于Win9x来说,它提供了至少5个“启动项”:DOS环境下的Autoexec.bat、Config.sys,Windows环境下的“启动”程序组、注册表的2个Run项和1个RunServices项,分别是:

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

  HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices

  到了2000/XP系统时代,DOS环境被取消,却新增了一种称之为“服务”的启动区域,注册表也在保持原项目不变的基础上增加了2个“启动项”:

  项目 键名

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows AppInit_DLLs

  HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows run

  这么多的启动入口,木马自然不会放过,于是我们经常在一些计算机的启动项里发现陌生的程序名,这时候就只能交由你或者病毒防火墙来判断了,毕竟系统自身会在这里放置一些必要的初始化程序,还有一些正常工具,包括病毒防火墙和网络防火墙,它们也必须通过启动项来实现跟随系统启动。

此外还有一种不需要通过启动项也能达到跟随系统启动的卑劣手法,那就是“系统路径遍历优先级欺骗”,Windows系统搜寻一个不带路径信息的文件时遵循一种“从外到里”的规则,它会由系统所在盘符的根目录开始向系统目录深处递进查找,而不是精确定位的,这就意味着,如果有两个同样名称的文件分别放在C:\和C:\Windows下,Windows会执行C:\下的程序,而不是C:\Windows下的。这样的搜寻逻辑就给入侵者提供了一个机会,木马可以把自己改为系统启动时必定会调用的某个文件名,并复制到比原文件要浅一级以上的目录里,Windows就会想当然的执行了木马程序,系统的噩梦就此拉开序幕。这种手法常被用于“internat.exe”,因为无论哪个Windows版本的启动项里,它都是没有设置路径的。

  要提防这种占用启动项而做到自动运行的木马,用户必须了解自己机器里所有正常的启动项信息,才能知道木马有没有混进来。至于利用系统路径漏洞的木马,则只能靠用户自己的细心了。

  根除木马——文件并联型木马的查杀

  某些用户经常会很郁闷,自己明明已经删除了木马文件和相应的启动项,可是不知道什么时候它自己又原封不动的回来了,这还不算,更悲惨的是有时候杀掉某个木马后,系统也出了故障:所有应用程序都打不开了。这时候,如果用户对计算机技术的了解仅限于使用杀毒软件,那可只能哭哭啼啼的重装系统了!

  为什么会这样?难道这种木马还恶意修改了系统核心?其实答案很简单,因为这种木马修改了应用程序(EXE文件)的并联方式。

  什么是“并联方式”呢?在Windows系统里,文件的打开操作是通过注册表内相应键值指定的应用程序来执行的,这个部分位于注册表的“HKEY_CLASSES_ROOT”主键内,当系统收到一个文件名请求时,会以它的后缀名为依据在这里识别文件类型,进而调用相应的程序打开。而应用程序自身也被视为一个文件,它也属于一种文件类型,同样可以用其他方式开启,只不过Windows设置它的调用程序为“"%1" %*”,让系统内核理解为“可执行请求”,它就会为使用这种打开方式的文件创建进程,最终文件就被加载执行了,如果有另外的程序更改了这个键值,Windows就会调用那个指定的文件来开启它。一些木马程序把EXE后缀名对应的exefile类型的“打开方式”改成了“木马程序 "%1" %*”,运行程序时系统就会先为“木马程序”创建进程,把紧跟着的文件名作为参数传递给它执行,于是在我们看来程序被正常启动了。因为木马程序被作为所有EXE文件的调用程序,使得它可以长期驻留内存,每次都能恢复自身文件,所以在一般用户看来,这个木马就做到了“永生不死”。然而一旦木马程序被删除,Windows就会找不到相应的调用程序,于是正常程序就无法执行了,这就是所谓的“所有程序都无法运行”的情况来源,并不是木马更改了系统核心,更没必要因此重装整个系统。

根除这种木马的最简单方法只需要查看EXE文件的打开方式被指向了什么程序,立即停止这个程序的进程,如果它还产生了其他木马文件的话,也一起停止,然后在保持注册表编辑器开启着的情况下(否则你的所有程序都会打不开了)删除掉所有木马文件,把exefile的“打开方式”项(HKEY_CLASSES_ROOT\exefile\shell\open\command)改回原来的“”%1” %*”即可。

  如果删除木马前忘记把并联方式改回来,就会发现程序打不开了,这时候不要着急,如果你是Win9x用户,请使用“外壳替换大法”:重启后按F8进入启动菜单选择MS-DOS模式,把Explorer.exe随便改个名字,再把REGEDIT.EXE改名为Explorer.exe,再次重启后会发现进入Windows只剩下一个注册表编辑器了,赶快把并联方式改回来吧!重启后别忘记恢复以前的Explorer.exe。

  对于Win2000/XP用户而言,这个操作更简单了,只要在开机时按F8进入启动菜单,选“命令提示符的安全模式”,系统就会自动调用命令提示符界面作为外壳,直接在里面输入REGEDIT即可打开注册表编辑器!XP用户甚至不需要重启,直接在“打开方式”里浏览到CMD.EXE就能打开“命令提示符”界面运行注册表编辑器REGEDIT.EXE了