以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 网友互助 』 (http://bbs.xml.org.cn/list.asp?boardid=76) ---- 注册表(一)用户和组 (http://bbs.xml.org.cn/dispbbs.asp?boardid=76&rootid=&id=30991) |
-- 作者:gexing -- 发布时间:4/20/2006 9:51:00 PM -- 注册表(一)用户和组 大家好,自上次发给一篇"网吧游戏更新"到现在已经有一段时间没有上论坛了.今天突然有一个强烈的想法,就是上论坛看两眼,正好这几天花了点功夫翻了翻注册表,发现点东东,所以就有了这篇文章的诞生. 这篇文章主要是说明一下Windows系统下的用户和组在注册表中的存放位置与存放内容.实际的用处不是很多,主要是让我们大家可以更多的了解Windows注册表. 好了,多于的话就说到这里,下面就让我带着大家走进Windows注册表的SAM里吧...... //////////////////////////////// 首先,我先和大家说一下我使用的操作系统为Microsoft Windows Server 2003 Enterprise Edition (Service Pack 1).对于这个操作系统相信大家都不会感到陌生,该系统是以Windows NT为基本内核的操作系统,有着与Windows 2000和Windows XP一样的内核部分,我就是在这个系统下完成这个研究和这篇文章的. 大部分人都知道以Windows NT为内核的操作系统,它的注册表保存位置在system32\config目录内,其中与用户和组有关的内容是保存在SAM文件当中.当Windows系统启动后,为了后面对用户和组进行比较方便的访问,就把SAM文件内关于用户和组的部分(不是全部的)内容映射在注册表内两个地方:"HKEY_LOCAL_MACHINE\SAM\SAM"和"HKEY_LOCAL_MACHINE\SECURITY\SAM".这两处的内容是完全一样的. 由于以上两处的内容是完全一样,所以我在这里仅以"HKEY_LOCAL_MACHINE\SAM\SAM"做说明. 好了,现在让我们在"远行"窗口中输入"regedit"来打开"注册表编辑器".这个我要说明一点,我在上面所说明的两个注册表位置因为权限的问题在一般情况下是看不到的.所以我们要修改它们的权限,在"注册表编辑器"中选择以上两处注册表位置,在"编辑"菜单中选择"权限",这样就可以打开对应位置的权限对话框.在对话框中我们可以看到只有两个选项("SYSTEM"和"Administrators").我们选择"Administrators",并在下面的"完全控制"中为"允许"打上勾,接着点"确定",最后在按"F5"刷新一下就可以看到里面的所有内容了. 在"HKEY_LOCAL_MACHINE\SAM\SAM"下的"RXACT"项目只有一个默认值,内容不详. 在"HKEY_LOCAL_MACHINE\SAM\SAM\Domains"下有二个项目:"Account"、"Builtin".前者包含系统下所有的用户和由用户创建的组.而后者包含系统所有本身的组. 我们就从大到小,由组开始说起. 在"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin"下有三个项目:"Aliases"、"Groups"、"Users" 其中Groups和Users没有什么实质性的内容,可以不用去管它. 在Aliases下我们可以看到很多的注册表项目,我主要它们分为三类:
在上面我已说过,这里的内容是在这台计算机中所有有本地登录权限的用户账户,现在我来说明一下每个用户的默认值的意思. 经我发现这些符号指的是某个用户的主要权限.那什么又是主要权限呢??? 另外说上一句,如果一个用户在"无本地登录权限"的组中,或是在一个由用户创建的组中,或是不在任何的组中,都将不会在该处显示出来.
接下来再说一个默认健值的数据类型.大家可能会想,数据类型有什么好说的,我当初也是有这个想法的,只到了"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin\Aliases\Names\Administrators"项目的默认健值的数据类型时,才知道Microsoft有时会把一些信息放在健值的数据类型上. 在这个项目下的所有默认健数据类型一般只有两种:字符串(REG_SZ);可扩允字符串(REG_EXPAND_SZ).当某个用户只属于一个组时,其默认健的数据类型就是"字符串",一旦这个用户属于两个或两个以上组时,其默认健的数据类型就会改为"可扩允字符串". /********注释********/
我们随便选择几个组,看一下它的默认值,其中数据为空.不过有一点值得注意,那就是默认值的类型(关于Windows注册表的健值有什么样的数据类型,并且这些特殊类型我们要如何的添加,我将在下一篇文章中写出). 我们认真的看一下所有的组,它们的默认值的数据类型都是不一样的,但又都有一个规律,那就是以0x2开头(0x表示后面的数字是用十六进制表示的),后面再根上一个字节长度的十六进制数据.比如:Administrators为0x220;Backup Operators为0x227;Remote Desktop Users为0x22b.在这我就不写出所有的组了,其它的大家可以自己看一下. 对于每一个相同的Windows操作系统而言(比如都是Windows2003,其它的系统就不知道了),所有系统自身的组在这里的默认值数据类型都是一样的. 那么这个所有组都有的默认值数据类型是什么,有什么意义,又是从什么地方来的,要解答这三个问题,就让我们一起往下看,一起看一下我所分的第三类注册表项目吧. 这在里我还要说上几句,我们在这所看到的所有的组,其实都只是一个映射,像这些组的名字其实只是让我们看的懂一点罢了.而在Windows操作系统中,我们可以认为"组"并不是以组名而存在的,权限也并不是以组名来继承的(像这样的映射关系,在Windows操作系统中可以说是屡见不鲜,比如:"我的电脑","回收站"之类;我们上网时安装的一些插件;还有我后面要说到的用户名). 相信当大家打开HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin\Aliases时,就已经看到了一些像"00000220"、"0000022B"都是由数字和6个英文字母"A、B、C、D、E、F"组成的注册表项目.这些注册表项目的名称也都是用十六进制表示的,只是没有用"0x"开头而已. 好了,现在大家根这我做一个小小的运动(毕竟东东看多了是会累的).我们用自己的手或纸或尺把这些注册表项目前面的"00000"挡住,看一下右边的内容,是不是觉得有点眼熟呀.相信大家也都想到了,这些项目就是前面我所说的组的映射目标,也就是说Windows操作系统自身的所有组的内容都在这里面. 现在让我们打开00000220项目,我们可以看到这个项目下有两个健值(默认值我们不用看了).其中有一个名称为"C",数据类型为"REG_BINARY(二进制)"的健值,双击打开"C"的编辑窗口. 呀,晕了!一大堆的十六进制,看不懂呀......没有关系,我们找重点看. 首先看第一行"20 02 00 00 00 00 00 00"这是什么内容.对于学过C语言和汇编语言的人来说,我一说就因该明白了,那就是"高高低低".这个词是指计算机内存中的数据存储方式.何为"高高低低",比如一个十六进制的数据为"12345678",这个数据必须是连在一起的,不用分开.这个二六进制数据在计算机内存中排列为"87 65 43 21".好了,我们现在也把这行的内容反过来排列一下"0000000000000220",然后把前面的8个"0"去掉就成的"00000220",和这个项目名称刚好对上. 中间的一大串内容都看不懂,不去管它,向下发展. 接下来我们再把编辑窗口拉到最下,什么?????,在右边的ASCII码中我们可以明显的看到有"Administrators"的存在.没错,这就是组的名称.也就是在"计算机管理"里面显示的组名.在"Administrators"下面还可以看到一些乱码,这些就是该组的描述.不过有一个现像,如果组的描述是由字母、数字、字符组成,那么就可以在这里看到.如果有中文,就没有办法看到中文.不但如此,连ASCII码都和原来的中文ASCII码不一样,不知是Microsoft加密了,还是用了Unicode码,或是其他的编码. 在最后面,有一段内容是这里面的重点."01 05 00 00 00 00 00 05 15 00 00 00 AA A7 AC DB 7B B7 81 52 D2 F3 2A 30"这里面有什么内容呢???其实这里面有什么我也不知道(哪来的这么多水果呀,正好饿了.不是吧!?都是些吃过的),大家不要急,听我往下说.重点其实是在这个数据串的后面"F4 01 00 00",这就是重点中的重点呀,这是什么,这就是"Administrator"(如果你只有一个用户在管理员组的话,如果有多个用户在管理员组就向上找).我为什么看到"F4 01 00 00"就认为是"Administrator"呢,想知道就继续向下发展(不要急). 大家可能会有一个疑问,既然后面才是重点为什么要写出前面的一串数据呢,其时这是有必要的,为什么?这还用我说吗,难道你的计算机只有一个管理员吗?这么一长串的数据其实就是该组下每个用户的分隔符.
在"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account"同样也有三个项目:"Aliases"、"Groups"、"Users" 其中Groups的内容我也看不懂,所以就不说它了.继续向下. 在Aliases下我仍然把所有内容分为三类: 2)Names这里面的内容是非Windows系统的一些用户组的名称,这些组是在安装好Windows系统后,再通过安装软件、服务或是用户手动添加的组.该项目内的结构和"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin"下的Names是一样的,大家可以参考一下该处的内容. 3)关于这个类别也没有好说的,大家一样可以参考一下"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin"下的内容,结构也是大致一样了. 在Users下只有二个类别: 2)这个分类里的内容也没有说的,大致和上面的差不多,只是用户的详细内容是在"V"键值下.而别外的一个"F"键值就实在有点难懂. 有一点,在用户的键值"V"中的开头部分,已经找不到该项目的名称了. 另外在"V"键值内,中间的一部分乱码内容是用户的一些属性设置. 好了,现在大家因该看出来为什么我看到"F4 01 00 00"就知道是"Administrator"用户了吗.答案就在"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4"里. 最后再说一个关于用户密码的存放位置,相信这是大家都关心的一个问题.我个人做了一个小小的试验,先添加一个用户,并备份"V"健值的数据内容,然后设置密码.注销当前用户并以新用户登录需要密码.用管理员登录,导入备份的"V"键值数据内容.再次注销当前用户并以新用户登录,结果如我所料"密码为空". 不过在设置密码或是修改密码后,"F"键值的数据内容都会有4个二进制位的数据有点改变.但可以肯定的是用户的密码不会放在"F"健值中.
有关注册表中"HKEY_LOCAL_MACHINE\SAM\SAM"的内容我就说到这里. (二) 2)接着删除该用户,又会出现找不到用户名的错误,如图3. 3)然后再删除"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names"下的该用户名,刷新"计算机管理"时出现账户名与安全标识间无任何映射完成的错误,如图4. 4)再添加一个用户,把第1和第3步反过来,得到的出错提示仍然是先图2,后图4. (三)
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
46.875ms |