How to sign a Driver by Windows …

前些日子,研究修改AMD Switchable Graphics Driver,並寫了一篇博文,文章末尾對修改版驅動因爲沒有MicroSoft Hardware簽名導致,驅動在64bit Win7系統上沒辦法默認啓動,每次需要手動選擇禁用驅動簽名模式的問題沒有繼續補充(當時確實不知道怎麼做。。。)

 

正好前幾周,心血來潮,修改了8.980.0.0的驅動,這次研究了一下驅動簽名的東西,特寫此博文。

 

首先,簽名驅動需要工具WDK,下載地址:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=11800

安裝時只需要按下圖選擇安裝組件即可完成簽名驅動的所需的全部環境:

How <wbr>to <wbr>sign <wbr>a <wbr>Driver <wbr>by <wbr>Windows <wbr>Driver <wbr>Kit

 

安裝好WDK後,進入安裝路徑下的bin目錄,然後根據你係統的平臺選擇是amd64/ia64/x86,這裏包含了證書生成工具及驅動簽名工具,我們的第一步就是生成一個我們自己的驅動簽名證書:

CMD下執行:

D:\WinDDK\7600.16385.1\bin\amd64\makecert.exe -r -sv sign.pvk -n "CN=Sign For AMD Switchable Ego Mod Driver" -a sha1 sign.cer

 

引號裏CN=xxxx,因爲我們做的是根證書,所以這個填的是證書的使用者及頒發者的名字。

如果一切正常的話,我們會得到兩個文件一個證書公鑰sign.cer,一個是證書私鑰sign.pvk,爲了方便在生成私鑰時提示輸入密碼的話請選擇“無”。

 

得到了pvk和cer,我們將這兩個文件合併成pfx,這樣再簽名驅動的時候會方便很多:

CMD下執行:

D:\WinDDK\7600.16385.1\bin\amd64\pvk2pfx.exe -pvk sign.pvk -spc sign.cer -pfx sign.pfx

 

到此我們就得到了簽名所需要的全部證書,接下來就是將我們的證書安裝到系統裏:

運行窗口輸入:certmgr.msc

點開“受信任的根證書頒發機構”右鍵點擊“證書”,選擇“所有任務”下的“導入”,然後選擇我們剛纔生成的sign.cer,一路next,直到完成,接着點開“受信任的發佈者”執行相同操作,至此,證書安裝的工作也完成了。

How <wbr>to <wbr>sign <wbr>a <wbr>Driver <wbr>by <wbr>Windows <wbr>Driver <wbr>Kit


PS:實際上本人用的並不是certmgr.msc,而是用的mmc自己添加的證書管理的方式,這樣可以直接將證書安裝至計算機而不是當前用戶,具體操作方式可以google。

 

證書環境準備就緒,下面就開始通過修改後的inf生成cat及對驅動簽名的工作了:

CMD下執行:

D:\WinDDK\7600.16385.1\bin\selfsign\Inf2Cat.exe

/driver:D:\Driver\Graph\ATI\AMD_8.980.0.0_Catalyst\Packages\Drivers\Display\W76A_INF

/os:7_X64 /verbose

/driver:後面是我們修改版驅動的inf的所在目錄,/os:後面的是驅動的試用平臺,/verbose表示顯示操作信息,其他命令和命令說明請參閱msdn:http://msdn.microsoft.com/en-us/library/windows/hardware/ff547089(v=vs.85).aspx

 

PS:修改的驅動如果含有cat文件,最好先刪除之前的cat,然後再執行上述生成新的cat的操作。

 

操作成功後在inf會生成一個cat文件,cat的名字是由inf指定的:

[Version]
Signature="$Windows NT$"
Provider=%ATI%
ClassGUID={4D36E968-E325-11CE-BFC1-08002BE10318}
Class=Display
DriverVer=06/11/2012, 8.980.0.0000
CatalogFile=C7141411.CAT

這個cat的名稱要保持和inf裏CatalogFile的一致!

 

生成了新的cat文件,就要對cat進行簽名:

CMD下執行:

D:\WinDDK\7600.16385.1\bin\amd64\SignTool.exe sign /v /f sign.pfx /t http://timestamp.verisign.com/scripts/timstamp.dll "D:\Driver\Graph\ATI\AMD_8.980.0.0_Catalyst\Packages\Drivers\Display\W76A_INF\C7141411.cat"

 

sign.pfx就是我們之前生成的sign.pfx,/t 後面的是時間戳的地址,具體說明依然參見msdn(廣告:msdn,windows開發者最好的老師!):http://msdn.microsoft.com/en-us/library/windows/hardware/ff551778(v=vs.85).aspx

 

簽名好了,當然需要驗證一下簽名是不是正確,正好也可以驗證一下我們的證書環境是不是確實安裝OK:

CMD下執行:

D:\WinDDK\7600.16385.1\bin\amd64\SignTool.exe verify /v /pa "D:\Driver\Graph\ATI\AMD_8.980.0.0_Catalyst\Packages\Drivers\Display\W76A_INF\C7141411.cat"

 

驗證過了之後,其實修改版驅動的簽名工作,基本已經算是完成了,下面就可以安裝驅動,然後開測試模式進行使用的,但是爲了完整遵照MS的規格,我們還需要對驅動文件進行簽名:

CMD下執行:

SignTool sign /v /f sign.pfx /t http://timestamp.verisign.com/scripts/timstamp.dll "D:\Driver\Graph\ATI\AMD_8.980.0.0_Catalyst\Packages\Drivers\Display\W76A_INF\B140419\atikmpag.sys"
SignTool sign /v /f sign.pfx /t http://timestamp.verisign.com/scripts/timstamp.dll "D:\Driver\Graph\ATI\AMD_8.980.0.0_Catalyst\Packages\Drivers\Display\W76A_INF\B140419\atimpc32.dll"

 

簽名方式和簽名cat是一樣的,這裏說一下AMD驅動的一些注意事項,AMD大部分驅動文件(*.*_格式)是採用MSLZ壓縮方式保存的(搞過WinXP系統盤修改的,應該都知道),可以直接使用expand對其解壓得到源文件,如果你想偷懶可以用7zip直接批量解壓:P(批處理的字符串操作我是不懂的,所以沒有寫一個完善的批處理出來)。

得到了全部AMD驅動的源文件,將inf裏[SourceDisksFiles]下的所以文件全部簽名了就ok了,可以直接for寫一個批處理操作。

 

忙活了半天,我們的簽名驅動總算是做完了,安裝完驅動,用管理員身份執行CMD,然後執行一下:

bcdedit /set testsigning on

重啓,驅動就可以直接加載了,但是開啓測試模式,桌面會有水印,可以Google下去水印的方法,本文不再贅述,Bye-Bye~

 

PS:關閉測試模式命令:bcdedit /set testsigning off

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