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

How to check driver code signing policy is enabled and actually work?

Starting with 64-bit versions of Windows Vista and later versions of Windows, driver code signing policy requires that all driver code have a digital signature. In addition, certain configurations of 32-bit versions of Windows Vista and later versions of Windows also require driver code to be digitally-signed in order to access next generation premium content that is controlled by the content protection policy.

您可以随时禁用此检查(来自 How to Test-Sign a Driver Package):

Bcdedit.exe -set TESTSIGNING OFF

然后重启。在它之后你可以安装任何你想要的驱动程序到用户电脑。我们的软件使用驱动程序来保护它的内存免受 read/write 的影响。但是如果你可以安装带有手工证书的驱动程序,你就可以打破保护并做你想做的事。为了防止这种行为,我想检查有关代码签名策略实际状态的环境。

问题:

  1. 如何检查是否启用了代码签名策略并使用 c++/c# 工作?
  2. 是否有一些api来检查已经加载的驱动程序证书?

第一个问题的答案:

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

在您的例子中,“{9dea862c-5cdd-4e70-acc1-f32b344d4795}”对象包含一个名为“23000003”的元素。通过检查“23000003”的 "Element" 值,您可以找到另一个 GUID。您可以在 "HKLM\BCD00000000\Objects".

下找到该特定的 GUID

如果我们将该键称为 GUIDXXX,您可以在 "HKLM\BCD00000000\GUIDXXX\Elements000049" 下找到控制 TESTSIGNING 的双字值:元素。通过将此值设置为 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