细说从头看端详—注册表的作用
http://www.yy0736.com 加入日期:2004.11.25 点击数: 828
[大 中 小]
一、注册表的结构划分及相互关系
WINDOWS的注册表有六大根键,相当于一个硬盘被分成了六个分区。
在“运行”对话框中输入RegEdit,然后单击“确定”按钮,则可以运行注册表编辑器。
上图显示了Windows 98中文版的注册表Registry&127;(System.dat、User.dat、Config.pol)的数据组织结构。
上图左窗格显示的是注册表的根键,这样的根键共六个。这些根键都是大写的,并以HKEY_为前缀,&127;这种命令约定是以Win32 API的Registry函数的关键字的符号变量为基础的。
虽然在注册表中,六个根键看上去处于一种并列的地位,彼此毫无关系。但事实上,HKEY_CLASSES_ROOT和HKEY_CURRENT_CONFIG中存放的信息都是HKEY_LOCAL_MACHINE中存放的信息的一部分,而HKEY_CURRENT_USER中存放的信息只是HKEY_USERS存放的信息的一部分。
HKEY_LOCAL_MACHINE包括HKEY_CLASSES_ROOT和HKEY_CURRENT_USER中所有的信息。在每次系统启动后,系统就映射出HKEY_CURRENT_USER中的信息,使得用户可以查看和编辑其中的信息。
实际上,HKEY_LOCAL_MACHINE\SOFTWARE\Classes就是HKEY_CLASSES_ROOT,为了用户便于查看和编辑,系统专门把它作为一个根键。同理,HKEY_CURRENT_CONFIG\SY-STEM\Current Control 就是HKEY_LOCAL_MACHINE\SYSTEM\Current Control。
HKEY_USERS中保存了默认用户和当前登录用户的用户信息。HKEY_CURRENT_USER中保存了当前登录用户的用户信息。
HKEY_DYN_DATA保存了系统运行时的动态数据,它反映出系统的当前状态,在每次运行时都是不一样的,即便是在同一台机器上。
根据上面的分析,注册表中的信息可以分为HKEY_LOCAL_MACHINE和HKEY_USERS两大类,这两大类的详细内容请看后面的介绍。
二、六大根键的作用
在注册表中,所有的数据都是通过一种树状结构以键和子键的方式组织起来,十分类似于目录结构。每个键都包含了一组特定的信息,每个键的键名都是 和它所包含的信息相关的。如果这个键包含子键,则在注册表编辑器窗口中代表这个键的文件夹的左边将有“+”符号,以表示在这个文件夹中有更多的内容。如果这个文件夹被用户打开了,那么这个“+”就会变成“-”。
1.HKEY_USERS
该根键保存了存放在本地计算机口令列表中的用户标识和密码列表。每个用户的预配置信息都存储在HKEY_USERS根键中。HKEY_USERS是远程计算机中访问的根键之一。图3为HKEY_USER子关键字连接情况。
2.HKEY_CURRENT_USER
该根键包含本地工作站中存放的当前登录的用户信息,包括用户登录用户名和暂存的密码(注:此密码在输入时是隐藏的)。用户登录Windows 98时,其信息从HKEY_USERS中相应的项拷贝到HKEY_CURRENT_USER中。图4为HKEY_CURRENT_USER根键下各个键之间连接的情况。
3.HKEY_CURRENT_CONFIG
该根键存放着定义当前用户桌面配置(如显示器等)的数据,最后使用的文档列表(MRU)和其他有关当前用户的Windows 98中文版的安装的信息。图5为HKEY_CURRENT_CONFIG子关键字之间的连接情况。
4.HKEY_CLASSES_ROOT
根据在Windows 98中文版中安装的应用程序的扩展名,该根键指明其文件类型的名称。
在第一次安装Windows 98中文版时,RTF(Rich Text Format)文件与写字板
(WordPad)&127;联系起来,但在以后安装了中文Word 6.0后,&127;双击一个RTF文件时,将自动激活Word。存放在SYSTEM.DAT中的HKEY_CLASSES_ROOT,&127;将替代WIN.INI文件中的 [Extensions]&127; 小节中的设置项,它把应用程序与文件扩展名联系起来,它也替代了Windows 3.x中的Reg.dat文件中的相似的设置项。&127;图6显示了HKEY_CLASSES_ROOT根键中包括的文件扩展名的情况。
5.HKEY_LOCAL_MACHINE
该根键存放本地计算机硬件数据,此根键下的子关键字包括在SYSTEM.DAT中,用来提供HKEY_LOCAL_MACHINE所需的信息,或者在远程计算机中可访问的一组键中。
该根键中的许多子键与System.ini文件中设置项类似。图7显示了HKEY_LOCAL_MACHINE根键下的各个子键之间的情况。
6.HKEY_DYN_DATA
该根键存放了系统在运行时动态数据,此数据在每次显示时都是变化的,因此,此根键下的信息没有放在注册表中。图8显示了HKEY_DYN_DATA根键下的各个子键的情况。
三、注册表部分重要内容
注册表是一个大型数据库Registry。要详细地分析该数据库,不是一两页就能介绍完。我曾经用了半年多时间分析此数据库结构。下面只介绍部分重要内容。有条件上网的朋友可以到
http://reg2000.126.com去看一看。
(一)HKEY_CLASS_ROOT
1.HKEY_CLASS_ROOT/Paint.Pricture/DefaultIcon双击窗口右侧的默认字符串,在打开的对话框中删除原来的“键值”,输入%1。重新启动后,在“我的电脑”中打开Windows目录,选择“大图标”,然后你看到的Bmp文件的图标再也不是千篇一律的MSPAINT图标了,而是每个Bmp文件的略图(前提是未安装ACDSee等看图软件)。
(二)HKEY_CURRENT_USER
1.HKEY_CURRENT_USER\Control Panel\Desktop 中新建串值名MenuShowDelay=0 可使“开始”菜单中子菜单的弹出速度提高。
2.在HKEY_CURRENT_USER\Control Panel\Deskt-op\WindowsMeterics中新建串值名MinAnimate,值为1启动动画效果开关窗口,值为0取消动画效果。
(三) HKEY_LOCAL_MACHINE
1.HKEY_LOCAL_MACHINE\software\microsoft\windows\currentVersion
\explorer\user shell folders 保存个人文件夹、收藏夹的路径。
2.HKEY_LOCAL_MACHINE\system\currentControl-Set\control\keyboard
Layouts 保存键盘使用的语言以及各种中文输入法。
3.HKEY_LOCAL_MACHINE\software\microsoft\windows\
currentVersion\uninstall 保存已安装的Windows应用程序卸载信息。
4.HKEY_LOCAL_MACHINE\system\CurrentControl-Set\services\class 保存控制面板-增添硬件设备-设备类型目录。
5.HKEY_LOCAL_MACHINE\system\Current-ControlSet\control\update 设置刷新方式。值为00设置为自动刷新,01设置为手工刷新[在资源管理器中按F5]。
6.HKEY_LOCAL_MACHINE\software\microsoft\win-dows\currentVersion
\run 保存由控制面板设定的计算机启动时运行程序的名称,其图标显示在任务条右边。在“启动”文件夹程序运行时图标也在任务条右边。
7.HKEY_LOCAL_MACHINE\software\microsoft\windows\currentVersion
\Policies
\Ratings 保存IE4.0中文版“安全”\“分级审查”中设置的口令(数据加密),若遗忘了口令,删除 Ratings 中的数据即可解决问题。
8.HKEY_LOCAL_MACHINE\software\microsoft\windows\currentVersion
\explorer
\desktop\nameSpace 保存桌面中特殊的图标,如回收站、收件箱、MS Network等。
(四) HKEY_USERS
1.HKEY_USERS\.Default\software\microsoft\internet explorer
\typeURLs保存IE4.0浏览器地址栏中输入的URL地址列表信息。清除文档菜单时将被清空。
2.HKEY_USERS\.Default\so..\mi..\wi..\current-Version\ex..
\menuOrder \startMenu保留程序菜单排序信息。
3.HKEY_USERS\.Default\so..\microsoft\windows\current-Version
\explorer
\RunMRU保存“开始 \ 运行...”中运行的程序列表信息。清除文档菜单时将被清空。
4.HKEY_USERS\.Default\so..\microsoft\windows\current-Version
\explorer \RecentDocs 保存最近使用的十五个文档的快捷方式(删除掉可解决文档名称重复的毛病),清除文档菜单时将被清空。
5.HKEY_USERS\.default\software\microsoft\windows\
currentVersion\applets 保存Windows应用程序的记录数据。
6.HKEY_USERS\.default\software\microsoft\windows
\currentVersion\run保存由用户设定的计算机启动时运行程序的名称,其图标显示在任务条右侧。
注册表通过键和子键来管理各种信息。但是,注册表中的所有信息是以各种形式的键值项数据保存下来。在注册表编辑器右窗格中,保存的都是键值项数据。这些键值项数据可分为如下三种类型:
1.字符串值
在注册表中,字符串值一般用来表示文件的描述、硬件的标识等。通常它由字母和数字组成,最大长度不能超过255个字符。在图9所示中,“D:\pwin98\trident”即为键值名“a”的键值,它是一种字符串值类型的。同样地,“ba”也为键值名“MRUList”的键值。通过键值名、键值就可以组成一种键值项数据,这就相当于Win.ini、Ssyt-em.ini文件中小节下的设置行。其实,使用注册表编辑器将这些键值项数据导出后,其形式与INI文件中的设置行完全相同。
2.二进制值
在注册表中,二进制值是没有长度限制的,可以是任意个字节长。在注册表编辑器中,二进制以十六进制的方式显示出来,如图10所示。 在图10中,键值名Wizard的键值“80 00 00 00”就是一个二进制。在如图11所示的“编辑二进制值”对话框时,在编辑框的左边输入十六进制数时,其右边将会显示相应的ASCII码。
3.DWORD值
DWORD值是一个32位(4个字节,即双字)长度的数值。在注册表编辑器中,您将发现系统会以十六进制的方式显示DWORD值,如图12所示。在编辑DWORD数值时,可以选择用十进制还是16进制的方式进行输入。
众所周知,操作系统的注册表是一个藏龙卧虎的地方,所有系统设置都可以在注册表中找到踪影,所有的程序启动方式和服务启动类型都可通过注册表中的小小键值来控制。
然而,正因为注册表的强大使得它也成为了一个藏污纳垢的地方。病毒和木马常常寄生在此,偷偷摸摸地干着罪恶勾当,威胁着原本健康的操作系统。如何才能有效地防范病毒和木马的侵袭,保证系统的正常运行呢?今天笔者将从服务、默认设置、权限分配等九个方面入手为大家介绍如何通过注册表打造一个安全的系统。
特别提示:在进行修改之前,一定要备份原有注册表。
1.拒绝“信”骚扰
安全隐患:在Windows 2000/XP系统中,默认Messenger服务处于启动状态,不怀好意者可通过“net send”指令向目标计算机发送信息。目标计算机会不时地收到他人发来的骚扰信息,严重影响正常使用。
解决方法:首先打开注册表编辑器。对于系统服务来说,我们可以通过注册表中“HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services”项下的各个选项来进行管理,其中的每个子键就是系统中对应的“服务”,如“Messenger”服务对应的子键是“Messenger”。我们只要找到Messenger项下的START键值,将该值修改为4即可。这样该服务就会被禁用,用户就再也不会受到“信”骚扰了。
2.关闭“远程注册表服务”
安全隐患:如果黑客连接到了我们的计算机,而且计算机启用了远程注册表服务(Remote Registry),那么黑客就可远程设置注册表中的服务,因此远程注册表服务需要特别保护。
解决方法:我们可将远程注册表服务(Remote Registry)的启动方式设置为禁用。不过,黑客在入侵我们的计算机后,仍然可以通过简单的操作将该服务从“禁用”转换为“自动启动”。因此我们有必要将该服务删除。
找到注册表中“HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services”下的RemoteRegistry项,右键点击该项选择“删除”(图1),将该项删除后就无法启动该服务了。
在删除之前,一定要将该项信息导出并保存。想使用该服务时,只要将已保存的注册表文件导入即可。
3.请走“默认共享”
安全隐患:大家都知道在Windows 2000/XP/2003中,系统默认开启了一些“共享”,它们是IPC$、c$、d$、e$和admin$。很多黑客和病毒都是通过这个默认共享入侵操作系统的。
解决方法:要防范IPC$攻击应该将注册表中“HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control LSA”的RestrictAnonymous项设置为“1”,这样就可以禁止IPC$的连接。
对于c$、d$和admin$等类型的默认共享则需要在注册表中找到“HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services LanmanServer Parameters”项。如果系统为Windows 2000 Server或Windows 2003,则要在该项中添加键值“AutoShareServer”(类型为“REG_DWORD”,值为“0”)。如果系统为Windows 2000 PRO,则应在该项中添加键值“AutoShareWks”(类型为“REG_DWORD”,值为“0”)。
4.严禁系统隐私泄露
安全隐患:在Windows系统运行出错的时候,系统内部有一个DR.WATSON程序会自动将系统调用的隐私信息保存下来。隐私信息将保存在user.dmp和drwtsn32.log文件中。攻击者可以通过破解这个程序而了解系统的隐私信息。因此我们要阻止该程序将信息泄露出去。
解决方法:找到“HKEY_LOACL_MACHINE SOFTWARE Microsoft WindowsNT CurrentVersion AeDebug”,将AUTO键值设置为0,现在DR.WATSON就不会记录系统运行时的出错信息了。同时,依次点击“Documents and Settings→ALL Users→Documents→drwatson”,找到user.dmp和drwtsn32.log文件并删除。删除这两个文件的目的是将DR.WATSON以前保存的隐私信息删除。
提示:如果已经禁止了DR.WATSON程序的运行,则不会找到“drwatson”文件夹以及user.dmp和drwtsn32.log这两个文件。
5.拒绝ActiveX控件的恶意骚扰
安全隐患:不少木马和病毒都是通过在网页中隐藏恶意ActiveX控件的方法来私自运行系统中的程序,从而达到破坏本地系统的目的。为了保证系统安全,我们应该阻止ActiveX控件私自运行程序。
解决方法:ActiveX控件是通过调用Windows scripting host组件的方式运行程序的,所以我们可以先删除“system32”目录下的wshom.ocx文件,这样ActiveX控件就不能调用Windows scripting host了。然后,在注册表中找到“HKEY_LOCAL_MACHINE SOFTWARE assesCLSID{F935DC2 2-1CF0-11D0-ADB9-00C04FD58A0B}”,将该项删除。通过以上操作,ActiveX控件就再也无法私自调用脚本程序了。
6.防止页面文件泄密
安全隐患:Windows 2000的页面交换文件也和上文提到的DR.WATSON程序一样经常成为黑客攻击的对象,因为页面文件有可能泄露一些原本在内存中后来却转到硬盘中的信息。毕竟黑客不太容易查看内存中的信息,而硬盘中的信息则极易被获取。
解决方法:找到“HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control SessionManager MemoryManagement”,将其下的ClearPageFileAtShutdown项目的值设置为1(图2)。这样,每当重新启动后,系统都会将页面文件删除,从而有效防止信息外泄。
7.密码填写不能自动化
安全隐患:使用Windows系统冲浪时,常会遇到密码信息被系统自动记录的情况,以后重新访问时系统会自动填写密码。这样很容易造成自己的隐私信息外泄。
解决方法:在“HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows CurrentVersion policies”分支中找到network子项(如果没有可自行添加),在该子项下建立一个新的双字节值,名称为disablepasswordcaching,并将该值设置为1。重新启动计算机后,操作系统就不会自作聪明地记录密码了。
8.禁止病毒启动服务
安全隐患:现在的病毒很聪明,不像以前只会通过注册表的RUN值或MSCONFIG中的项目进行加载。一些高级病毒会通过系统服务进行加载。那么,我们能不能使病毒或木马没有启动服务的相应权限呢?
解决方法:运行“regedt32”指令启用带权限分配功能的注册表编辑器。在注册表中找到“HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services”分支,接着点击菜单栏中的“安全→权限”,在弹出的Services权限设置窗口中单击“添加”按钮,将Everyone账号导入进来,然后选中“Everyone”账号,将该账号的“读取”权限设置为“允许”,将它的“完全控制”权限取消(图3)。现在任何木马或病毒都无法自行启动系统服务了。当然,该方法只对没有获得管理员权限的病毒和木马有效。
9.不准病毒自行启动
安全隐患:很多病毒都是通过注册表中的RUN值进行加载而实现随操作系统的启动而启动的,我们可以按照“禁止病毒启动服务”中介绍的方法将病毒和木马对该键值的修改权限去掉。
解决方法:运行“regedt32”指令启动注册表编辑器。找到注册表中的“HKEY_CURRENT_MACHINE SOFTWARE Microsoft Windows CurrentVersion RUN”分支,将Everyone对该分支的“读取”权限设置为“允许”,取消对“完全控制”权限的选择。这样病毒和木马就无法通过该键值启动自身了。
病毒和木马是不断“发展”的,我们也要不断学习新的防护知识,才能抵御病毒和木马的入侵。与其在感染病毒或木马后再进行查杀,不如提前做好防御工作,修筑好牢固的城墙进行抵御。毕竟亡羊补牢不是我们所希望发生的事情,“防患于未然”才是我们应该追求的。