热点科技

标题: 在Dos下修复受损注册表 [打印本页]

作者: sunweipeng    时间: 2009-12-24 14:24
标题: 在Dos下修复受损注册表
病毒、木马、蠕虫,相信这些恶意的文件很多朋友都遇到过,它们具备的一个共通的特征就是都可能修改注册表,以使自己能够随计算机运行而启动。在Windows下你也别指望能把这个键值修改回来,因为病毒时时刻刻都在后台监视着我们,只要我们修改注册表它们就会进行阻拦或者让更改无法生效。下面的这篇文章将帮助大家解决这个问题。其实这个方法原理很简单,就是把原来在Windows下修改注册表的工作转移到DOS下进行。这种方法不仅用来对付病毒有效,在很多情况下都会比较有用。例如,在Windows界面下如果注册表设置不当,我们可以随时进入并进行设置,然而注册表这家伙关系到系统启动的很多方面,出现无法无法进入系统的情况时,我们该怎么办呢?在这种情况下我们就需要DOS修改注册表了。
1.修复开机马上自动注销问题
现在有一种病毒,在中毒后最为典型的症状就是开机后马上自动注销,这通常是病毒修改了我们的注册表造成的,无法登录自然也就无法在Windows下进行修改,此时我们就可以使用一行简单的命令在DOS下修改注册表。
通常病毒会修改注册表:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon下“Shell”中的内容,默认情况如图1所示,“Shell”中的值应该为“Explorer.exe”,而病毒会在这个值后面加上参数“shutdown”,这样计算机就会不断地重启或者注销。
图1 Shell子键的默认内容
我们可以使用的最简单的方法就是用导入发来解决问题,对于上面这个问题,我们可以在一台正常的计算机上新建一个文本文档,在里边输入如下的内容:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon]
"Shell"="Explorer.exe"
输入完成后选择“文件”-“另存为”,然后选择将文件保存为一个以reg结尾的文件,例如ABC.reg,需要注意的是“Windows Registry Editor Version 5.00 ”与下面的代码之间应当有一个空行,如图2所示。
图2 注册表文件的标准格式
然后将这个文件保存到U盘或软盘等在DOS下可以识别的磁盘中,之后使用Windows XP的光盘启动计算机,然后选择进入命令行恢复模式,输入管理员的名字和密码后,我们即可进入命令行操作的界面,然后输入如下的命令:
regedit Z:ABC.reg
这里我们假设ABC.reg文件保存在U盘或磁盘的根目录下,该磁盘在DOS下的盘符为Z,输入完成后正确的内容就可以导入到注册表中,开机再进行病毒清除即可。
2.用命令行编辑注册表
上边的方法仍旧比较麻烦,毕竟为了修改注册表我们还需要在别的计算机中新建一个注册表的文件,然后再进行导入,实在是太麻烦了。其实Windows早就为我们准备好了命令行的操作方式。我们完全可以使用命令来修改或编辑注册表。
我们可以在命令行下使用reg命令来对注册表进行修改,使用Windows XP的光盘启动计算机,然后进入命令行编辑模式,在里边输入命令:reg /?,即可看到如图3所示的提示。
图3 reg命令的常用功能

作者: sunweipeng    时间: 2009-12-24 14:25
我们最长用到的当数添加和删除注册表键值了,我们可以使用“reg add”来添加注册表的键值,例如输入命令:
REG ADD HKLMSoftwareABC /v Data /t REG_DWORD /d 123456
这行命令就表示在注册表“HKLMSoftwareABC”路径下添加一个“DWORD”值,值的名称为“Data”,并将其具体数值设置为“123456”。其中“/v”参数后边要跟要添加到指定子项下的子键的名称。“/t”参数后边要加上指定子键数据类型,如常见的“DWORD”,使用命令“reg add /?”可以查看都能添加那些类型的值。“/d”参数后边的数值自然就是给新建子键赋予的数值了。我们还可以用同样的方法使用命令“reg delete”来删除不需要的子键,用法与“reg add”非常类似,使用命令“reg delete /?”可以查看这个命令的具体用法。
3.用比较法查找注册表中的问题
通过上边的方法,我们已经可以手动解决注册表中的一些已知问题,但是很多时候,我们并不知道注册表出了那些毛病,从里边找出异常无异于大海捞针。其实我们完全可以把崩溃的注册表在命令行模式下备份出来,再将这个文件与正常系统中的文件进行比较,并找出不同点,这样判断注册表的问题就方便了。
首先我们可以将本地计算机的注册表与远程计算机的进行比较,直接寻找两者的不同,这里我们可以使用“reg compare”命令,例如输入下面的命令:
reg compare \192.168.1.1HKLMSoftware \. /s
这行命令表示比较本机和192.168.1.1之间HKLMSoftware之间的差异,其中“/s”参数表示比较该项目下的所有子项和子键。如果大家觉得这样比较不太直观,我们还可以尝试将崩溃计算机的注册表文件导出,然后再与其它正常的计算机进行比较。而“reg export”命令就可以帮助我们完成这个任务,还是进入命令行编辑模式,输入如图4所示的命令。
图4 导出指定注册表的键值
其中“HKCU”表示要导出注册表的具体内容,这个值可以是“HKLM”、“HKCU”、“HKCR”、“HKU”或“HKCC”,这些都是注册表的根键值,如果你只是怀疑某个根键值下的子键值有问题,则输入更加详细的路径即可,如“hkcusoftwaremicrosoft”,在图3的命令中我们尝试了将reg文件保存在了C盘的根目录中,我们真正在寻找注册表错误的时候,可以将其保存在某个网络路径或连接在本机的移动设备上,将这个文件拷贝到别的计算机上,然后将这台正常的计算机中的对应键值导出,然后再使用文本比较的软件比较两者的不同。比较之后,将有问题的项目修改之后,再用本文前边介绍的方法将这个reg文件导回到注册表即可。
4.在DOS下编辑多系统的注册表
上边的命令还只是Windows自带的注册表编辑工具,功能仍旧不够强大,如我们在修改多系统下的注册表时就不够方便,其实我们使用一些小工具,就可以非常方便地在DOS下修改注册表了。
这里我们使用工具GhRegEdt修改注册表,这个软件包含在Symantec Ghost Solution Suite v2.0包中,大家可以从网上下载这款软件。另外很多爱好者已经将这个工具从Symantec Ghost Solution Suite v2.0包中剥离出来,并制作成了DOS启动工具盘,用这种工具盘同样可以达成我们的目的。
启动到DOS状态下后,我们首先可以使用这个工具调用多系统注册表的功能,我们只需要输入命令:
GhRegEdt Windows  
软件就会开始扫描和识别我们当前的Windows系统,如果分区格式是NTFS,我们将看不到C等盘符,而是只能看到表示分区的数字,例如1.1:windows表明第一个硬盘的第一个分区,2.1:windows则表示系统安装在第二个硬盘的第一个分区,如果你对你的硬盘分区结构很了解,不需要运行这个命令也能自己推算出Windows系统的位置,也就不需要使用上边这个命令进行查看。如果没有加入上边的定位参数,系统会直接对默认的Windows的注册表进行操作。
判定好注册表的位置后,后边的操作就与上边的命令非常类似了,篇幅所限,这里就只是简单介绍一下。
增加注册表项:
GhRegEdt addkey 1.1:windows HKEY_LOCAL_MACHINESOFTWAREABC  
这行命令表示我们修改第一硬盘的第一个分区的注册表,在HKEY_LOCAL_MACHINESOFTWARE这项里面加一个ABC的项。注意,如果你的计算机只有一块硬盘,且系统安装在C盘,那么定位参数“1.1:windows”可以省略。
删除注册表项(Delkey)
GhRegEdt delkey HKEY_LOCAL_MACHINESOFTWAREABC  
我们可以用同样的方法删除刚才建立的ABC项。
添加或删除注册表键值
GhRegEdt addvalue HKEY_LOCAL_MACHINESOFTWAREABC "cbi group" REG_SZ 1234  
这行命令表示,在HKEY_LOCAL_MACHINESOFTWAREABC项下添加一个“cbi group”的子键,子键的类型为“REG_SZ”(可用子键类型有字符串值,REG_SZ;二进制值,REG_BINARY;DWORD值,REG_DWORD;多字符串值,REG_MULTI_SZ);可扩充字符串值,REG_EXPAND_SZ),并为这个子键赋值“1234”,需要注意的是,如果子键名包含有空格,需要使用引号进行引用,否则无法正常执行。如果需要删除子键,只需要将addvalue换成delvalue即可。
使用这个工具同样可以导出或导入内容到注册表中,实现我们上边介绍的注册表比较功能。具体的使用方法也比较简单。参数!

导出注册表

GhRegEdt -cp=936 export 1.1:ABC.reg HKEY_LOCAL_MACHINESOFTWARE  
上边这个例子表示将注册表HKEY_LOCAL_MACHINESOFTWARE下面的内容导出到第一个硬盘第一个分区的根目录下,并且文件命名为ABC.reg。如果需要导入则只需要将export换位import,且工具会自动根据注册表文件的内容选择合适的导入位置,而无需手动为其指定导入的位置。需要注意的是,GhRegEdt默认情况下只支持英文,如果我们导出中文版操作系统的注册表就会出现乱码,为了避免出现这个问题,我们必须加入中国地区代码,也就是加入参数-cp=936。
好了,修复崩溃注册表的方法就介绍到这里了,这个方法对于那些注册表在Windows下拒绝被修改,或者无法进入Windows系统的用户都会有效,另外现在网络上还有Windows PE的启动光盘可以下载,使用这个工具制作启动光盘启动系统,可以实现在图形化的界面下编辑注册表,不过速度较慢,而且无法实现批量处理的功能。另外上面几个简单的DOS下注册表修复实例,仅仅是介绍了几种Dos下修复注册表的方法,起一个抛砖引玉的作用,更细致的注册表修改还需要大家自己去尝试。




欢迎光临 热点科技 (http://itheat.com/activity/) Powered by Discuz! X3.2