提示:本篇文章旨在记录个人学习笔记,如有错误欢迎各位大佬指出。未经许可,不可擅自转载!
概要
我们都知道驱动一般有三个文件(sys\inf\cat),但是呢,我们自己写的驱动一般是没办法运行在微软的系统上的,所以这时候就需要拿到微软的驱动签名,系统才认为你这驱动是安全的,本文就是介绍如何获取微软的签名。
驱动签名流程
1.准备
- 驱动要签名,首先驱动要符合微软签名的驱动程序的要求,保证你的驱动是安全的;其次需要微软EV证书以及WDK工具包。这里提供测试驱动:signaturetest驱动程序
- 路径:
.\signaturetest\signturetest\x64\Release
2.创建CAB文件
典型的 CAB 文件提交必须包含:
- 驱动程序本身,例如 signaturetest.sys
- 驱动程序 INF 文件,仪表板使用它来简化签名过程。
- 符号文件,用于调试信息。 例如,Echo.pdb。 Microsoft 自动崩溃分析工具需要使用 .pdb 文件。
- 目录 .CAT 文件是必需的,仅用于公司验证。 Microsoft 会重新生成目录文件,并替换已提交的任何目录文件。
1.以管理员身份启动CMD,执行命令“MakeCab /?”验证工具是否存在,例如:
2.创建一个以.ddf后缀的文件,以我提供的样例写法如下:
;*** signaturetest.ddf example
;
.OPTION EXPLICIT ; Generate errors
.Set CabinetFileCountThreshold=0
.Set FolderFileCountThreshold=0
.Set FolderSizeThreshold=0
.Set MaxCabinetSize=0
.Set MaxDiskFileCount=0
.Set MaxDiskSize=0
.Set CompressionType=MSZIP
.Set Cabinet=on
.Set Compress=on
;Specify file name for new cab file
.Set CabinetNameTemplate= signaturetest.cab
; Specify the subdirectory for the files.
; Your cab file should not have files at the root level,
; and each driver package must be in a separate subfolder.
.Set DestinationDir= signaturetest
;Specify files to be included in cab file
D:\Project\signaturetest.inf
D:\Project\signaturetest.sys
当存在多个驱动需要签名时,样例如下:
;*** Submission.ddf multiple driver example
;
.OPTION EXPLICIT ; Generate errors
.Set CabinetFileCountThreshold=0
.Set FolderFileCountThreshold=0
.Set FolderSizeThreshold=0
.Set MaxCabinetSize=0
.Set MaxDiskFileCount=0
.Set MaxDiskSize=0
.Set CompressionType=MSZIP
.Set Cabinet=on
.Set Compress=on
;Specify file name for new cab file
.Set CabinetNameTemplate=Echo.cab
;Specify files to be included in cab file
; First Driver
.Set DestinationDir=DriverPackage1
C:\DriverFiles\DriverPackage1\Driver1.sys
C:\DriverFiles\DriverPackage1\Driver1.inf
; Second driver
.Set DestinationDir=DriverPackage2
C:\DriverFiles\DriverPackage2\Driver2.sys
C:\DriverFiles\DriverPackage2\Driver2.inf
3.输入以下命令以创建 CAB 文件
D:\Project> MakeCab /f "D:\Project\signaturetest.ddf
4.MakeCab 的输出应显示创建的 CAB 文件中的文件数。 在本例中,应该有两个文件。
D:\Project> MakeCab /f "D:\Project\signaturetest.ddf
Cabinet Maker - Lossless Data Compression Tool
17,682 bytes in 2 files
Total files: 2
Bytes before: 17,682
Bytes after: 7,374
After/Before: 41.70% compression
Time: 0.20 seconds ( 0 hr 0 min 0.20 sec)
Throughput: 86.77 Kb/second
5.在 Disk1 子目录中找到 CAB 文件。 可以在文件资源管理器中选择 CAB 文件,以验证它是否包含所需的文件。
3.对CAB文件进行签名
由于需要用到公司的EV证书进行CAB文件签名,这里就不向大家展示了。以下命令使用 SHA256 证书/摘要算法/时间戳对 CAB 文件进行签名:
D:\Project> SignTool sign /f certificateName.pfx /p password /n "Company Name" /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td sha256 /v "D:\Project\signaturetest\Disk1\signaturetest.cab"
4.登录微软合作伙伴中心提交CAB文件
1.转到微软合作伙伴中心硬件仪表板并使用凭据登录。
2.选择“提交新硬件”。
3.在“包和签名属性”部分,输入驱动程序提交的产品名称。 此名称可用于搜索和整理驱动程序提交。
4.取消选中这两个测试签名选项。
5.对于“请求的签名”,选择希望包含在驱动程序包中的签名。
6.向下浏览页面,然后选择“提交”。
7.签名过程完成后,请从硬件仪表板下载已签名的驱动程序。
8.如果需要微软推送,则要创建一个“New shipping label”的流程进行推送。
5.下载并验证驱动
完成以下步骤以确保驱动程序已正确签名。
- 下载提交文件后,解压缩驱动程序文件。
- 以管理员身份打开命令提示符窗口。
- 输入以下命令来验证驱动程序是否已按预期签名。
D:\Project> SignTool verify signaturetest.Sys
- 若要列出其他信息,并让 SignTool 验证包含多个签名的文件中的所有签名,请输入以下命令:
D:\Project> SignTool verify /pa /ph /v /d signaturetest.Sys
- 要确认驱动程序的 EKU,请完成以下步骤。
- 打开 Windows 资源管理器,找到二进制文件。 选择并按住(或右键单击)该文件并选择“属性”。
- 在“数字签名”选项卡上,选择签名列表中列出的项目。
- 选择“详细信息”,然后选择“查看证书”。
- 在“详细信息”选项卡上,选择“增强型密钥用法”。
总结
以上就是本次的驱动签名的教程,MSDN上记录的也很详细,有是推荐去微软原博文学习。对了,微软宣布自 2023 年 3 月 1 日起,Windows Update 不再发布针对零售受众的验证签名驱动程序。以前可以单个单个的驱动提交给微软(非cab文件),现在不行了,系统在升级,驱动签名也在变化,还有很长的道路要走,再接再厉,慢慢成长!
参考
【1】对Windows驱动程序进行签名
【2】SignTool的使用