如何检查驱动程序代码签名策略已启用且实际有效?

时间:2015-12-09 09:19:58

标签: c# c++ security certificate driver

  

从64位版本的Windows Vista和更高版本的Windows开始,驱动程序代码签名策略要求所有驱动程序代码都具有数字签名。此外,32位版本的Windows Vista和更高版本的Windows的某些配置还要求对驱动程序代码进行数字签名,以便访问受内容保护策略控制的下一代高级内容。

在任何时候,您都可以使用(来自How to Test-Sign a Driver Package

禁用此项检查
Bcdedit.exe -set TESTSIGNING OFF

然后重启。之后,您可以安装任何您想要用户PC的驱动程序。我们的软件使用驱动程序来保护内存不被读/写。但如果您可以使用手工制作的证书安装驱动程序,则可以打破保护并执行您想要的操作。为了防止出现这种情况,我想检查有关代码签名策略实际状态的环境。

问题:

  1. 如何检查是否已启用代码签名策略并使用c ++ / c#?
  2. 工作
  3. 是否有一些api来购买已装载的驾驶证书?

1 个答案:

答案 0 :(得分:1)

回答第一个问题:

Windows中的此类操作由注册表项管理。负责引导配置数据的注册表项存储在“HKLM \ BCD00000000”下。它包括不同的对象,每个对象包括不同的元素。

在您的情况下,“{9dea862c-5cdd-4e70-acc1-f32b344d4795}”对象包含名为“23000003”的元素。通过选中“23000003”的“元素”值,您可以访问另一个GUID。您可以在“HKLM \ BCD00000000 \ Objects”下找到该特定GUID。

如果我们调用该键GUIDXXX,您可以在“HKLM \ BCD00000000 \ GUIDXXX \ Elements \ 16000049”下找到控制TESTSIGNING的dword值:Element。通过将此值设置为0可以禁用TESTSIGING,并通过设置为1来启用TESTSIGING模式。 此外,您只需检查该值即可识别它是打开还是关闭。

关于API,您可以使用注册表API,如RegOpen,RegQuery *,RegSet *等。

我把这些链接作为参考。它包含许多有用的信息和关于密钥的详细信息。

http://www.mistyprojects.co.uk/documents/BCDEdit/files/bcd_as_registry_hive.htm

http://www.mistyprojects.co.uk/documents/BCDEdit/files/object_element_codes.htm#generic