扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
1.通过查看注册表和启动菜单中程序自动启动清单来查毒
查毒一般就是从随系统一起启动的程序中来找
下面列出几处常见的加载程序的位置:
QUOTE:
首先查看开始菜单-〉程序-〉启动中的项目,具体判断办法和下面一样。
然后,在运行中输入regedit,开启注册表编辑器。下面列出的就是一般程序会自动启动的键值路径
QUOTE:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
这是最常检查的地方,你在这里会看到很多常用程序都是通过在此注册达到每次启动加载的目的,包括各类流氓软件,如3721。
在里面常见的程序一般都是在Program Files目录下的,比如你安装的杀毒软件,QQ等,如果发现只有文件名,或者在windows或者windows\system32下面项目,那么很有可能是病毒
QUOTE:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
和上面类似,不过这个加载清单的作用范围仅仅是当前登录的用户(就是你)。也就是说如果winXP有多个用户帐户,那么他们登录进系统是这里面出现的程序未必也会自动启动。正因为如此,病毒不太会出现在其中
QUOTE:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
这个目录下只要注意shell这个项目,一般正常情况它的值是:
QUOTE:
shell 值:Explorer.exe
如果出现比如explorer.exe hook.exe这样的值,那么后面的那个hook.exe很可能就是病毒。
凡是出现在explorer.exe 后面的文件名,它所对应的文件会在每次explorer.exe被启动的时候也一起被启动出来。也就是说如果hook.exe是病毒,那么每次你打开“我的电脑”或者“资源管理器”,或者在你的任务栏强迫关闭又重启的时候,hook.exe也会运行一次。所以即使hook.exe不是病毒,那也不是什么正常的程序,因为它很消耗系统资源。
QUOTE:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
这里只要注意:AppInit_DLLs这个项目,正常情况下它的值应该是空的。这个项目表示每当一个程序启动的时候,AppInit_DLLs中表示的dll文件就会注入到这个程序里面去启动
举个例子:如果AppInit_DLLs=MyHook.dll,那么在登录windows后,系统为我加载了qq.exe,那么MyHook.dll也会出现在其中。dll文件虽然不能自己运行,但等他注入到应用程序中,其中代码还是会被执行,一些qq密码盗窃木马就是用上面的原理工作的。
由于dll是寄生在exe中运行,在进程管理器中是看不到它的,所以这个注册表项要格外注意。
QUOTE:
推荐的工具: DEId.exe
这个程序一般是软件破解人员用的,其中有2个功能等会都会介绍到。
这里首先介绍用PEid来查看应用程序中加载的dll文件。
打开peid,选择主窗口的“任务查看器”,如图所以,上面和windows自带的进程管理器一样,显示的是每个进程的文件名,选取其中一个进程,就会在下面看到这个进程中所加载的dll文件。
可以看到explorer.exe中已经注入了FlashGet的一个插件,这个插件的作用是在IE中如果点击了一个下载链接,FlashGet会自动弹出来询问是否下载。这个过程就是通过注入了dll文件来监控的。
自然,如果注入了恶意的dll文件,那么自然会对程序乃至系统带来危害。
上面列出了注册表中常见的自动启动的程序清单位置,一般查毒的时候只需要对其中的项目进行检查。
一般而言,如果shell和AppInit_DLLs这两个项目与正常值不同的话,那么其中表示的文件一般就极有可能是病毒了。
对于Run目录下的文件,按照下面的原则来查毒:
如果项目的路径在Program Files下面,又能确认这是安装的一个软件,那么便可以排除是病毒:
QUOTE:
D:\Program Files\Intel\Wireless\Bin\ifrmewrk.exe /tf Intel PROSet/Wireless
比如这个项目,可以知道这是Intel无线网络管理工具的一部分,所以可以排除是病毒。
对于不含目录,只有文件名,如windowsKernel.exe,存在于windows各类目录下,如windows\_login.exe,windows\temp\tmp.exe,windows\system32\system32.exe这样的项目往往可以程度最高。
对于开头是rundll32.exe的项目,也应该引起重视,比如rundll32.exe systemhook.dll,不过注意的是,rundll32.exe是windows的一个系统程序,怀疑对象是后面的systemhook.dll。
1.1 如何判断是病毒
找到怀疑对象以后,在资源管理器中找到文件本身。这里要注意的是病毒往往是具有“隐藏、系统”属性的,windows默认是不显示具有这类属性的文件。所以要在资源管理器的“[工具]->[文件夹选项]->查看”中,选上
QUOTE:
显示系统文件夹内容
显示所有文件和文件夹
将
QUOTE:
隐藏受保护的系统文件
隐藏文件扩展名
的钩去除。
a.找到可以文件本身后,首先看其时候是具有隐藏属性:
图:可以从是否有是隐藏文件来区分病毒和正常文件
目前除非十分特殊的目的,比如防止用户修改,应用程序很少具有隐藏和系统属性,所以,如果怀疑的项目具有隐藏属性,一般就可以确定是病毒了。
b.通过“版本”信息来确定
在编写应用程序时,编写者往往会把程序的版本信息、版权信息附加在程序中,可以在应用程序的上按右键,察看属性来看到版本信息。
版本信息中往往指名了程序的用图,对于病毒而已,往往没有版本信息
图:regedit.exe的版本信息
图:伪装的病毒没有版本信息
c.是用PEiD查看应用程序签名
这里介绍的便是PEid的主要功能,exe、dll文件等程序文件均有一个统一的名字:PE文件,他们往往是由各类程序设计语言,比如C++/VB产生的,或者直接又人工汇编编写。
对于前者,各类程序设计语言生成的PE文件在其代码开始处的某些固定字节总是固定的,基于这样一个原理,可以来判断某个应用程序时什么编程语言编写的:
图:用Peid发现BitComet采用VC7编写
目前的技术:加壳,简单些说就是将原先的程序包裹起来(比如压缩起来),然后把负责解包的程序覆盖在这个应用程序的头部,这样以后运行这个程序时,实际上是先由解包程序恢复出原来的程序,然后再运行。
用于压缩程序的软件aspack、upx就是一种加壳程序,同样,也能用Peid检测:
采用aspack压缩的程序,peid会显示:
QUOTE:
ASPack 2.1 -> Alexey Solodovnikov
通常来说,目前常见的应用程序采用加壳程序的并不多见,但有一定例外,如金山词霸、CoralQQ。一些游戏为了减少空间,其主程序也可能会压缩加壳。
而常见得加壳软件有:安全软件、各类注册机、各类算号器、加壳软件本身以及病毒。这是因为这类程序往往需要通过网络传播,所以对体积有一定要求,同时目前加壳的目的除了压缩以外更重要的是能够保证程序不被反汇编,即起到加密保护作用。
对于病毒,它不但希望减少自身体积,也希望加密代码,防止分析出工作机制。所以,病毒程序被加壳的概率很大。可以通过peid提示文字,或者在扩展工具中检测是否加壳来判断。
也有极端的情况,就是病毒直接由编写者通过汇编编写,那么往往peid会无法获得信息,这样的情况也要地方。
不过采用peid分析的办法要求有一定的基本功底,所以对于大多数人来说仅仅作为参考。
1.2 如何删除已经确定了的病毒文件
如果确定一个文件是病毒,首先要做的是是用进程管理器将其关闭。
图:将病毒文件进程关闭
这样可以确保病毒停止运作,如果有很多病毒,务必将他们都停止了。
下一步便是把注册表中的对应项目删除,然后删除文件即可。
QUOTE:
对于无法终止进程的情况:
如果无法停止病毒进程,意味着病毒文件无法删除,同时即时在注册表中删除了对应项目,病毒也往往会重新添加一遍。
对于这样的情况,可以首先将病毒文件重命名,比如将hook.exe改外hook.ex_。这样的操作是可行的。病毒往往不会去监控自己的文件名是否更改,这样一来,在下次重启时,由于已经不存在hook.exe了,病毒就不会再加载,这样就可以放心的把注册表项目和文件删除了。
2.在系统服务中查毒
这是目前各类病毒和流氓软件的趋势,即病毒作为系统服务存在。这类病毒不会出现在上述的注册表和启动项目中,但这类病毒也会随开机自动启动,也拥有各大的权限。所以一般查毒必须检查系统服务。
系统服务是在windows系统中扮演核心功能的一类程序,比如开设web服务器的话,就会有IIS服务。
目前也有很多软件也有自己的服务程序,比如安装了Windows Live Messenger,会有“共 享 USN 杂 志 阅 读器 ”这个服务。目前的杀毒软件的核心监控程序也均是通过系统服务实现的。
自然,病毒注册为系统服务也不再少数,著名的木马“灰鸽子”便是一个系统服务。
QUOTE:
在[控制面板]-[管理工具]-服务中 可以查看所有注册的系统服务。
图:系统服务列表
QUOTE:
系统服务有3中启动类型:自动、手动和禁用。
自动类型的系统服务会在系统启动后立刻执行,手动类型的服务只有通过其他程序加载或者人工开启才能执行,而禁用类型的服务只有改变了他的启动类型才可能执行。
如果病毒注册成为系统服务,启动类型自然便是“自动”,同时如果目前处在中毒环境下,自然其运行状态为:已启动。
因而,可以首先列出自动启动类型的服务,然后通过查看其功能描述(病毒往往不写功能描述,或者会伪装)。然后查看这个服务的文件路径,再采用第一部分提到的判断病毒的办法来确定是否可能是病毒。
对于怀疑的病毒项目,可以双击他,在属性对话框中先将其停止,然后设为“已禁用”来关闭这个服务。
图:如果怀疑是病毒,可以将其关闭并禁用
作为系统服务,其运行能力完全可以通过系统来控制,所以一般将其设为禁用后便可,如果偷懒完全不用删除文件本身。但是如果想删除病毒本身,请务必按下面方法进行:
2.1 如何删除系统服务
如果想将一个怀疑是病毒的系统服务删除,并不是将服务关闭,删文件那么容易。首相要将其禁用。然后删除文件。不这样做的后果是,如果服务仍旧未自动启动类型,在下次启动windows时,由于无法找到这个要启动的服务程序,windows便认为系统便无法工作,于是会蓝屏。
删除了文件后,还需要将注册的服务项目删除,也就是在注册表中删除。这个过程可以用第3方工具来进行,也可以亲在在regedit中编辑。
系统服务对应的目录是:
QUOTE:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001(或者002\003,所有的都可能)\Services
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
然后再这2个目录下搜索病毒的文件名,将那整个项目删除即可,如果忘记了这2个目录,直接对整个注册表进行搜索也可,不过2处目录下的项目必须均删除。
这样服务列表中便不存在该服务了。
图:必须将项目的整个目录删除
3.采用msconfig简化查毒过程。
winXP用户可以在运行中输入msconfig工具来查看当前的系统服务、自动加载的程序,简化一定的步骤。不过对于注册表项目,shell和AppInit_DLLs并不能在其中看到!
可以利用msconfig来鉴别系统服务:
图:可以通过制造商来判断病毒
往往病毒编写者会忘记填写制造商名,所以对于没有制造商信息的服务要格外注意,不过即使制造商为microsoft,也不能排除伪造的可能。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。