为sys/cat文件生成测试签名

为sys/cat文件生成测试签名

这几天想测试一下使用DpInst安装驱动,由于驱动程序没有签名因此安装失败,借此研究一下如何为Sys/cat文件生成测试签名。本文参考了看雪论坛上的一篇文章:win x64平台驱动测试数字签名,并对其中一些错误(可能是作者前后两次实验导致的偏差)做了修改。
驱动在开发/测试阶段时是没有数字签名的,所以一般都会开机后进入F8,选择禁止数字签名强制,但是这个办法的麻烦之处就是每次开机都要这样操作,要是虚拟机的话,一不小心错过了会很麻烦。MSDN上对这个有个解决方案就是使用测试签名。假设编译好的驱动的位置是: E:/WinDDk/my_test/objchk_win7_amd64/amd64
1. 制作一个测试使用的数字证书:
使用管理员权限打开命令行(可以用DDK提供的Checked/Free Build Environment)进入驱动的路径,然后输入以下命令:
makecert -r -pe -ss PrivateCertStore -n CN=Contoso.com(Test) My_Test.cer
(注:PrivateCertStore和Contoso.com(Test)可以随意命名),这个时候在目录下会生成一个My_Test.cer的测试证书;如果不使用管理员权限可能会失败;如果使用cmd可能会失败;

  1. 修改INF文件并生成目录文件:
    修改INF文件[version]节,在这个节点的最后增加一个
    CatalogFile.NtAMD64 = My_Test_AMD64.cat
    需要注意的是这个CatalogFile只有CatalogFile.NtAMD64 CatalogFile.Nt CatalogFile三个情况;然后将INF文件也放到驱动sys文件的路径下
    在Checked/Free Build Environment输入下面的命令:
    Inf2cat.exe /driver:E:/WinDDk/my_test/objchk_win7_amd64/amd64/ /os:7_x64
    如果想对其他系统平台生成cat文件,可以参考这篇文章: Inf2Cat应用的参数使用详细介绍(inf2cat生成cat文件)

  2. 对cat文件签名:
    使用以管理员权限打开WDK带的命令行,定位到驱动程序路径下,输入下面的命令:
    Signtool sign /a /v /s PrivateCertStore /n Contoso.com(Test) /t http://timestamp.verisign.com/scripts/timestamp.dll My_Test_AMD64.cat
    这里需要联网,不联网会有一个警告,因为它需要去生成时间戳;另外,执行Signtool时的/s和/n参数后面跟的字符串要分别对应执行makecert时的-ss -n参数的内容(原作者这块内容可能笔误写错了,导致签名失败)

  3. 注册测试数字证书:
    定位到驱动文件路径下,输入以下命令:
    certmgr.exe /add My_Test.cer /s /r localMachine root

  4. 对驱动文件签名:
    定位到驱动文件路径下,输入以下命令:
    Signtool sign /a /v /s PrivateCertStore /n Contoso.com(Test) /t http://timestamp.verisign.com/scripts/timestamp.dll xxxx.sys
    这里同样需要联网,不联网会有一个警告,因为它需要去生成时间戳;

  5. 安装测试签名:
    在目标机上,将xxx.sys xxx.inf My_Test.cer My_Test_AMD64.cat,以及certmgr.exe放在一个路径下,然后以管理员权限打开CMD命令行定位到这个目录,

输入以下命令来注册证书以及打开测试模式:
(这两步很重要,笔者尝试过在没有注册证书的目标机上用DpInst来安装签过名的sys和cat,结果就是没有成功安装驱动包)
certmgr.exe /add My_Test.cer /s /r localMachine root
certmgr.exe /add My_Test.cer /s /r localMachine trustedpublisher

cd c:/windows/system32/
bcdedit.exe /set TESTSIGNING ON

测试模式打开一次后,即使重启电脑也不用再次设置,除非显式的关闭它;窗体右下角会提示目前是在测试模式,关闭的命令是bcdedit.exe /set TESTSIGNING OFF
需要注意的事项:
1. 如果目标机上没有certmgr.exe,那么可以从主机上直接拷贝一个64位的certmgr.exe过去的;
2. 如果重新生成了sys文件而没有修改inf文件的话,那么只需要在生成sys文件后再次执行对驱动文件的重新签名即可;测试证书和目录文件都不需要重新生成;

猜你喜欢

转载自blog.csdn.net/ty13438189519/article/details/78470034