<commit_before>
Windows Driver Kits 对驱动 sys 文件数字签名的方法
------------------------------------------------------

------------------------------------------------------------------------------

参考文档：

Digital Signatures for Kernel Modules on Windows

https://msdn.microsoft.com/en-us/library/windows/hardware/dn653559(v=vs.85).aspx

里面可以下载一个 kmsigning.doc 文件。

------------------------------------------------------------------------------

Cross-Certificates for Kernel Mode Code Signing

https://msdn.microsoft.com/windows/hardware/drivers/install/cross-certificates-for-kernel-mode-code-signing

Windows 64位内核驱动和内核代码签名(Kernel Signing)指南

http://www.wosign.com/Support/Windows_Kernel_Signing_guide.htm

------------------------------------------------------------------------------

给 minispy Samples 程序的驱动签名（测试用）
==============================================

先创建一个文件夹，例如：Release，把编译好的 minispy.inf、minispy.sys 和 minispy.exe 都拷贝进来。
再打开 VS 2015（或别的 VS 版本）的 x86 或 x64 命令行工具，并切换到这个 Release 目录，然后执行下面的命令。

签名时不用 cat 文件也可以，这里只是演示方法。

注：makecert.exe, certmgr.exe, inf2cat.exe, signtool.exe 安装好 WDK 应该就自带了。

----------------------

生成测试(Test)证书：

范例（格式）: makecert -r -pe -ss PrivateCertStore -n CN=Contoso.com(Test) ContosoTest.cer

实例:

makecert -r -pe -ss minispyCertStore -n CN=skyinno.com(Test) minispyCrossCertificate.cer

其中 “CN=skyinno.com(Test)” 可以定义成别的，跟下面保持一致即可。

把证书添加到根证书和信任发布者里：

certmgr.exe -add minispyCrossCertificate.cer -s -r localMachine root
certmgr.exe -add minispyCrossCertificate.cer -s -r localMachine rootpublisher
certmgr.exe -add minispyCrossCertificate.cer -s -r localMachine trustedpublisher

certmgr.exe -add -all MSCV-ThawteClass3.cer -s -r localMachine root
certmgr.exe -add -all MSCV-ThawteClass3.cer -s -r localMachine trustedpublisher

删除证书：

certmgr.exe -del minispyCrossCertificate.cer -s -r localMachine root
certmgr.exe -del minispyCrossCertificate.cer -s -r localMachine trustedpublisher

注：

最直接的证书管理方式是，运行里输入“certmgr.msc”，打开 Windows 证书管理器，找到 minispyCertificateStore，把下面所有存在的证书删掉再生成。
因为如果 minispyCertificateStore 下面有多个相同 CN 名的证书，可能导致签名失败，所以要最好保证里面相同  CN 名的只有一个证书。

----------------------

生成 cat 文件：

格式：inf2cat.exe /driver:{Your_CAT_File_Path} /os:{Your_OS_String}

Vista_x64下：

inf2cat.exe /driver:C:\Project\OpenSrc\Windows\Windows-driver-samples\filesys\miniFilter\minispy\release /os:Vista_x64

Win7_x64下：

inf2cat.exe /driver:C:\Project\OpenSrc\Windows\Windows-driver-samples\filesys\miniFilter\minispy\release /os:7_x64

/os: 的值定义可以使用 inf2cat.exe -h 命令查询。

----------------------

对 cat 文件签名：

范例（格式）: signtool sign /v /ac CrossCertificateFile /s SPCCertificateStore /n SPCSubjectName /t http://timestamp.verisign.com/scripts/timestamp.dll minispy.cat

实例:

signtool sign /v /ac minispyCrossCertificate.cer /s minispyCertificateStore /n skyinno.com(Test) /t http://timestamp.verisign.com/scripts/timstamp.dll minispy.cat

signtool sign /v /ac MSCV-ThawteClass3.cer /a /s minispyCertificateStore /n skyinno.com(Test) /t http://timestamp.verisign.com/scripts/timstamp.dll minispy.cat

校验：

signtool verify /kp minispy.cat

signtool verify /kp /c minispy.cat minispy.inf

----------------------

对 sys 驱动文件签名：

范例（格式）: signtool sign /v /ac CrossCertificateFile /s SPCCertificateStore /n SPCSubjectName /t http://timestamp.verisign.com/scripts/timestamp.dll winloaddriver.sys

实例:

signtool sign /v /ac minispyCrossCertificate.cer /s minispyCertificateStore /n skyinno.com(Test) /t http://timestamp.verisign.com/scripts/timstamp.dll minispy.sys

signtool sign /v /ac MSCV-ThawteClass3.cer /s minispyCertificateStore /n skyinno.com(Test) /t http://timestamp.verisign.com/scripts/timstamp.dll minispy.sys

校验：

signtool verify /kp minispy.sys

signtool verify /kp /c minispy.cat minispy.sys

----------------------

加载 minispy.sus

sc start minispy

------------------------------------------------------------------------------

参考文章：

Creating Test Certificates

https://msdn.microsoft.com/zh-cn/windows/hardware/drivers/install/creating-test-certificates

MakeCert 的参数说明

https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff548309(v=vs.85).aspx

signtool 的参数说明

https://msdn.microsoft.com/library/windows/hardware/ff551778

signtool sign /v /ac minispyCrossCertificate.cer /s minispyCertificateStore /n skyinno.com(Test) /t http://timestamp.verisign.com/scripts/timstamp.dll minispy.sys

------------------------------------------------------------------------------
<commit_msg>Changes: Minor modifications;<commit_after>
Windows Driver Kits 对驱动 sys 文件数字签名的方法
------------------------------------------------------

------------------------------------------------------------------------------

参考文档：

Digital Signatures for Kernel Modules on Windows

https://msdn.microsoft.com/en-us/library/windows/hardware/dn653559(v=vs.85).aspx

里面可以下载一个 kmsigning.doc 文件。

------------------------------------------------------------------------------

Cross-Certificates for Kernel Mode Code Signing

https://msdn.microsoft.com/windows/hardware/drivers/install/cross-certificates-for-kernel-mode-code-signing

Windows 64位内核驱动和内核代码签名(Kernel Signing)指南

http://www.wosign.com/Support/Windows_Kernel_Signing_guide.htm

------------------------------------------------------------------------------

给 minispy Samples 程序的驱动签名（测试用）
==============================================

先创建一个文件夹，例如：Release，把编译好的 minispy.inf、minispy.sys 和 minispy.exe 都拷贝进来。
再打开 VS 2015（或别的 VS 版本）的 x86 或 x64 命令行工具，并切换到这个 Release 目录，然后执行下面的命令。

签名时不用 cat 文件也可以，这里只是演示方法。

注：makecert.exe, certmgr.exe, inf2cat.exe, signtool.exe 安装好 WDK 应该就自带了。

----------------------

生成测试(Test)证书：

范例（格式）: makecert -r -pe -ss PrivateCertStore -n CN=Contoso.com(Test) ContosoTest.cer

实例:

makecert -r -pe -ss minispyCertStore -n CN=skyinno.com(Test) minispyCrossCertificate.cer

其中 “CN=skyinno.com(Test)” 可以定义成别的，跟下面保持一致即可。

把证书添加到根证书和信任发布者里：

certmgr.exe -add minispyCrossCertificate.cer -s -r localMachine root
certmgr.exe -add minispyCrossCertificate.cer -s -r localMachine rootpublisher
certmgr.exe -add minispyCrossCertificate.cer -s -r localMachine trustedpublisher

certmgr.exe -add -all MSCV-ThawteClass3.cer -s -r localMachine root
certmgr.exe -add -all MSCV-ThawteClass3.cer -s -r localMachine trustedpublisher

删除证书：

certmgr.exe -del minispyCrossCertificate.cer -s -r localMachine root
certmgr.exe -del minispyCrossCertificate.cer -s -r localMachine trustedpublisher

注：

最直接的证书管理方式是，运行里输入“certmgr.msc”，打开 Windows 证书管理器，找到 minispyCertStore ，把下面所有存在的证书删掉再生成。
因为如果 minispyCertStore 下面有多个相同 CN 名的证书，可能导致签名失败，所以要最好保证里面相同 CN 名的只有一个证书。

----------------------

生成 cat 文件：

格式：inf2cat.exe /driver:{Your_CAT_File_Path} /os:{Your_OS_String}

Vista_x64下：

inf2cat.exe /driver:C:\Project\OpenSrc\Windows\Windows-driver-samples\filesys\miniFilter\minispy\release /os:Vista_x64

Win7_x64下：

inf2cat.exe /driver:C:\Project\OpenSrc\Windows\Windows-driver-samples\filesys\miniFilter\minispy\release /os:7_x64

Win7_x86下：

inf2cat.exe /driver:C:\Project\OpenSrc\Windows\Windows-driver-samples\filesys\miniFilter\minispy\x86-Release /os:7_x86

/os: 的值定义可以使用 inf2cat.exe -h 命令查询。

----------------------

对 cat 文件签名：

范例（格式）: signtool sign /v /ac CrossCertificateFile /s SPCCertificateStore /n SPCSubjectName /t http://timestamp.verisign.com/scripts/timestamp.dll minispy.cat

实例:

signtool sign /v /ac minispyCrossCertificate.cer /s minispyCertStore /n skyinno.com(Test) /t http://timestamp.verisign.com/scripts/timstamp.dll minispy.cat

signtool sign /v /ac MSCV-ThawteClass3.cer /a /s minispyCertStore /n skyinno.com(Test) /t http://timestamp.verisign.com/scripts/timstamp.dll minispy.cat

校验：

signtool verify /kp minispy.cat

signtool verify /kp /c minispy.cat minispy.inf

----------------------

对 sys 驱动文件签名：

范例（格式）: signtool sign /v /ac CrossCertificateFile /s SPCCertificateStore /n SPCSubjectName /t http://timestamp.verisign.com/scripts/timestamp.dll winloaddriver.sys

实例:

signtool sign /v /ac minispyCrossCertificate.cer /s minispyCertStore /n skyinno.com(Test) /t http://timestamp.verisign.com/scripts/timstamp.dll minispy.sys

signtool sign /v /ac MSCV-ThawteClass3.cer /s minispyCertStore /n skyinno.com(Test) /t http://timestamp.verisign.com/scripts/timstamp.dll minispy.sys

校验：

signtool verify /kp minispy.sys

signtool verify /kp /c minispy.cat minispy.sys

----------------------

加载 minispy.sus

sc start minispy

------------------------------------------------------------------------------

参考文章：

Creating Test Certificates

https://msdn.microsoft.com/zh-cn/windows/hardware/drivers/install/creating-test-certificates

MakeCert 的参数说明

https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff548309(v=vs.85).aspx

signtool 的参数说明

https://msdn.microsoft.com/library/windows/hardware/ff551778

signtool sign /v /ac minispyCrossCertificate.cer /s minispyCertStore /n skyinno.com(Test) /t http://timestamp.verisign.com/scripts/timstamp.dll minispy.sys

------------------------------------------------------------------------------

{'fraction_non_alphanumeric': 0.22510338661003687, 'fraction_numerical': 0.012406393204426065, 'mean_word_length': 2.659713701431493, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 10, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1216927', 'n_tokens_mistral': 3589, 'n_tokens_neox': 3568, 'n_words': 605}