驅動程序在64位簽名

1.inf文件說明 

微軟說明:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/inf-version-section

例子

[Version]
 
Signature="signature-name"
[Class=class-name]
[ClassGuid={nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}]
[Provider=%INF-creator%]
[ExtensionId={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}]
[LayoutFile=filename.inf [,filename.inf]... ]  (Windows 2000 and Windows XP)
[CatalogFile=filename.cat]
[CatalogFile.nt=unique-filename.cat]
[CatalogFile.ntx86=unique-filename.cat]
[CatalogFile.ntia64=unique-filename.cat]  (Windows XP and later versions of Windows)
[CatalogFile.ntamd64=unique-filename.cat]  (Windows XP and later versions of Windows)
[CatalogFile.ntarm=unique-filename.cat]  (Windows 8 and later versions of Windows)
[CatalogFile.ntarm64=unique-filename.cat]  (Windows XP and later versions of Windows)

DriverVer=mm/dd/yyyy,w.x.y.z
[PnpLockDown=0|1] (Windows Vista and later versions of Windows)
[DriverPackageDisplayName=%driver-package-description%]
[DriverPackageType=PackageType]


[Version]
Signature="$Windows NT$"
Class=SCSIAdapter
ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318}
Provider=%INF_Provider%
CatalogFile=aha154_ntx86.cat
DriverVer=01/29/2010

[SourceDisksNames]
;
; diskid = description[, [tagfile] [, <unused>, subdir]]
;
1 = %Floppy_Description%,,,\WinNT

[SourceDisksFiles.x86]
;
; filename_on_source = diskID[, [subdir][, size]]
;
aha154x.sys = 1,\x86

; ...

[Strings]
INF_Provider="Adaptec"
Floppy_Description = "Adaptec Drivers Disk"
; ...

看雪網址:https://bbs.pediy.com/thread-190884.htm

 

 測試簽名獲取: 

假設編譯好的驅動的位置是: E:\WinDDk\my_test\objchk_win7_amd64\amd64

1. 製作一個測試使用的數字證書: 

使用管理員權限打開命令行(我用的是VS自帶的64位命令行或者WDK命令行x64 Checked Build Environment)進入驅動的路徑,然後輸入以下命令:

makecert –r -pe -ss PrivateCertStore -n "CN=Contoso.com(Test)" My_Test.cer

MakeCert -r -pe -ss PrivateCertStore -n "CN=Contoso.com(Test)" testcert.cer

這個時候在目錄下會生成一個My_Test.cer的測試證書;如果不使用管理員權限可能會失敗;如果使用cmd可能會失敗;

2. 修改INF文件並生成目錄文件: 

一般INF文件都會有一個version節

[version]
Signature   = "$Windows NT$"
Class         = xxx
ClassGUID  = xxx
Provider     = xxx
DriverVer    = xxx

在這個節點的最後增加一個CatalogFile.NtAMD64 = My_Test_AMD64.cat

需要注意的是這個CatalogFile只有CatalogFile.NtAMD64 CatalogFile.Nt CatalogFile三個情況;然後將INF文件也放到驅動sys文件的路徑下

使用管理員權限打開WDK自帶的命令行進入到對應的驅動程序路徑,輸入下面的命令

Inf2cat.exe /driver:E:\WinDDk\my_test\objchk_win7_amd64\amd64\ /os:7_x64

這裏有幾個地方會出問題,首先是/driver:後面不能有空格,否則會出錯;其次是os:7_x64指的是win 7的x64平臺(這個時候它又不會區分AMD64和IA64了);最後是INF文件必須也在這個目錄下,格式不能出錯,DriverVer這個節點的值最容易出錯;

3. 對cat文件簽名:

使用以管理員權限打開WDK帶的命令行,定位到驅動程序路徑下,輸入下面的命令:

Signtool sign /a /v /s zcPrivateCertStore /n zcContoso.com(Test) /t http://timestamp.verisign.com/scripts/timestamp.dll My_Test_AMD64.cat

這裏需要聯網,不聯網會有一個警告,因爲它需要去生成時間戳;

4. 註冊測試數字證書:

以管理員權限打開WDK命令行,定位到驅動文件路徑下,輸入以下命令:

certmgr.exe /add My_Test.cer /s /r localMachine root

5. 對驅動文件簽名:

以管理員權限打開WDK命令行,定位到驅動文件路徑下,輸入以下命令:

Signtool sign /a /v /s zcPrivateCertStore /n zcContoso.com(Test) /t http://timestamp.verisign.com/scripts/timestamp.dll xxxx.sys

這裏需要聯網,不聯網會有一個警告,因爲它需要去生成時間戳;

6. 安裝測試簽名:

在目標機上,將xxx.sys xxx.inf My_Test.cer My_Test_AMD64.cat,以及certmgr.exe放在一個路徑下,然後以管理員權限打開CMD命令行定位到這個目錄,輸入以下命令來註冊證書以及打開測試模式:

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文件後再次執行對驅動文件的重新簽名即可;測試證書和目錄文件都不需要重新生成;

3. 最好都使用管理員權限來啓動命令行;不用每次都關閉WDK的命令行,事實上可以一直使用同一個WDK的命令行;如果覺得輸入太麻煩,那麼可以複製粘貼的;在目標機上的註冊證書,可以寫一個bat文件的;

4. 測試簽名可以使用預安裝來安裝;makecert、Inf2cat、Signtool、certmgr都在WDK中有;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章