UTF.COM.CN

解密BCD

作者:佚名 | 来源:网络 | 添加时间:2007-10-19 21:52:36 | 人气:644

解密BCD

我们知道,Windows 2000/XP/Server 2003的引导信息配置文件是一个INI文件,而INI文件是以纯文本方式存放的,使用任何的文本编辑器均可以编辑它。方便的操作也会给系统安全带来一些隐患,任何计算机病毒或者恶意程序均可以改写Boot.ini文件,让用户的系统启动的时候变得不太一样。好在目前没有听说过这种计算机病毒的大规模流行。这一点在Windows Vista里面得到了一点小小的改变,也许这种改变是和安全无关的,但是这一点小小的改变就足以提高了非法修改启动引导方式的难度,这是因为在Windows Vista里面,启动信息不再以纯文本的方式存放,而是储存在一个有格式的文件里面,这个文件就是前面所述的BCD。
要对BCD进行解密,就必须研究它的文件格式,使用任何的16进制编辑工具打开C:\Boot\BCD文件,在00-03字节处,会看到一个非常明显的标志字符串:regf(如图所示)。
熟悉Windows 注册表的用户都知道,在Windows 2000/XP/Server 2003里面,任何注册表键(无论是子键还是根键)均可以导出成为一个hive文件,另外Windows API函数RegSaveKey() 以及 RegSaveKeyEx() 函数也可以通过软件开发的方式将注册表导出为一个hive文件。如果研究过Windows 注册表的hive文件就会知道,导出来的hive文件的前4个字节一定是“regf”。Windows Vista 的BCD文件,本质上就是一个注册表的hive文件,因此我们可以使用注册表编辑器直接对它进行修改,而绕过BCDEdit.exe或其他工具。前提是你需要对BCD文件的文件结构非常熟悉。
下面将详细的介绍一些常用的BCD文件里面对应的注册表项目的含义:
      在Windows Vista 里面,运行 regedit.exe,打开注册表编辑器。然后定位到 HKEY_LOCAL_MACHINE\BCD00000000 键,把这个键展开以后,就可以看到完整的BCD文件的内容。这是因为 Windows Vista 已经把BCD文件加载到系统的HKEY_LOCAL_MACHINE根键下面了。
       下图是一个展开以后的BCD文件的内容。
       关于BCD文件,我们需要关注的内容只有Objects下的内容,在Objects下,有很多以CLSID命名的子键,每一个子键均有其特殊的含义,对于Windows启动来说,启动项目的子键总是成对出现的。如上图所示,{50c73d4c-e6b3-11da-bc73-d30cdb1ce216}和{50c73d4d-e6b3-11da-bc73-d30cdb1ce216}就是一对。唯一的差别只在于第一个段的最后一个字符不同,其余的内容完全相同。Windows Vista 的Boot Manager将根据CLSID来识别不同的启动项目。
       展开每一个CLSID键,一般都会有2个字键:Description和Elements。在Elements键下方,会有树木不等的子键存在,每一个子键都代表不同的含义。有一些是显示的内容,有一些是指向一些特殊的程序或目录用于Windows Vista 的启动,剩下的一些和Windows Vista 的启动参数有关。
       例如:
  l         12000004键下的Element字符串内容就是用于设定在 Boot Manager 的启动菜单上显示内容的。如下图所示,我已经将Windows Vista安
        装以后默认的启动菜单上的Microsoft Windows 字样修改为 Microsoft Windows Vista Beta 2 X86 EN。这样在系统启动的时候,就可以
        很明确的知道安装的Windows Vista是什么版本了。
l         12000005 键用于指定Boot Manager的语言,如果安装了 Windows Vista 的简体中文版本,那么这里的内容一定是 zh-CN,如果你想使用英文版的Boot Manager,那么只需要修改为 en-US即可。不过前提是需要在C:\Boot 目录下有一个 en-US的目录,而且里面有相应的en-US语言的资源文件。

l         42000002键用于指定 Windows Vista 的引导程序。在Windows Vista里面,引导程序已经改为 winload.exe。

l         而 22000002节点用于指定 Windows Vista 安装以后的系统目录的名字,默认是 Windows目录。

l         如果休眠模式,那么22000002节点用于指向休眠文件的文件名,默认是 hiberfil.sys文件。

l         42000002节点用于设置从休眠模式唤醒时由哪个程序完成休眠状态à正常状态的转化。在Windows Vista 里面,这个程序叫做 winresume.exe。

l         如果安装了早期的采用 NTLDR引导的操作系统,如Windows 2000/XP/Server 2003,那么Boot Manager将出现一个叫做{466f5a88-0af2-4f76-9038-095b170dc21c}的CLSID,这个CLSID用于代表采用NTLDR启动模式的操作系统的引导程序的名字。当用户从 Boot Manager里面选择 Earlier version of Windows菜单项目以后,Boot Manager将根据12000002节点指向的内容调用早期Windows操作系统的引导程序,默认为NTLDR。

l         {9dea862c-5cdd-4e70-acc1-f32b344d4795}是一个专用于代表 Windows Boot Manager的CLSID。

l         在{9dea862c-5cdd-4e70-acc1-f32b344d4795}键下面,有一个叫做24000001的子键,这个键用于指定将要显示在Windows Boot Manager上的操作系统启动菜单的CLISD编号。24000001子键的Element键是一个REG_MULTI_SZ类型的注册表键值,这表示可以写入多个内容。在我的系统上面,这个键值数据有3项,这代表了我的系统至少安装了3个操作系统,而且安装了采用NTLDR引导的早期的Windows操作系统。

实际上,Element键值反映的问题的确和真实的情况一致,我的确在我的机器上安装了Windows XP、Windows Vista Beta 2 X86 EN和 Windows Vista Beta Build 5XXX 3个操作系统。\
需要注意的是,Windows Vista 新增的 Windows Memory Diagnostic 项目的并不属于{9dea862c-5cdd-4e70-acc1-f32b344d4795}键,它是作为一个单独的键{b2721d73-1db4-4c62-bf78-c548a880142d}存在的。

最后需要说明的是,Windows Vista 对BCD键是采用了保护措施的。Windows Vista 默认设定,只允许 SYSTEM 用户能够完全控制这个键,而Administrators组用户只有读取的权限,没有开枪写入的权限。而其他类型的用户则根本没有查看的权限。
换句话说,要修改这个键,就需要手动调整注册表的安全描述符的内容了。调整注册表安全描述符的方法很简单,只需要右键点击将要被修改的键,然后选择权限,然后点击添加按钮把自己的账户加入列表,并打开写入权限即可,这里不再详细的描述。
责任编辑:冬天来了
【字号: 】【去论坛讨论】【发表评论】【打印本文】【告诉好友】【关闭窗口
网友评论(评论内容只代表网友观点,与本站立场无关!)

姓名:

验证码: 点击刷新