前些日子,研究修改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
安装时只需要按下图选择安装组件即可完成签名驱动的所需的全部环境:
安装好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,直到完成,接着点开“受信任的发布者”执行相同操作,至此,证书安装的工作也完成了。
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