首先声明,我是一个菜鸟。一下文章中涌现技术误导情况盖不负责
【作者:张佩】【工具下载:http://www.yiiyee.cn/Blog/64signer/】
-
背景分析
微软对于自Vista开始的64位OS有新的数字签名策略,即全部内核驱动都必须是经过可信机构签发过数字证书的,否则系统拒绝加载。此策略的目的是增强系统安全防护,使得一干惯于偷偷摸摸、不知所自何来的内核模块没法在系统中容身。但它却也给端庄的内核开发人员带去了一个麻烦:开发进程中会不断生成新的驱动镜像文件,开发者不可能将每个内部版本都拿去申请数字签名,那样不仅太麻烦,而且会大大延长开发周期。
微软当然也斟酌到了这一点,它供给了一个可以制止签名检验的开机启动项。要运用此启动项,用户必须在启动电脑的时候,实时在键盘上按下F8键,在出来的启动菜单中选择倒数第二个启动项:Disable Driver Signature Enforcement.
这看上去很省心,但你如果再懂得得深刻一点,就会发明它其实很麻烦。
首先开机启动项只能手动选择,系统再次重启的时候,它会忘记上一次所选择的启动项,用户如果不再次实时按下F8按钮的话,就会错过机会,只能谋求下一次重启时的机会。如果开发者需要不断地进行重启测试的话,就必须有一个专人站在边上,作用就是实时地按下F8并在涌现的启动菜单中选择倒数第二项。这是很无聊并痛苦的事情,所以大多数开发者不肯采取这类方法。
其次就是在Win8系统上,用户在系统开机时已没有通过F8调出启动菜单的机会。这一点虽然可以避免,但进程却也复杂,这里不展开分析。
看到一扇关闭的窗户,不必急着懊丧,因为或许旁边正有一扇为你敞开的大门。微软还供给了一项称为Test Sign的技术,却正可以较好处理内核开发者的这项困扰。只不过它的实现方法比较复杂,虽然微软供给了详细的文档,但不到万不得已,开发者一般不会去详细研究其内容。从步调上来讲,这个技术分两个部分:
首先,启动Test Signing启动项属性。实现的一个简单方法是在控制台中运行如下命令:
Bcdedit /set testsiging 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启动属性,会有上面的系统重启提示:
就这么简单,我总结为:一拖两点。
这个工具的知心的地方还没有完整展现出来,如果你看到曾经操纵过的历史文件已被整理妥善,以动态列表的情势表现,而你只要点击一下就能展开并选择,贵用户的心情会不会更高兴?如下图所示:
文章结束给大家分享下程序员的一些笑话语录:
警告
有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他 说, “你知道不知道这个东西会危害你的健康?我是说, 你有没有注意到香烟 盒上的那个警告(Warning)?”
小伙子说,“没事儿,我是一个程序员”。
那妇女说,“这又怎样?”
程序员说,“我们从来不关心 Warning,只关心 Error”