有人曾经说过,了解了注册表就读懂了WIN系统,这句话是一点都不假的。那么,什么是注册表?注册表有什么功能?如何去修改注册表以达到最佳的效果?又如何来区分注册表里有用和无用甚至是危害的部分呢?
什么是注册表?在还是使用Dos和Win3.x操作系统的时代里,大部分的应用程序都采用了ini文件(初始化文件)来保存一些配置信息,如设置路径,环境变量等。system.ini和win.ini控制着所有windows和应用程序的特征和存取方法,它在少数的用户和少数应用程序的环境中工作的很好。随着应用程序的数目的不断增加和复杂性的日益增强,则需要在.ini文件中添加更多的参数项。这样下来,在一个变化的环境中,在应用程序安装到系统中后,每个人都会更改.ini文件。然而,几乎没有一个人在删除应用程序后删除.ini文件中的相关设置,所以system.ini和win.ini这个两个文件会变的越来越大。每次增加的内容会导致系统性能越来越慢,在每次应用程序的升级都出现类似的难题:升级后会增加更多的参数项但是从来不去掉旧的参数设置。而且还有一个明显的问题,一个.ini文件的最大尺寸是64KB。为了能够解决这个问题,软件商自己开始支持自己的.ini文件,然后指向特定的ini文件,这样下来多个.ini文件影响了系统正常的存取级别设置。
在windows操作系统序列里,system.ini和win.ini这两个文件包含了操作系统的所有控制功能和应用程序的信息,system.ini管理计算机硬件,win.ini管理桌面和应用程序。所有驱动、字体、设置和参数会保存在.ini文件中,任何新程序都会被记录在.ini文件里。这些记录会在程序代码中被引用。因为受win.ini和system.ini文件大小的限制,程序员添加辅助的.INI文件以用来控制更多的应用程序。举例来说,微软的Word有一个word.ini文件,它包含着选项、设置、缺省参数和其他关系到Word运行正常的信息。在system.ini和win.ini中只需要指出word.ini的路径和文件名即可。
为了解决相关的问题,微软公司于1995年正式推出了取代了WIN3.X操作系统的WIN95,从某中程度上来说,WIN95的出现是一个划时代的产物,因为Windows95第一次使用了“注册表”来配置和管理许多即插即用或者必备的硬件,以及临时调用或永久驻留的软件程序。这使得Windows95成为真正意义上的32位操作系统,具有了微机操作系统的五大基本功能。这也使得注册表这个东西第一次出现在了众人的视线中。
注册表最初被设计为一个应用程序的数据文件相关参考文件,最后扩展成对32位操作系统和应用程序包括了所有功能下的东西。注册表是一套控制操作系统外表和如何响应外来事件工作的文件。这些“事件”的范围从直接存取一个硬件设备到接口,如何响应特定用户到应用程序如何运行等。注册表因它的目的和性质变的很复杂,它被设计为专门的针对32位应用程序工作,文件的大小被限制在大约40MB。利用一个功能强大的注册表数据库来统一集中地管理系统硬件设施,软件配置等信息,从而方便了管理,增强了系统的稳定性。
由此可见,注册表(Registry)是Windows95以上版本操作系统中硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”;也可以说是一个非常巨大的树状分层结构的数据库系统。它记录了用户安装在机器上的软件和每个程序的相互关联信息;它包含了计算机的硬件配置,包括自动配置的即插即用的设备和已有的各种设备说明、状态属性以及各种状态信息和数据。
好了,说完了注册表和它的发展历程后,我们来关心一下它的功能。注册表的一个好处是添加或删除程序功能,这是开始菜单中控制面板功能的一部分。你安装软件的时候,在注册表中做了一个记录,所以在添加或删除程序中就会作为一个专门列表的一部分出现。注册表保存在你的硬盘的几个文件当中,但访问和修改它们的唯一途径是使用注册表编辑器程序。要访问它,点击开始按钮,然后点击运行。在出现的对话框中输入regedit并按Enter键。这会进入注册表编辑器,你现在就看到了注册表。
注册表组织得更像磁盘上的文件,如果你曾经在Windows浏览器中使用过文件夹视图的话,你会根据很熟悉。然而在注册表中,这些文件夹被称为键。要打开某个键,只需点击它旁边的小加号(+)。然后你会看到每个键下包含更多的键,称为子键或值。值是指各种不同键的单独设置,因此是可自定义的。它们在注册表窗口左侧以名称排列,它们还说明了包含数据的类型以及数据本身。不用担心使用的是哪种数据类型,因为这对数据本身是明显的,或者在编辑过程中会作出解释。这些数以千计的键根据逻辑进行排列,在你第一次看到注册表的时候可能会使你感觉无从下手。要把头绪理清楚,首先要知道有五个根键以及注册表的基本组成结构。
在这里需要提一下的是,随着使用时间以及大量系统产生的垃圾影响,注册表会变的越来越大,这并不是一个好现象,因为注册表越庞大,你的计算机的运行就会变得越慢,所以很多新手朋友在问到为什么自己的计算机越来越慢的时候,很多情况下就是因为你的注册表内无用垃圾太多,所以导致自己的系统运行越来越缓慢,因此,经常的给注册表“瘦瘦身”是很有必要的。当然,现在很多第三方软件,例如超级兔子、WINDOWS优化大师等系统整理软件都附带了注册表垃圾清除功能,建议新手朋友们务必下一个,经常优化自己的注册表和系统,多研究研究里面的一些配置无论是对计算机的安全和运行都会很有帮助。
下面我们就根据图2来逐一解释:
在windowsNT/2000/XP中,如果用windows自带的编辑器打开的时候,只能看到五个,还有一个隐藏的根键:HKEY_PERFOR_MANCE_DATA。
*HKEY_CLASS_ROOT
记录windows操作系统中所有数据文件的格式和关联信息,主要记录不同文件的文件名后缀和与之对应的应用程序其下子键可分为两类:一类是已经注册的各类文件的扩展名,这类子键前面都带有一个".";另一类是各类文件类型有关信息。
*HKEY_CURRENT_USER
此根根键包含当前登录用户的用户配置文件信息,这些信息保证不同的用户登录计算机时,使用自己的修改化设置,例如自己定义的墙纸,自己的收件箱,自己的安全访问权限。
*HKEY_LOCAL_MACHINE
此根键包含了当前计算机的配置灵气,包括所安装的硬件以软件设置。这些信息是为所有的用户登录系统服务的。这是事个注册表中最庞大也是最重要的根键!
*HKEY_USERS
HKEY_USERS根键包括默认用户的信息(DEFAULT子键)和所有以前登陆用户的信息。
*HKEY_CURRENT_CONFIG
此根键实际上是HKDY_LOCAL_MACHINE/CONFIG/0001分支下的数据完全一样。
*HKEY_DYN_DATA根键
这个键保存每次系统启动时,创建的系统配置和当前性能信息。这个根键只存在于windows9X中
*HKEY_PERFORMANCE_DATA
在windowsNT/2000/XP注册表中虽然没有HKEY_DYN_DAT键,但是它却隐藏了一个名为"HKEY_PERFORMANCE_DATA的键。所有系统中的动态信息都是存放在此子键中,系统自带的注册表编辑器无法看到这些键。只可以用专门的程序来查看此键,比如使用性能监视器。
下面再谈谈注册表的修改问题。在这里提醒大家一句,如果你没有把握,切记在修改之前,一定要备份注册表。修改注册表,除了用微软自带的编辑器——regedit.exe外,还可以通过第三方软件进行修改,或者利用手工写.reg注册表文件。有没有试过自己写注册表文件?不用任何修改器?直接把写好的注册表文件——.reg倒入注册表?呵呵,这项技巧并不需要每个人都知道了,你只要知道上面的两个就可以了。当然,如果你是电脑迷,我们赞成深入学习。
现在我们来看看.reg文件的结构如何。
.reg文件的标准格式如下:
REGEDIT4
[路径](注意用大小写)
"键名"="键值"(针对字符串型键值)
"键名"=hex:键值(针对二进制型键值)
"键名"=dword:键值(针对DWORD键值)
括号里面的内容为本人的注释,写文件的时候就不需要那些小括号了,其他上面所列的都必须包括。注意引号输入时不能用中文输入的引号,必须用英文的引号,否则会出错。
那么,怎么写.reg文件呢?我们需要一个文本编辑器,用windows的记事本就可以了。单击鼠标右键,选择新建文本文档,然后在生成的文本文件里输入上面规格的内容就可以了,最后,选择另存为,输入你想要的文件名+.reg保存即可。比如你要生成test.reg,输入test.reg保存即可,你可以看到生成了一个带图标的test.reg.双击运行这个test.reg文件就能相应的修改注册表了,系统会提示“是否导入注册表”之类的信息,确定就可以了。OK,我们可以手动写注册表了。先别急,我们来看看一个标准范例,这是从注册表里面导出来的,大家慢慢学习,跟着模仿一下就能写出自己的.reg文件了。
REGEDIT4
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer]
"NoRun"=dword:00000000
"NoRecentDocsMenu"=hex:01,00,00,00
"NoFavoritesMenu"=dword:00000000
"user"="sundrink"
大家可以看到,dword是16进制,hex是二进制,字符串则可以直接赋值。只要将上面的内容复制保存到文本文档里,然后另存为你想要的.reg文件运行就可以了。呵呵,原来也不是很难嘛,耐心一点就可以了。当然,你要模仿,要自己动手写.reg文件,用记事本就可以了。
说多两句,为什么要手写注册表?因为有时候我们会碰到一台锁定regedit的机子,有什么办法解开呢?呵呵,如果你会手写注册表文件的话,那很简单了......大家发挥想象吧!用不了很长时间的。
以上的手动修改的方法只针对那些电脑爱者来说的,一般新手朋友最好还是老实的用第三方软件里自带的方法来修改,这样既方便又能看的清楚,不过还是建议大家在修改前一定要做好备份工作。好,关于注册表的修改问题就说到这里了,网上有很多类似的教程,比如提高网速的,优化性能的都有很多,大家可以勤用google搜索一下,自己学习。其实电脑很多东西都是自己摸索出来的,只有自己勤去摸索,你的计算机水平才能得到真正的提高。闲话不再多说,我们继续。
现在我们说到了注册表的安全问题。从计算机病毒的发展趋势来看,蠕虫和木马类的病毒越来越多。与普通感染可执行文件的文件型病毒不同,此类程序通常不感染正常的系统文件,而是将自身作为系统的一部分安装到系统中。相对来说,此类病毒的隐蔽性更强一些,更不容易被使用者发觉。但是无论什么样的病毒程序在感染系统时都会留下一些蛛丝马迹。在此我们总结一下各种病毒可能会更改的地方,以便能够更快速地找到它们。
一、更改系统的相关配置文件。这种情况主要是针对95/98系统。
病毒可能会更改autoexec.bat,只要在其中加入执行病毒程序文件的语句即可在系统启动时自动激活病毒。*更改drive:windowswin.ini或者system.ini文件。病毒通常会在win.ini的“run=”后面加入病毒自身的文件名,或者在system.ini文件中将“shell=”更改。
二、更改注册表健值。
目前,只要新出的蠕虫/特洛伊类病毒一般都有修改系统注册表的动作。它们修改的位置一般有以下几个地方:
HKLMSoftwareMicrosoftWindowsCurrentVersionRunOnce
说明:在系统启动时自动执行的程序
HKLMSoftwareMicrosoftWindowsCurrentVersionRunServices
说明:在系统启动时自动执行的系统服务程序
HKLMSoftwareMicrosoftWindowsCurrentVersionRun
说明:在系统启动时自动执行的程序,这是病毒最有可能修改/添加的地方。例如:Win32.Swen.B病毒将增加:HKLMSoftwareMicrosoftWindowsCurrentVersionRunucfzyojza="cxsgrhcl.exeautorun"
HKEY_CLASSES_ROOTexefileshellopencommand
说明:此键值能使病毒在用户运行任何EXE程序时被运行,以此类推,..txtfile..或者..comfile..也可被更改,以便实现病毒自动运行的功能。
另外,有些健值还可能被利用来实现比较特别的功能:
有些病毒会通过修改下面的键值来阻止用户查看和修改注册表:
HKCUSoftwareMicrosoftWindowsCurrentVersionPolicies
SystemDisableRegistryTools=
为了阻止用户利用.REG文件修改注册表键值,以下键值也会被修改来显示一个内存访问错误窗口
例如:Win32.Swen.B病毒会将缺省健值修改为:
HKCRregfileshellopencommand(Default)="cxsgrhcl.exeshowerror"
通过对以上地方的修改,病毒程序主要达到的目的是在系统启动或者程序运行过程中能够自动被执行,已达到自动激活的目的。
总结完了各种木马、病毒可能会更改的地方,下面就接着谈防御问题了。当然,在谈之前继续一贯强调的备份注册表,说实话,应对越来越厉害的木马、病毒们,光靠现有的几种办法是远远不够的,备份一个“彻底干净”的注册表就是重中之重。备份的方法依然很多,网上铺天盖地都有,这里也不再多做阐述,google一下就可以了。
安全隐患:在Windows2000/XP系统中,默认Messenger服务处于启动状态,不怀好意者可通过“netsend”指令向目标计算机发送信息。目标计算机会不时地收到他人发来的骚扰信息,严重影响正常使用。
解决方法:首先打开注册表编辑器。对于系统服务来说,我们可以通过注册表中“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices”项下的各个选项来进行管理,其中的每个子键就是系统中对应的“服务”,如“Messenger”服务对应的子键是“Messenger”。我们只要找到Messenger项下的START键值,将该值修改为4即可。这样该服务就会被禁用,用户就再也不会受到“信”骚扰了。
安全隐患:如果黑客连接到了我们的计算机,而且计算机启用了远程注册表服务(RemoteRegistry),那么黑客就可远程设置注册表中的服务,因此远程注册表服务需要特别保护。
解决方法:我们可将远程注册表服务(RemoteRegistry)的启动方式设置为禁用。不过,黑客在入侵我们的计算机后,仍然可以通过简单的操作将该服务从“禁用”转换为“自动启动”。因此我们有必要将该服务删除。
找到注册表中“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices”下的RemoteRegistry项,右键点击该项选择“删除”(图1),将该项删除后就无法启动该服务了。
在删除之前,一定要将该项信息导出并保存。想使用该服务时,只要将已保存的注册表文件导入即可。
安全隐患:大家都知道在Windows2000/XP/2003中,系统默认开启了一些“共享”,它们是IPC$、c$、d$、e$和admin$。很多黑客和病毒都是通过这个默认共享入侵操作系统的。
解决方法:要防范IPC$攻击应该将注册表中“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLSA”的RestrictAnonymous项设置为“1”,这样就可以禁止IPC$的连接。
对于c$、d$和admin$等类型的默认共享则需要在注册表中找到“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters”项。如果系统为Windows2000Server或Windows2003,则要在该项中添加键值“AutoShareServer”(类型为“REG_DWORD”,值为“0”)。如果系统为Windows2000PRO,则应在该项中添加键值“AutoShareWks”(类型为“REG_DWORD”,值为“0”)。
安全隐患:在Windows系统运行出错的时候,系统内部有一个DR.WATSON程序会自动将系统调用的隐私信息保存下来。隐私信息将保存在user.dmp和drwtsn32.log文件中。攻击者可以通过破解这个程序而了解系统的隐私信息。因此我们要阻止该程序将信息泄露出去。
解决方法:找到“HKEY_LOACL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionAeDebug”,将AUTO键值设置为0,现在DR.WATSON就不会记录系统运行时的出错信息了。同时,依次点击“DocumentsandSettings→ALLUsers→Documents→drwatson”,找到user.dmp和drwtsn32.log文件并删除。删除这两个文件的目的是将DR.WATSON以前保存的隐私信息删除。
提示:如果已经禁止了DR.WATSON程序的运行,则不会找到“drwatson”文件夹以及user.dmp和drwtsn32.log这两个文件。
安全隐患:不少木马和病毒都是通过在网页中隐藏恶意ActiveX控件的方法来私自运行系统中的程序,从而达到破坏本地系统的目的。为了保证系统安全,我们应该阻止ActiveX控件私自运行程序。
解决方法:ActiveX控件是通过调用Windowsscriptinghost组件的方式运行程序的,所以我们可以先删除“system32”目录下的wshom.ocx文件,这样ActiveX控件就不能调用Windowsscriptinghost了。然后,在注册表中找到“HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}”,将该项删除。通过以上操作,ActiveX控件就再也无法私自调用脚本程序了。
安全隐患:Windows2000的页面交换文件也和上文提到的DR.WATSON程序一样经常成为黑客攻击的对象,因为页面文件有可能泄露一些原本在内存中后来却转到硬盘中的信息。毕竟黑客不太容易查看内存中的信息,而硬盘中的信息则极易被获取。
解决方法:找到“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSessionManagerMemoryManagement”,将其下的ClearPageFileAtShutdown项目的值设置为1(图2)。
这样,每当重新启动后,系统都会将页面文件删除,从而有效防止信息外泄。
安全隐患:使用Windows系统冲浪时,常会遇到密码信息被系统自动记录的情况,以后重新访问时系统会自动填写密码。这样很容易造成自己的隐私信息外泄。
解决方法:在“HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionpolicies”分支中找到network子项(如果没有可自行添加),在该子项下建立一个新的双字节值,名称为disablepasswordcaching,并将该值设置为1。重新启动计算机后,操作系统就不会自作聪明地记录密码了。
安全隐患:现在的病毒很聪明,不像以前只会通过注册表的RUN值或MSCONFIG中的项目进行加载。一些高级病毒会通过系统服务进行加载。那么,我们能不能使病毒或木马没有启动服务的相应权限呢?
解决方法:运行“regedt32”指令启用带权限分配功能的注册表编辑器。在注册表中找到“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices”分支,接着点击菜单栏中的“安全→权限”,在弹出的Services权限设置窗口中单击“添加”按钮,将Everyone账号导入进来,然后选中“Everyone”账号,将该账号的“读取”权限设置为“允许”,将它的“完全控制”权限取消(图3)。现在任何木马或病毒都无法自行启动系统服务了。当然,该方法只对没有获得管理员权限的病毒和木马有效。
安全隐患:很多病毒都是通过注册表中的RUN值进行加载而实现随操作系统的启动而启动的,我们可以按照“禁止病毒启动服务”中介绍的方法将病毒和木马对该键值的修改权限去掉。
解决方法:运行“regedt32”指令启动注册表编辑器。找到注册表中的“HKEY_CURRENT_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRUN”分支,将Everyone对该分支的“读取”权限设置为“允许”,取消对“完全控制”权限的选择。这样病毒和木马就无法通过该键值启动自身了。
病毒和木马是不断“发展”的,我们也要不断学习新的防护知识,才能抵御病毒和木马的入侵。与其在感染病毒或木马后再进行查杀,不如提前做好防御工作,修筑好牢固的城墙进行抵御。养成良好的安全上网习惯,尽量不接触那些不安全的站点和下载不安全的软件、视频等,开机运行360和杀毒软件,备份一份安全的注册表文件,勤打补丁多学习,“防患于未然”才是我们应该追求的。
PS:本文在书写过程中引用了网络上的一些内容,在此,对那些默默奉献出自己知识的无名朋友们表示感谢!