|
微软对于自Vista开始的64位OS有新的数字签名策略,即所有内核驱动都必须是经过可信机构签发过数字证书的,否则系统拒绝加载。此策略的目的是加强系统安全防护,使得一干惯于偷偷摸摸、底细不清的内核模块无法在系统中容身。但它却也给正经的内核开发人员带去一个麻烦:开发过程中会不断生成新的驱动镜像文件,开发者不可能将每一个内部版本都拿去申请数字签名,不仅太麻烦,而且会大大延长开发周期。
微软当然也考虑到了这一点,它提供了一个可以禁止签名检验的开机启动项。要运用此启动项,用户必须在启动电脑时,及时在键盘上按下F8键,在出来的启动菜单中选择倒数第二个启动项:Disable Driver Signature Enforcement.
这看上去很省心,但你如果再了解得深入一点,就会发现它其实很麻烦。
首先开机启动项只能手动选择,系统再次重启的时候,它会忘记上一次所选择的启动项,用户如果不再次及时按下F8按钮的话,就会错过机会,只能谋求下一次重启时的机会。如果开发者需要不断地进行重启测试的话,就必须有一个专人站在边上,作用就是及时地按下F8并在出现的启动菜单中选择倒数第二项。这是很无聊并痛苦的事情,所以大多数开发者不愿采用这种方法。
其次就是在Win8系统上,用户在系统开机时已没有通过F8调出启动菜单的机会。这一点虽然可以避免,但过程却也复杂,这里不展开介绍。
看到一扇关闭的窗户,不必急着沮丧,因为或许旁边正有一扇为你敞开的大门。微软还提供了一项称为Test Sign的技术,却正可以较好解决内核开发者的这项困扰。只不过它的实现方法比较复杂,虽然微软提供了详细的文档,但不到万不得已,开发者一般不会去详细研究其内容。从步骤上来讲,这个技术的实现分两个步骤实现:
首先,启动Test Signing启动项属性。实现的一个简单方法是在控制台中运行如下命令:
Bcdedit /set testsigning true
此命令的意思是为当前系统启动项打开名为“TestSigning”的属性。如果再运行下面的命令,就能看到这个属性被列出:
Bcdedit /enum {current}
这个属性会在下次系统重启时生效。系统会一直记住这个属性,重启系统后也依然有效。
第二是用一个测试证书对你的内核镜像文件(一般即.sys文件)进行签名。用户对此可能有点困惑,稍微介绍一下。原来如果认证机构为内核驱动签名的时候,会颁发一个受信证书,这个证书最终会安装到用户系统中,而对镜像文件所进行的签名操作,就是把证书信息写到文件中。系统通过验证这个证书来确认其受信与否。获取这个证书首先需要银子,其次也需要时间。但如果我能够给自己颁发一个临时证书,又怎样呢?那当然又省心又快捷了。微软提供了这样的策略:在Test Signing模式下,测试证书能和其它商业证书一样工作无差。
那么这第二个步骤其实又能细分为两个小步骤:1. 创建测试证书;2.用测试证书为驱动签名。微软提供了相关工具,包含在最新的SDK或DDK中。简单来讲,用户应该使用makecert.exe创建证书,再用signtool.exe进行镜像文件签名。微软所提供的工具不止这两个,但这两个确实是最重要的。遗憾的是这些工具都只能运行在控制台中,用户界面不算友好,参数也很晦涩。这大概是为什么大多数内核开发者都不太使用这些工具的原因?
工具使用方法,请参考微软相关文档。
使用64Signer
好了,现在一个崭新的新星出现了。64Signer能帮助你一步到位。它不仅界面清晰明了,并且功能完整智能。开发者只要简单地进行一次拖拽,点最多两个按钮,就可以完成系统设置和文件签名的一系列工作。深渊隐藏在坚实的桥面下,用户只需开车通过,而无需流连惊骇。
工具的操作方法其实已简单明了地列在界面上(红色字体部分),但我还是愿意详细解释一下使用过程:
运行工具后它能够正确显示当前系统的Test Signing设置。如果此属性已被打开,则“Enable Test Signing Option”是自动钩住的;否则用户需点击一下(第一个点击)。
然后用户应将驱动文件拖拽到用户界面中来,或者手动输入路径,或者点击Open按钮从而通过文件对话框来选择,都可以(一次拖拽)。
最后点击Sign按钮(二次点击)。如果签名成功,用户能看到下面的成功提示(如果有看到失败的情况,请发邮件告诉我):
在关闭工具的时候,工具如果检测到你改变了Test Signing启动属性,会有下面的系统重启提示:
就这么简单,我总结为:一拖两点。
这个工具的贴心之处还没有完全展现出来,如果你看到曾经操作过的历史文件已被整理妥当,以动态列表的形式显示,而你只要点击一下就能展开并选择,贵用户的心情会不会更开心?如下图所示:
补充
在有些启用了Secure Boot的机器上,不能打开TestSigning启动选项。这种情况下,64Signer就不能使用了。下面是一个例子:
C:\windows\system32>bcdedit /set {current} testsigning on
An error has occurred setting the element data.
The value is protected by Secure Boot policy and cannot be modified or deleted.
---------------------
|
|