64位驱动签名工具64Signer

【作者:张佩】【原始URL:http://www.yiiyee.cn/Blog/64signer/

注,此工具业已过时,无存在之必要。许多人想寻求稳妥的64位系统之签名绕过方法,此处做统一回复,没有可能。唯文中所涉及之技术点,犹可供参考。删除下载链接,而留此文。

  • 背景介绍

微软对于自Vista开始的64位OS有新的数字签名策略,即所有内核驱动都必须是经过可信机构签发过数字证书的,否则系统拒绝加载,其目的是为了加强系统安全防护,使得一干惯于偷偷摸摸、不知所自何来的内核模块无法在系统中容身。但它却也给正经的内核开发人员带去了一个麻烦:开发过程中会不断生成新的驱动镜像文件,开发者不可能将每一个内部版本都拿去申请数字签名,那样不仅太麻烦,而且会大大延长开发周期。

微软当然也考虑到了这一点,它提供了一个可以禁止签名检验的开机启动项。要运用此启动项,用户必须在启动电脑的时候,及时在键盘上按下F8键,在出来的启动菜单中选择倒数第二个启动项:Disable Driver Signature Enforcement.

这看上去很省心,但你如果再了解得深入一点,就会发现它其实很麻烦。

首先开机启动项只能手动选择,系统再次重启的时候,它会忘记上一次所选择的启动项,用户如果不再次及时按下F8按钮的话,就会错过机会,只能谋求下一次重启时的机会。如果开发者需要不断地进行重启测试的话,就必须有一个专人站在边上,作用就是及时地按下F8并在出现的启动菜单中选择倒数第二项。这是很无聊并痛苦的事情,所以大多数开发者不愿采用这种方法。

其次就是在Win8系统上,用户在系统开机时已没有通过F8调出启动菜单的机会。这一点虽然可以避免,但过程却也复杂,这里不展开介绍。

看到一扇关闭的窗户,不必急着沮丧,或许旁边正有一扇为你敞开的大门。微软还提供了一项称为Test Sign的技术,却正可以较好解决内核开发者的这项困扰。只不过它的实现方法比较复杂,虽然微软提供了详细的文档,但不到万不得已,开发者一般不会去详细研究其内容。从步骤上来讲,这个技术分两个实现步骤:

首先,启动Test Signing启动项属性。实现的一个简单方法是在控制台中运行如下命令:

Bcdedit /set testsiging true

此命令的意思是为当前系统启动项打开名为“TestSigning”的属性。如果再运行下面的命令,就能看到这个属性被列出:

Bcdedit /enum {current}

bcd-testsigning

这个属性会在下次系统重启时生效。系统会一直记住这个属性,重启系统后也依然有效。

第二是用一个测试证书对你的内核镜像文件(一般即.sys文件)进行签名。用户对此可能有点困惑,稍微介绍一下。原来如果认证机构为内核驱动签名的时候,会颁发一个受信证书,这个证书最终会安装到用户系统中,而对镜像文件所进行的签名操作,就是把证书信息写到文件中。系统通过验证这个证书来确认其受信与否。获取这个证书首先需要银子,其次也需要时间。但如果我自己能够给自己颁发一个临时证书,又怎样呢?那当然又省心又快捷了。微软提供了这样的策略:在Test Signing模式下,测试证书能和其它商业证书一样工作无误。

那么这第二个步骤其实又能细分为两个小步骤:1. 创建测试证书;2.用测试证书为驱动签名。微软提供了相关工具,包含在最新的SDK或DDK中。简单来讲,用户应该使用makecert.exe创建证书,再用signtool.exe进行镜像文件签名。微软所提供的工具不止这两个,但这两个确实是最重要的。遗憾的是这些工具都只能运行在控制台中,用户界面不算友好,参数也很晦涩。这大概是为什么大多数内核开发者都不太使用这些工具的原因?

工具使用方法,请参考微软相关文档。

  • 使用64Signer

64signer

好了,现在一个崭新的新星出现了。64Signer能帮助你一步到位。它不仅界面清晰明了,并且功能完整智能。开发者只要简单地进行一次拖拽,点最多两个按钮,就可以完成系统设置和文件签名等一系列的工作。深渊隐藏在坚实的桥面下,用户只需开车通过,而无需流连惊骇

工具的操作方法其实已简单明了地列在界面上(红色字体部分),但我还是愿意详细解释一下使用过程:

  1. 运行工具后它能够正确显示当前系统的Test Signing设置。如果此属性已被打开,则“Enable Test Signing Option”是自动钩住的;否则用户需点击一下(第一个点击)。
  2. 然后用户应将驱动文件拖拽到用户界面中来,或者手动输入路径,或者点击Open按钮从而通过文件对话框来选择,都可以(一次拖拽)。
  3. 64Signer_success最后点击Sign按钮(二次点击)。如果签名成功,用户能看到如右图所示提示成功的对话框。
  • 读者如果看到有失败的情况,请发邮件告诉我。

64Signer_reboot

在关闭工具的时候,工具如果检测到你改变了Test Signing启动属性,会有如右图所示的系统重启提示。

整个过程就这么简单,我总结为:一拖两点。

这个工具的贴心之处还没有完全展现出来,如果你看到曾经操作过的历史文件已被整理妥当,以动态列表的形式显示,而你只要点击一下就能展开并选择,贵用户的心情会不会更开心?如下图所示:

64Signer_fileList

 补充

在有些启用了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.

60,419 total views, 8 views today

《64位驱动签名工具64Signer》有69个想法

  1. 你好 使用你的工具软件签名提示成功,在Testmode模式下安装时候,还是提示没有数字签名,,,,

    1. 64Signer到目前为止没遇到过不成功的情况。你是什么系统?被签名的文件上,右键看属性,有“数字签名”属性页吗?
      必要时,我可以远程帮你看一下。

      1. 你好!请问下现在WIN10 64位 可以用吗?? 我有哥驱动 是虚拟的MULTIKEY.SYS WIN7 64位 好用, WIN10 就是装不上 需要签名!

  2. 谢谢你了 , 昨天我重新试了,虽然提示没有数字签名但是安装成功了, 非常感谢。不过我们公司部不叫我使用这个工具, 说叫我自己写一个工具。能不能发一些关于如何伪造签名的详细步骤资料呢!

    1. 你简直莫名其妙。你把问题弄清楚了,再写comment不好吗?我现在也不知道你到底能用64Signer不能?64系统上,一定要有数字签名才能够使用。你又说签名不成功,又说驱动安装成功。这是自相矛盾的。你能确认好了再来吗?不要把模棱两可的信息推给别人。64Signer已经有几百个人成功使用过,如果你真碰到了问题,我很高兴看一下。

      TestSign不是伪造签名,它的名字就叫Test Sign,MS提供了工具SignTool.exe,MSDN上就有介绍文档,通过搜索引擎,你能找到更多资料。你可以直接使用SignTool。

  3. 你那有没有使用微软提供的工具进行签名的例子呢, 如果方便可以给提供一个么?我的windows 7 64位系统。

  4. 你好,我是用了dseo和64signer,对WDK7600中的SRC目录下编译后的驱动例子,进行签名,总是提示失败,让我看日志,我也没找到日志在那里,不知道为啥?

    1. 你不一定要用WDK编译出来的sys文件,任意一个镜像文件(.exe/.msi/.dll/.sys)都可以被签名。会遇到问题吗?可以的话,给我发封邮件,我看能不能远程到你的主机上看一下。

      1. 你好 我是通过 signtool sign /a XXX.sys 签名成功后,在用signtool verify XXX.sys 测试的时候报错,说证书不受信任的信任提供者。

  5. 很好用,我的智能手机的驱动安装成功,展讯芯片的,感叹号没有了。重启电脑后也不需要签名啦。彻底摆脱重启电脑按F8

  6. 我64位的WIN7系统终于可以用原厂平台刷机啦,再这里很感谢张佩老师开发的工具,这个工具用起来简单,实用,方便。就是右下角有个水印,怎么解决呢

  7. 张老师,您好,我用SignTool.exe签名了SYS和DLL,但是每次在WIN8-64位安装的时候仍然会报52的错,请问您能提供一些帮助吗?

  8. 张老师您好,我使用64signer给我的sys文件签名,无论是否Enable Test signing option选项都显示签名成功但是我用driver monitor安装我的驱动程序的时候,显示的是:“无法验证此文件的数字签名。某软件或硬件最近有所更改,可能安装了签名错误或损毁的文件,或者安装的文件可能是来路不明的恶意软件。”请问这个应该如何解决

      1. 买的是信任机构颁发的证书,驱动在安装时也能显示证书信息,安装后在设备管理器中发现sys文件未签名这个什么情况

        1. 微软有一个针对SHA2证书的补丁,会引起特定平台下签名失败的情况。你可以在网上搜一下,看是否有类似情况。

          1. 这是可参考的关于SHA-2证书的讨论:https://social.technet.microsoft.com/Forums/en-US/e97929e9-6451-499d-b56f-109f67489887/is-there-an-update-that-enables-sha2-certificates-for-win7?forum=w7itprosecurity

  9. 给sys文件签名了,右键属性能看到数字签名选项,但电子邮件和时间戳显示”不可用”,设备管理器仍然显示驱动未签名.求帮助!!!

  10. 你好,我的电脑是DELL 14-N4050 ,win7家庭普通版,用了64signer,驱动也签名了,也设置test signing 了,桌面右下角有水印,可驱动还是一直加载不上,bcdedit 查test sign是yes,不知道是什么原因呢?

      1. 这应该是code出错,你如果是用KMDF编写的驱动,调试AddDevice和EvtPrepareHardware两个函数,它们如果失败,驱动加载不成功。

  11. 这个根本就不能用啊,出错之后提示查看日志。又是骗人的东西,我不知道你说的“从来没遇到问题”是什么情况。简直傻逼。

  12. 这个工具有用,我的驱动能在64位win7测试模式下安装,但为什么在win8系统下安装驱动又提示没有数字签名信息,需要强制关闭数字签名才能安装,不通用吗?

  13. 我的win7系统虽然提示已经签名成功,可是我的驱动还是装不上去,之前inf文件被修改过了,在32位系统上是可以用的,但是在64位系统就装不上。不知道什么原因

  14. 请问你是如何检测是否开启测试模式的?我也需要这样的功能。
    我在自己的程序中也需要检测是否开启测试模式的功能。
    能否提供一些代码或者提供一些相关的API函数,谢谢!

  15. 我用张帆《windows驱动开发技术详解》里的第一个NT驱动以及他的加载NT驱动的代码来测试的。在XP下OK。然后在WIN7旗舰版SP1(VM虚拟机里的系统)里用改工具给helloddk.sys(XP下编译的32位SYS)上了数字签名,查看到是有签名不过邮箱和时间戳不可用。工具勾选了TestSigning也重启了。然后net start helloddk还是提示“发生系统错误1275,此驱动程序被阻止加载”

  16. 张老师,您好!我是刚接触Windows的驱动,有一个自编的PCI驱动,有如下情况,烦请您帮我解答:
    1 win7 64位系统,刚开始插上PCI卡时能发现PCI内存控制器,并可以安装上自编的PCI驱动(.inf和.sys文件,64位的,未数字签名),在设备驱动器那里可以看到刚安装的驱动。重启后按F8 ->禁止签名,进入系统后能正常使用。
    2 有时候再开机后在设备驱动器中看不到了安装的那个设备,扫描也没用。后来通过添加过时硬件,在里面找到安装过的那个设备,能添加成功,但重启进入系统时蓝屏。关掉电源再启动又不蓝屏了。这是怎么回事呢?
    3 看到您这篇文章后,按照您说的方法操作,把安装后的那个.sys文件用64signer软件签名后,不掉点重启和掉电开机进入系统时都出现蓝屏。
    您能帮我分析出问题出在哪吗?不胜感激….

  17. 您好, 非常感谢您的工具,但是我使用时候, 提示:

    mirror.sys is failed to be signed, refer to log file.

    我签的就是winddk自带的mirror driver的驱动。

    非常感谢!

  18. 我的电脑可以正常用64Signer,有另外一个问题请教:客户的64位系统会提示一个驱动程序认证没有通过,我的电脑是可以通过的。我想重新签名试一下,64Signer提示已签过了。这种情况有没有好的建议。

  19. 请问这个样子与开机禁用签名有什么区别呢 是其他没签名的驱动没办法加载 还是其他的都可以

  20. 受益于贵地,故反馈个小笔误。
    文章中的 “Bcdedit /set testsiging true” 写错了, testgigning 少写了一个n哈。

  21. 为啥我还是不能安装啊,我运行了你的程序后进入我的那个文件点属性之后发现是有签证了,但是真正在安装过程中还是出现那个签证出错的问题,请问是怎么回事啊,我的软件是Intel 的System studio

  22. 张老师你好:
    我这边是window 10 64 系统,我使用64signer给我的sys文件签名,无论是否Enable Test signing option选项都显示签名成功,但是我用手动选择“更新驱动程序软件”安装我的驱动程序的时候,显示的是:“Window 已找到设备的驱动程序软件,但在试图安装它时遇到错误。第三方INF不包含数字签名信息。”请问这个应该如何解决

  23. 谢谢博主!不知道对该博文是否还有更新。Win10的sign要求更高了,看起来secure boot打开了必须WHQL driver才能工作,这是我实验结果,MSDN上看了多次也没找到哪里明确说这一点。另外就是cross certificate,普通的商业证书比如厂商从verisign等机构购买的证书去sign自己的driver, 但如果不是微软code sign的cross cert是否还得必须开test mode?我用两家的driver做实验,发现没有cross cert的一个不用开test mode,而另外一个必须开test mode, 迷惑了。

  24. 最近看openssl 的code ,博主这个工具是基于开源的工具实现的么?
    很想自己做一个,博主能否告知下实现方法,非常感谢

发表评论

电子邮件地址不会被公开。