浅谈手工杀毒

21 December 2013: 很多年前写的文章了,现在(2013-12-21)换Ghost所以又打开来。现在win7的角度而言,文中的绝大部分内容都已经过时。很多软件也都已经物是人非,比如360俨然就是流氓...win7开启UAT的情况下已经足够安全,如果保持良好的上网习惯,其实裸奔基本不成问题~


这是一篇已经发布了1年零4个月的文章(最初发布在经典论坛),所以很多内容已经变得很过时。之所以仍然把它抄回自己博客,完全是出于一种初次认真撰写帖子的回忆。那时自己还没毕业,想法和做法都很稚嫩,但是我仍记得那时的热情。

现在越发觉得发帖和撰写文章的不易。一篇思路明晰的技术文章,往往需要作者花上数小时撰写,更不用说在那之前,花上数十倍甚至是百倍的时间来融汇贯通。现在,每每从他人处有所收获,就必然会在留言档里表示感谢。现在,也几乎不再转载,除非是翻译,或者是一些匿名的思考。相对的,更愿意放上一个链接指回原文。

这些都让我再次回想起这篇《浅谈手工杀毒》。现在看来,可能只是肤浅而过时地讨论了怎么使用工具查找和删除病毒,但我无法忘记,一年半前,自己努力地聚合自己全部的但仍然显得苍白的关于病毒的知识,收集起那些截取的和文章有关的偶发遇到病毒的图片,然后理成一篇帖子。

原文

在写主题之前,先写些题外话。

计算机安全,关键在“防”,所以平常所做的防护以及备份工作是最重要的!

系统安全,方法有很多:影子系统、虚拟机、沙箱...但很多时候真的没有必要。保持良好的上网习惯和用机习惯,做好适当的备份就可以了。所以这里不讨论那些虚拟技术,主要是真实系统中的一些问题。虽然谈的是手工杀毒,但还是要列举一下平常会用到的可能有关的一些东西: ——360,卡卡,超级兔子,window清理助手,超级巡警,黄山IE修复,恶意软件清理助手......虽然并不讨论,但是这些日常所用到过的东西很有帮助。

对于杀毒软件的优劣没什么多评判的,主流我几乎都算是用过一遍了,也只是觉得各有所长。对于防御,最重要的无非还是补丁和好的习惯,手工只是辅助,杀毒软件仍然只是辅助吧。

下面是一般处理的方式(一层进一层地处理):

  1. 安全模式下全盘查杀。
  2. 将硬盘挂接到其它机器上全盘查杀。
  3. 重装系统后,仅操作桌面的情况下,安装杀毒软件全盘查杀。

依靠杀毒软件是对的,因为手工来杀意味着麻烦和很可能的失败,但是完全交给杀毒软件也不妥当。在病毒成功干扰杀毒软件之后,我们就要手工尽可能去排除干扰。一旦病毒进来了,难说病毒不会把杀毒软件先干掉。即使不用,了解下也没有坏处。

进入手工杀毒的主题。

当中毒之后,第一步,就是断网,并且千万不能系统重启(即使重启也不要正常重启)。

中毒后的症状现在也出奇的有一致性,干扰如360这类安全工具,禁用任务管理器等等。平时多注意任务管理器多注意进程,熟悉系统盘里的文件,以及文件的修改时间,会为手工杀毒带来方便,第一时间知道中毒,第一时间划定可疑范围。在杀毒里最开始也是最重要的一步,就是干掉病毒的进程。这就涉及到很多工具。没有这些工具,手工杀毒根本无从谈起。

首先是我们平时用的最多的任务管理器。用Ctrl+Shift+ESC调出(似乎平时人们都更喜欢Ctrl+Alt+Delete)。最大的缺点是不能同时结束两个以上的进程,而且可以说一直是病毒的首要目标,功能比较鸡肋。但是通常可以是一个信号灯,一旦其失效,就要考虑是不是中毒了~

我强烈推荐Sysinternals的Process Explorer和Process Monitor,因为这两个软件实在是太好了。自从Winternals被微软收购后,Sysinternals也被并入微软名下,所以其工具对于windows系统的支持非常好。

Process Explorer可以完全取代系统自带的鸡肋般的taskmanager,提供的功能之强,使得这款软件历经多年仍然难有出其右者。对于进程信息的提供真是应有尽有了,详细而透彻。虽然近一年时间似乎也逐渐成为病毒屏蔽目标之一,但是强大功能和实用性,我一直无法放弃使用。按Ctrl+H,还可以切换到Handler视图进行更加高级的操作。

早些时候使用process explorer可以说是百试百灵的,可以逃脱的病毒并不多,现在情况就差很多了。下面是我以前碰到的一个例子:U盘上总是会被写上一个文件,文件大小是655k,删除之后过会又会重建。在任务管理器中看不出什么问题,但是在process explorer下却是一目了然。有一个进程作为用户进程居然没有父进程,看其行为,居然每隔一定时间就有一次IO操作,大小刚好也是655k。于是找到位置,删除之。同时用Process Monitor追踪了一下找到其他一些文件删除,系统恢复。可以说杀的并不完整,但是病毒已经无效化了。

Process Monitor实际上是对进程的文件系统和注册表调用的监视。对于特定进程可以完全跟踪文件读写和注册表的读写,这对于排查病毒极为有用。同时也提供了一个进程查看器,其虽然不如专门的进程查看器process explorer强大,却也十分实用,特别是存活时间可以说是一目了然。

在熊猫烧香肆虐的时候,可以说是IceSword大显神威的时候。对于这款软件就不多说了,到了1.22后软件作者就没有再更新了,功能之强大也是沿用至今的利器。但是我一直是用不好的,因为自从用起Sysinternals的工具后,用冰刃的时候就少了很多。强大的工具,要小心使用,不然会危及系统。

也许以上我都是在介绍软件,但是事实就是这样。我们必须借助软件工具找到病毒进程,找到病毒位置。其实很有意思,杀毒的大部分时间都是花在寻找病毒之上的,不论是杀毒软件,还是手工处理。很多时候也许没有这么多工具可用,那么就只能考虑CMD了。运行中输入cmd进入命令行,命令tasklist可以显示当前进程信息,而命令taskkill则可以杀掉指定PID的进程。详细的可以键入tasklist /?看帮助,说明和用法都很详细。另外记得还有个tskill,和一个ntsd,记不怎么清楚了,我不常用。

常常还用一些辅助软件,因为觉得很多时候工具都是不够用的。比如一个网络工具——Tcpview,可以查看网络信息和链接,这对于系统诊断也是相当有效。看看哪个进程在做坏事吧,这个工具总是可以给我带来惊喜,尽管它不仅仅可以用于查毒。

与之对应的是,CMD也是又命令可以达到类似效果的,但是比较麻烦。命令netstat,并配合其参数也可以有比较好的效果。

对于这些工具,用着用着就会上手的。即使不精通的话,时间长了观察熟了抓毒就越快越准了。所以我不打算再讲简单用法了,使用这些工具仅仅只需要一些计算机的知识,或者说想要做高级一点的操作,需要的是编程方面的储备,特别是操作系统那一块。

病毒侵入计算机后,通常都会实现自启动。找到并清除其自启动项将极大的限制其危害。通常最简单的方法是系统自带的“系统配置实用程序”。在运行里输入msconfig回车,在启动标签里,显示了一部分的系统启动项目,通过简单的勾选可以选择要启动的项目。然而对于系统本身来说,这里没有一个启动项是必须的,可以全部去掉也没什么关系。通常的做法是保留ctfmon(系统输入法),选择保留其他的自己的程序。

更加多的启动项就要到注册表里寻找了。运行regedit启动注册表编辑器,查找定位到一些启动位置看看是否又异常。以比较常见的位置来说,HKEYLOCALMACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\下的Run、RunOnce、RunOnceEx、RunOnce\Setup、RunServices、RunServicesOnce以及HKEYCURRENTUSER分支下对应的这些位置,都可以被利用,其中又尤以Run下的改动最为常见。事实上msconfig所列出的也就是注册表里的东西。另外还有HKEYLOCALMACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run及HKEYCURRENTUSER对应位置等,网上搜索应可以找到一些更加偏的位置,虽然同样可以利用,但是通常比较少见。而对于“C:\Documents and Settings\用户名\开始菜单\程序\启动”里的所有快捷方式,系统会自动启动。这可以方便的先自己希望自启动的程序。此位置并不常被利用,但还是要留意下。更详细的启动项位置关系可以google下,知道了启动的顺序、作用可以更清楚地了解这个过程,在此不再复述。 对于可疑的自启动项,可以直接删除。并且还要对注册表全面关键字搜索,直接确定的就删除,无法确定的就上网查找信息。而在修改之前,对于犹如系统数据库般的注册表,同样要本着备份的思想。备份的方法是在注册表编辑器里右击要备份的分支,然后“导出”。现在形形色色注册表备份工具,也给注册表的备份和恢复提供了便利。

运行services.msc可以启动系统服务配置。如果病毒成功的获取了系统权限,成功的注册成了系统服务,那么这里也是不能放过的。通常在这里优化系统的服务可以减少必要的进程从而达到优化系统的目的。这些服务设置为自动则会在开机时自启动,设置为手动则是在必要是调用启动。对于危险项(比如Remote Registry)则通常是禁用的。

病毒注册成服务后,有些很明显,没有描述启动位置也很可疑,有些则会伪装。下图是我以前遇到过的一个例子,这让人想起了进程里的伪装,虽然拙劣但是用心良苦。

修改服务时,最好也做好备份,可以导出注册表对应分支HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Services。

还有一个地方值得一看,那就是启动/关机脚本。运行gpedit.msc启动组策略编辑器,在位于用户配置-Windows设置-脚本(登录/注销)位置,在这里设置的脚本将会在登录或注销自动执行。

但是很多时候处理问题并不是这么复杂,使用集成工具可以大大简化这些操作。我用的是功能强大的Autoruns(呵呵,又是一个Sysinternals的东西)。这个工具把系统的启动项统统笼络在一个界面里提供管理和查询,有用的描述和映像路径帮助我们找出可疑文件。当然,工具越是强大也就越是危险,以前我还在琢磨Autoruns的使用的时候就搞的系统崩溃了,以后用的时候格外小心...

很多系统优化工具也提供启动项的管理,包括360在内的很多软件的这种功能也很好用。但是关键之一就是中毒之后,360很多时候都不能用(当然也可以选择修360),那个时候就是有什么能用就用什么的境地了,多几种方法绝对有好处。

说完了自启动,下面就要杀毒了。其实所谓的杀毒或者说删除是在是杀毒过程中的一小部分。通过上面的方法——不论是在进程中还是启动项里查到或者是跟踪得到的位置信息(总之寻到蛛丝马迹是上面的主要任务),现在就是找到那个位置,把病毒delete。直接删除,很少可以成功,即使删除成功,病毒也大多不会终结。

无法删除,不管是由于进程没有清理完整,或者驱动级病毒的文件保护以及系统进程的注入等都会导致这种情况。借助于Unlocker这种解除锁定的工具

再配合如文件粉碎机或者文件强行删除工具强制删除,效果较好。同时在安全模式下操作可以保证成功率,尽管很多时候安全模式都被破坏,但是应该尽可能地使用安全模式。实在无法解决只能诉诸于DOS,或者WinPE,系统之上的系统可以干掉所有非底层病毒。DOS下相对操作较为繁琐,PE系统则易用很多,许多PE系统还提供很多有用的工具。但是关于删除,我想我还又别的思路,那就是在定位病毒文件磁盘扇区后,强制使用MHDD调硬盘直接把那个地方erase掉!对此我尝试过,但是步骤显得太繁杂,还不如纯DOS,所以只能说是一种噱头。

另一个问题是如何揪出病毒的残余?对此我个人的方法十分有限,除了盲目地跟踪加载项(很少有人对此有兴趣并且擅长),以及没头没脑地使用各种工具寻找蛛丝马迹外,没有很好的方法。平常还用一种手段,就是编写一小段脚本找出系统可疑的近期创建的文件。如果是在中毒后立即发现并查杀的话,此方法尤其奏效。但是局限于程序员和对系统环境熟悉并且敏感的人。所以说,手工杀毒,并非是推荐方法。

最后的步骤,我想说,让杀毒软件来解决吧......虽然本文写的是手工,但是作为非专业杀毒的区区网管,我感觉自己所能做的实在是很有限的。尽可能地阻止病毒的进程和启动,解除病毒体对于杀毒软件的干扰,我认为是作为手工杀毒的主要任务,这是由于我个人能力比较有限。虽然已经过了牛人辈出的时代,但是牛人的数量却是惊人,如果是他们的话,一定可以妙手摘毒的吧。

本文的最后,我再写一些个人感想和建议。

感想

  1. 重装系统作为最后的手段,效果其实最好。如果不是有什么麻烦的情况的话,不如直接重装。因为手工杀个把病毒的时间通常超过重装,而且面临失败的危险从而浪费了宝贵的时间(当然喜欢研究就不一样了)。必须权衡时间上的利弊,干脆重装,然后在不点击盘符的情况下,安装杀毒软件后全盘扫描。
  2. 备份,还是备份!如果数据珍贵,千万不可偷懒。刻盘很安全,磁盘的话也要分开放置。所谓真正的数据备份,必然是存储介质相分离的。

建议

  1. 及时打上所有系统必要补丁,使用FF浏览网页,并及时清理临时文件夹,将大大减少中毒几率。
  2. 平时使用时开一个低权限的用户,做什么操作使用什么权限,将大大降低中毒后的危害。麻烦和安全通常唱反调~
  3. 保持系统精简高效的运行,将会在最快时间发现中毒症状,使破坏和感染都减到最低的同时方便查杀。
  4. 备份,再提备份!无论是windows自带的还原(虽然有点鸡肋)还是ghost的快速犀利,甚至是动用veritas等等,总之备份是计算机使用者最好的习惯!

关于杀毒软件:

  1. 杀毒软件的备份通常可以有磁盘备份和增量备份,请经常备份杀毒软件的病毒库
  2. 通常杀毒软件可以全部复制到其它文件夹,等重装软件后在全部复制回来,是比较通用的备份方式
  3. 个人推荐avast,理由是免费+好使......
  4. 最后,定期处理木马,为此需要有一款专门的反木马软件。

评论加载中...

Disqus提供评论支持,如果评论长时间未加载,请飞跃长城。