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.

53,069 total views, 16 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 ,博主这个工具是基于开源的工具实现的么?
    很想自己做一个,博主能否告知下实现方法,非常感谢

android118进行回复 取消回复

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