大家知道吗?微软发布的具有数字签名的SP2才是正式版本(右击打开文件属性窗口可以查看到图1所示的数字签名信息),这是怎么一回事呢?
一、Windows的文件保护功能
在Windows 2000以前的Windows版本中,安装操作系统之外的软件,可能会覆盖掉一些共享的系统文件,例如动态链接库(*.dll文件)、可执行文件(*.exe),这样可能会导致程序运行不稳定、系统出现故障,这主要是由于所谓的DLL陷阱所导致。
为了彻底解决这一问题,在Windows 2000和Windows XP中,微软引入了“Windows文件保护”机制用来防止替换受到保护的系统文件,包括*.sys、*.dll、*.ocx、*.ttf、*.fon、*.exe等类型的文件,Windows文件保护在后台自动运行,可以保护Windows安装程序安装的所有文件。
Windows文件保护能够检测到其他程序要替换或移动受保护的系统文件的意图,那么它是依据什么来检测的呢?其实,Windows文件保护是通过检测文件的数字签名,以确定新文件的版本是否为正确的Microsoft版本,如果文件版本不正确,Windows文件保护会自动调用dllcache文件夹或Windows中存储的备份文件替换该文件,如果Windows文件保护无法定位相应的文件,那么会提示用户输入该位置或插入安装光盘。
二、认识数字签名
数字签名是允许用户验证的,如果某文件没有有效的数字签名,那么将无法确保该文件确实来自它所声明的来源,或者无法确保它在发行之后未被篡改过(可能由病毒篡改)。此时,比较安全的做法是,除非你确定该文件的创建者而且知道其内容,那么才能安全地打开,否则建议不要轻易打开该文件。凡是通过了微软数字签名的硬件或软件,其外包装上一般都会出现“为Microsoft Windows XP设计(Designed for Microsoft Windows XP)”的徽标。
在计算机上安装新软件时,系统文件和设备驱动程序文件有时会被未经过签名的或不兼容的版本覆盖,导致系统不稳定。随Windows XP一起提供的系统文件和设备驱动程序文件都有Microsoft数字签名,这表明这些文件都是原始的未更改过的系统文件,或者它们已被Microsoft同意可以用于Windows。在Windows 2000/XP中提供了“文件签名验证”工具(见图2),Windows 9x则提供了“系统文件检查器”,我们可以通过这些工具来检查系统文件的数字签名状态。
默认情况下,Windows文件保护始终处于启用状态,同时允许Windows数字签名文件替换现有文件。目前,签名文件通过以下方式进行分发:Windows Service Pack、修补程序分发、操作系统升级、Windows Update、Windows设备管理器/类别安装程序。
三、数字签名实例秀
说了半天,除了保护系统文件外,数字签名究竟能够给普通用户带来哪些好处呢?下面,我们通过几个实例来进行说明:
实例1:验证Windows XP的核心文件是否被替换
现在Windows XP版本有大企业版本、联想随机版本等,那么如何来验证手头的Windows XP属于微软原版呢?
这里,我们只要检查Windows XP的系统文件是否能够通过文件签名验证即可。在“开始→运行”对话框键入“sigverif”命令打开“文件签名验证”窗口,点击“开始”按钮,首先会建立文件列表,稍候会看到图3所示窗口,这里未经过数字签名的文件大都是驱动程序文件,只要winlogon.exe、licdll.dll两个文件未出现在列表中,那么说明你的Windows XP未被篡改过。
实例2:驱动程序签名
Windows XP自带的驱动程序都通过了微软的WHQL数字签名,在查看通过数字签名的驱动程序时会看到一个图标。不过当我们在安装或升级设备驱动程序时,经常会看到图4所示的警告信息,说是“没有通过Windows徽标测试,无法验证它同Windows XP的相容性”,其实这是Windows XP的文件保护功能在起作用,以降低用户安装无保护驱动程序的风险,当然我们只要选择“仍然继续”按钮就可以忽略这一提示并完成驱动程序的安装。
假如你觉得这个警告提示框非常烦人,那么可以打开“系统属性”窗口,切换到“硬件”选项页,点击“驱动程序签名”按钮进入图5窗口,在“文件签名验证”下有3个选项:
忽略:允许该计算机安装所有设备驱动程序,无论其是否具有数字签名。
警告:当安装程序试图安装没有数字签名的设备驱动程序时,将显示警告消息,这是Windows XP的默认行为。
阻止:阻止安装程序安装那些没有数字签名的设备驱动程序。
很明显,选中“忽略”选项,并设置为系统默认选项,以后安装或升级设备驱动程序时,就不会弹出签名验证警告了。
实例3:将数字签名信息写入日志文件
打开“文件签名验证”窗口,点击“高级”按钮进入“高级文件签名验证设置”对话框,切换到“正在记录”选项卡,选中“将文件签名验证结果保存到一个日志文件”复选框(见图5),如果选择“附加到现有日志文件”可以将新的搜索结果添加到日志文件的末尾,选中“改写现有日志文件”将使用新的日志文件替换现有的日志文件,然后键入日志文件的名称,以后就可以将搜索结果写入文件。
假如你只是希望覆盖日志文件,那么直接在“开始→运行”对话框中键入“sigverif /defscan”命令执行即可。
实例4:禁用Windows的文件保护功能
在Windows 2000/XP的\Windows\System32目录下有一个名为dllcache的文件夹,其中保存了重要文件的备份,例如Windows XP的dllcache文件夹中有2169个重要文件,占用364.5MB之多。如果Windows 2000/XP发现某个受保护的系统文件被替换或损坏,那么会从dllcache文件夹中自动恢复。
如果你由于某些原因而需要腾出一部分可用空间,那么可以在“开始→运行”对话框中键入“sfc /purgecache”命令清空Dllcache文件夹,注意“/”前有一个英文半角的空格字符,这样将清除保存在dllcache中的文件缓存。不过这样一来,Windows文件保护就只能从Windows安装光盘恢复系统文件了,因此你将经常会看到提示插入Windows安装光盘的提示,因此不建议朋友们使用该技巧,如果你希望禁用Windows文件保护的话,可以在“开始→运行”对话框中键入“gpedit.msc”打开“本地计算机策略→计算机配置→管理模板→系统”窗口,找到“Windows文件保护”组,在右侧窗格中双击“设置Windows文件保护扫描”项,设置为“已禁用”即可,在这里还可以限制文件保护缓存的大小和指定文件保护缓存的位置