[TOC]

0x00 快速入门

1.入门基础

PC机及其操作系统的一个特点就是允许用户按照自己的要求对计算机系统的硬件和软件进行各种各样的配置。
早期的图形操作系统,如Win3.x中对软硬件工作环境的配置是通过对扩展名为.ini的文件进行修改来完成的,但INI文件管理起来很不方便,因为每种设备或应用程序都得有自己的INI文件,并且在网络上难以实现远程访问。
为了克服上述这些问题,在Windows 95及其后继版本中,采用了一种叫做“注册表”的数据库来统一进行管理,将各种信息资源集中起来并存储各种配置信息。
按照这一原则Windows各版本中都采用了将应用程序和计算机系统全部配置信息容纳在一起的注册表,用来管理应用程序和文件的关联、硬件设备说明、状态属性以及各种状态信息和数据等。

注册表包含了每个计算机用户的配置文件,以及有关系统硬件、已安装的程序和属性设置的信息。
可以使用注册表编辑器检查并修改注册表。但是您不需要这么做而可以让 Windows 根据需要修改系统注册表,极力建议您不要自己编辑注册表设置。

注册表的特点:

  • a. 注册表允许对硬件、系统参数、应用程序和设备驱动程序进行跟踪配置,这使得修改某些设置后不用重新启动成为可能。
  • b. 注册表中登录的硬件部分数据可以支持高版本Windows的即插即用特性。当Windows检测到机器上的新设备时,就把有关数据保存到注册表中,另外还可以避免新设备与原有设备之间的资源冲突。
  • c. 管理人员和用户通过注册表可以在网络上检查系统的配置和设置,使得远程管理得以实现。


2.注册表结构

1.1 注册表目录结构
1.1.1 注册表文件目录

操作系统            注册表文件目录                  系统提供的注册表恢复方法
#----------------------------------------------------------------------------
Win 9x/Me %SystemRoot% SCANREG /RESTORE; 导入或导出注册表
Win NT/2000/XP/2003 %SystemRoot%\system32\config 紧急修复磁盘(ERD); 最后一次正确的配置; 导入或导出注册表

1.1.2 注册表文件

操作系统            描述            文件                    备份
----------------------------------------------------------------
Win 9x/Me 系统配置 System.dat System.da0
Win 9x/Me 用户配置 User.dat User.da0
Win 9x/Me 网络管理 Config.pol Config.po0

Win NT/2000/XP/2003 系统配置 SYSTEM %SystemRoot%\repair\system
Win NT/2000/XP/2003 程序配置 SOFTWARE %SystemRoot%\repair\software
Win NT/2000/XP/2003 安全配置 SECURITY %SystemRoot%\repair\security
Win NT/2000/XP/2003 缺省用户 DEFAULT %SystemRoot%\repair\default

Win NT/2000/XP/2003 所有用户 %AllUserProfile%\NTUSER.DAT %SystemRoot%\repair\ntuser.dat
Win NT/2000/XP/2003 当前用户 %UserProfile%\NTUSER.DAT


1.2 注册表内部结构
Windows虽然将注册表分了若干个文件,但是对于注册表编辑器来说它们的结构是一致的。所有的数据都是通过一种树状结构以键和子键的方式组织起来,就象我们的磁盘文件系统的目录结构一样。
每个键都包含了一组特定的信息,每个键的键名都是和它所包含的信息相关联的。
如果某个键包含了子键,则在注册表编辑器窗口中代表这个键的文件夹的左边将有“+”符号,以表示在这个文件夹中有更多的内容。
如果这个文件夹被用户打开了,那么这个“+”就会变成“-”,我们可以象打开文件夹一样层层的打开注册表树,当然我们有时并不清楚我们要找的键在哪个目录分支下面,我们就得搜索相应的关键字。

1.2.1 HKEY_CLASSES_ROOT(通用)

  • Win 9x/Me: 管理文件系统。根据在Windows中安装的应用程序的扩展名,该根键指明其文件类型的名称,相应打开该文件所要调用的程序等等信息。
  • Win NT/2000/XP/2003: 是HKEY_LOCAL_MACHINE\Software的子项。此处存储的信息可以确保当使用Windows资源管理器打开文件时,将使用正确的应用程序打开对应的文件类型。

1.2.2 HKEY_CURRENT_USER(通用)

  • Win 9x/Me: 管理系统当前的用户信息。在这个根键中保存了本地计算机中存放的当前登录的用户信息,包括用户登录用户名和暂存的密码等。在用户登录Windows时,其部分信息从HKEY_USERS中相应的项拷贝到HKEY_CURRENT_USER中。
  • Win NT/2000/XP/2003: 包含当前登录用户的配置信息的根目录。用户文件夹、屏幕颜色和“控制面板”设置存储在此处,该信息被称为用户配置文件

1.2.3 HKEY_LOCAL_MACHINE(通用)

  • Win 9x/Me: 管理当前系统硬件配置。在这个根键中保存了本地计算机硬件配置数据,此根键下的子关键字包括在SYSTEM.DAT中,用来提供HKEY_LOCAL_MACHINE所需的信息,或者在远程计算机中可访问的一组键中。
  • Win NT/2000/XP/2003: 包含针对该计算机(对于任何用户)的配置信息

1.2.4 HKEY_USERS(通用)

  • Win 9x/Me: 管理系统的用户信息。在这个根键中保存了存放在本地计算机口令列表中的用户标识和密码列表。同时每个用户的预配置信息都存储在HKEY_USERS根键中。HKEY_USERS是远程计算机中访问的根键之一。
  • Win NT/2000/XP/2003: 包含计算机上所有用户的配置文件的根目录。HKEY_CURRENT_USER是HKEY_USERS的子项

1.2.5 HKEY_CURRENT_CONFIG(通用)

  • Win 9x/Me: 管理当前用户的系统配置。在这个根键中保存着定义当前用户桌面配置(如显示器等等)的数据,该用户使用过的文档列表(MRU),应用程序配置和其他有关当前用户的Windows的安装的信息。
  • Win NT/2000/XP/2003: 包含本地计算机在系统启动时所用的硬件配置文件信息

1.2.6 HKEY_DYN_DATA

  • Win 9x/Me: 管理系统运行数据。在这个根键中保存了系统在运行时的动态数据,此数据在每次显示时都是变化的,因此,此根键下的信息没有放在注册表中。
  • Win NT/2000/XP/2003: 无此根键。


1.3 注册表支持的数据值的类型
Regedit.exe支持3种数据类型:

  • REG_SZ: 字符值
  • REG_BINARY: 二进制值
  • REG_DWORD: 双字节值

`Regedt32.exe还支持另外2种数据类型:

  • REG_EXPAND_SZ: 可扩展字符串
  • REG_MULTI_SZ: 多重字符串

Windows7中支持的数据类型:

* REG_SZ  #字符串 
* REG_MULTI_SZ #多重字符串
* REG_DWORD_BIG_ENDIAN #大端双字节值
* REG_DWORD #双字节值
* REG_BINARY #二进制
* REG_DWORD_LITTLE_ENDIAN #小端双字节值
* REG_LINK #连接值
* REG_FULL_RESOURCE_DESCRIPTOR #资源描述符
* REG_EXPAND_SZ #可扩展字符串


1.4 手工修改注册表方法
1.4.1 概述
注册表编辑器是一个可以让你改变系统注册设定的高级工具。有经验的Windows用户可以通过编辑注册表改变系统设定。
启动注册表编辑器的方法是执行%SystemRoot%文件夹下的REGEDIT.EXE(Windows还提供32位的注册表编辑器Regedt32.exe)。

Regedit.exe 不提供下列功能:

  • 不能设置注册表项的安全性。如果需要这一功能则必须使用 Regedt32.exe
  • 不能查看和编辑数据类型 REG_EXPAND_SZ 和 REG_MULTI_SZ,要查看和编辑这两种数据类型,必须使用 Regedt32.exe。
    • 如果试图查看 REG_EXPAND_SZ 类型的值,Regedit.exe 将显示二进制数据类型。
    • 如果试图编辑这两种数据类型,Regedit.exe 会以 REG_SZ 数据类型保存,将无法执行预期的功能。
  • Microsoft 建议只将 Regedit.exe 用于搜索,在需要编辑注册表时则使用 Regedt32.exe。

1.4.2 导入和导出注册表项
通常情况下,通过双击注册表文件(*.reg)也可将注册表文件中的内容导入到注册表从而修改注册表。

1.4.2.1 将全部或部分注册表导出到文本文件中

  • 在“注册表”菜单上,单击“导出注册表文件”。
  • 在“文件名”中,输入注册表文件的名称。
  • 在“导出范围”下,执行以下任一操作:
    • 要备份整个注册表,请单击“全部”。
    • 如果只备份注册表树的某一分支,请单击“选定的分支”,然后输入要导出的分支名称。
  • 单击“保存”。
    注意:可以使用任何文本编辑器处理您通过导出创建的注册表文件。注册表文件以 .reg 扩展名保存。

1.4.2.2 导入部分或全部注册表

  • ●在“注册表”菜单上,单击“导入注册表文件”。
  • ●查找要导入的文件,单击选中该文件,再单击“打开”。

1.4.3 更改项和值
1.4.3.1 查找字符串、值或注册表项

  • ●单击“编辑”菜单中的“查找”。
  • ●在“查找目标”框中,键入要查找的字符串、值或注册表项。
  • ●选中“项”、“值”、“数据”和“全字匹配”复选框,以匹配要搜索的类型,然后单击“查找下一个”。

通过只查找一种类型的信息可以加速搜索;

  • 例如,如果知道要查找的是值项,您可以清除“项”和“数据”复选框,这样就可以不搜索这些对象,重复搜索请按 F3 键。

1.4.3.2 添加项

  • 双击要添加新项的注册表列表,然后单击要在其上放置新项的项。
  • 在“编辑”菜单上,指向“新建”,然后单击“项”。
  • 键入新注册表项的名称,然后按 ENTER 键。

1.4.3.3 添加值

  • 单击想要添加新值的注册表项或值项。
  • 在“编辑”菜单上,指向“新建”,然后单击要添加的值的类型:“字符值”、“二进制值”,或“双字节值”。
  • 键入新值的名称,然后按 ENTER 键。
    注意:在添加值时,值名和数据类型将用默认值保存。

1.4.3.4 更改值

  • 选择要更改的值。
  • 在“编辑”菜单上,单击“修改”。
  • 在“数值数据”框中,键入该值的新数据,然后单击“确定”。

1.4.3.5 删除注册表项或值

  • 单击要删除的注册表项或值项。
  • 在“编辑”菜单上,单击“删除”。
    注意:可以从注册表中删除注册表项和值。但是,不能删除预定义项(例如 HKEY_CURRENT_USER)或更改预定义项的名称。

1.4.3.6 重命名注册表项或值

  • 单击要重命名的注册表项或值项。
  • 在“编辑”菜单上,单击“重命名”。
  • 键入新名,然后按 ENTER。
    注意:不能重命名根注册表项或注册表项的默认值。

1.4.3.7 更改项和值的重要注意事项

  • ●如果您犯了一个错误,导致计算机无法正常启动,可以使用还原注册表的方法。。
  • ●本文内容中“注册表文件修改方法”是指将描述的内容用记事本等文本编辑工具写入一个.reg文件,然后双击这个文件或用注册表编辑器将其导入到注册表的注册表修改方法。此方法安全快速。

0x01 注册表安全

描述:我们这里所说的安全可以看作两个部分一个是操作安全一个系统层面上的安全设置;

1.注册表容灾

描述:系统提供的注册表检查和恢复方法,详见”我的电脑”中的帮助索引”注册表”中的内容
警告:错误地编辑注册表可能会严重损坏您的系统。在更改注册表之前,至少应该备份计算机上任何有价值的数据。

如果必须直接编辑注册表,则请首先将其备份,使用Reg直接编辑本地或远程计算机的注册表,这些更改有可能造成计算机无法操作并需要重新安装操作系统,所以不要直接编辑注册表,而应尽可能利用“控制面板”或“Microsoft管理控制台(MMC)”更改注册表;

注意事项:

  • Windows 95不具备自动备份注册表的功能。可以在装有Windows 98的计算机上将Windows目录下的Scanregw.exe文件和Scanreg.ini文件拷贝到Windows95计算机的Windows目录中,然后运行Regedit.exe文件修改注册表,在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run下添加一字符串ScanRegistry并将其键值设为C:\WINDOWS\scanregw.exe/autorun,最后重新启动计算机即可。
  • 备份后的文件是以cab结尾的压缩文件,存放在Windows目录下的Sysbckup(隐含)子目录下。系统默认的文件名是rb000.cab、rb001.cab、rb002.cab、rb003.cab、rb004.cab,使用时可以用解压软件打开或用DOS下的Extract命令解开。


2.注册表安全

描述:注册表编辑器会忽略标准的安全措施,从而使得这些设置会降低性能、破坏系统,甚至要求用户重新安装Windows,可以利用“控制面板”或“Microsoft管理控制台(MMC)”中的程序安全更改多数注册表设置

2.1 禁用危险的远程注册表
在Win NT/2000/XP/2003下,当你在编辑注册表时,可曾留意注册表编辑器菜单中的“注册表→连接网络注册表”一项? 微软此举的目的,主要是为了方便网络管理员对网络中的计算机进行管理,但如果被别有用心的用户对自己的计算机的注册表进行远程操作,那就非常危险了那么如何禁用它呢?

  • 方法1:运行”services.msc”从而打开“服务”管理工具,本地计算机上的所有服务都显示出来了,找到名称为“Remote Registry Service”、描述为“允许远程注册表操作”的服务,右键点击,选择“属性”。如果它在运行,则将其停止;在对话框“常规→启动类型”处选择“已禁用”就OK了!若你以后想启动此服务,选择“自动”即可。为了自己计算机的安全,赶快行动吧!
  • 方法2:停止”远程注册表操作”操作服务,也可使用命令:net stop "Remote Registry Service"
  • 下面是禁用远程注册表服务的注册表文件修改方法:
    REGEDIT4
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteRegistry]
    ;#禁用远程注册表服务 2=自动;3=手工;4=禁用 下次启动Win NT/2000/XP/2003系统时生效
    "Start"=dword:00000004

2.2 禁止当前用户使用注册表工具
注册表对于很多用户来说是很危险的,尤其是初学者,为了安全最好还是禁止注册表编辑器运行。

禁止当前用户使用注册表工具的注册表文件修改方法:

REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
;#禁止当前用户使用注册表工具 0=允许;1=禁止 立即生效
"DisableRegistryTools"=dword:00000001

请注意:在上述设置情况下,通过双击注册表文件(*.reg)仍可将注册表文件中的内容导入到注册表从而修改注册表
有时为了防止一些电脑高手也使用此种方法解除对注册表编辑器的限制,就得使.reg文件不能用系统默认的方式打开,具体的注册表文件修改方法是:
REGEDIT4
[HKEY_CLASSES_ROOT.reg]
;不能简单通过打开.reg文件的方式导入注册表。但一些使用该方法的应用程序也会注册失败。立即生效
@=”txtfile”

这时用户自己也无法简单地通过双击.reg文件修改注册表了。因此要想真正完全限制用户,只能借用第三方软件。
恢复Regedit.exe打开:

REGEDIT4
[HKEY_CLASSES_ROOT\.reg]
;#恢复.reg文件的打开方式。立即生效
@="regfile"

2.3 修复注册表的恶意篡改

2.4 特殊注册表操作
禁止系统缺省的共享目录

REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]
;#禁止系统缺省的共享目录(Admin$,C$,...,但不包括IPC$)。适用于Win NT/2000/XP/2003。重启系统后生效
"AutoShareWks"=dword:00000000 ;#禁止C$、D$、E$一类的共享。如果要允许置为1。
"AutoShareServer"=dword:00000000 ;#禁止Asmin$共享。如果要允许,置为1

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
;#禁止匿名访问IPC$。适用于Win NT/2000/XP/2003。如果要允许,置为0
"restrictanonymous"=dword:00000001

在局域网中,我们常常可以通过网上邻居来访问别的计算机上的内容,从而实现了资源共享的目的。但有时网上邻居会给我们造成安全上的隐患,例如有的不怀好意的用户可以利用网上邻居来非法删除其他计算机上的重要数据,给其他计算机造成了损失。为了避免这样的损失,我们可以利用注册表来隐藏“网上邻居”。
桌面上隐藏网上邻居

REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
;桌面上隐藏网上邻居(0=显示,1=隐藏)。注销或重启后生效
"NoNetHood"=dword:00000001


0x02 注册小技巧

点击“开始->运行”,在输入框中键入regedit / regedt32 并回车;

  • regedit 建议对注册表(reg)进行查看与搜寻;
  • regedt32 建议对注册表(reg)进行配置和修改;

远程桌面RDP

#开启远程终端服务开启XP&2003终端服务
REG add HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
#取消xp&2003系统防火墙对终端服务的限制及IP连接的限制
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\GloballyOpenPorts\List /v 3389:TCP /t REG_SZ /d 3389:TCP:*:Enabled:@xpsp2res.dll,-22009 /f
#查询远程桌面连接终端里连接端口
reg query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber
set /a a=0xe608 #将16进制转换成10
#更改终端端口为59369(0xE7E9)
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\Wds\rdpwd\Tds\tcp /v PortNumber /t REG_DWORD /d 0xE7E9 /f
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber /t REG_DWORD /d 0xE7E9 /f
#清除“远程桌面连接”的历史记录
reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default"

系统设置

#解除任务管理器禁用
reg delete hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableTaskMgr /f

#解除任务管理器和注册表的文件名方式的禁用
reg delete hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\DisallowRun /f


0x03 注册表遇坑

问题1:注册表编辑已被管理员禁用
解决办法:

  • 1.修改组策略( gpedit.msc)后进行regedit 发现gpedit.msc也无法访问,MMC的管理台也根本就找不到组策略编辑器
    WeiyiGeek.修改组策略
  • 2.镜像恢复解决:DISM /Online/Cleanup-imge/RestoreHealth
  • 3.解除注册表禁用
    reg delete hkcu\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableRegistryTools /f
    #或者CMD删除注册表限制工具修改Disableregistrytools键(保存为xxx.inf)
    [Version]
    Signature="CHICAGO$"
    [DefaultInstall]
    DelReg=del
    [del]
    HKCU,Software\Microsoft\Windows\CurrentVersion\Policies\System,Disableregistrytools,1,00,00,00,00