如何检查驱动程序代码签名策略是否已启用并实际工作

本文关键字:是否 策略 启用 实际工作 代码 何检查 检查 驱动程序 | 更新日期: 2023-09-27 18:26:15

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

在任何时候,你都可以使用(从如何测试签署驱动程序包)禁用此检查:

Bcdedit.exe -set TESTSIGNING OFF

然后重新启动。之后你可以安装任何你想使用pc的驱动程序。我们的软件使用驱动程序来保护它的内存不被读/写。但若你们可以用手工制作的证书安装驱动程序,你们就可以破坏保护并按你们的意愿去做。为了防止这种行为,我想检查环境中代码签名策略的实际状态。

问题:

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

如何检查驱动程序代码签名策略是否已启用并实际工作

第一个问题的答案:

Windows中的这些东西是由注册表项管理的。负责启动配置数据的注册表项存储在"HKLM''BCD00000000"下。它包括不同的对象,每个对象都包含不同的元素。

在您的案例中,"{9dea862c-5cdd-4e70-acc1-f32b344d4795}"对象包含一个名为"2300003"的元素。通过检查"Element"值"23000003",您可以访问另一个GUID。您可以在"HKLM''bD000000000''Objects"下找到特定的GUID。

如果我们调用该键GUIDXXX,您可以在"HKLM''bD000000000''GUIDXXX''Elements''16000049"下找到控制TESTSIGNING的双字值:Element。将该值设置为0可禁用TESTSIGING,将其设置为1可启用TESTSIGING模式。你也可以只检查值来识别它是打开还是关闭

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

我把这些链接作为参考。它包含了很多关于钥匙的有用信息和细节。

http://www.mistyprojects.co.uk/documents/BBCDEdit/files/bdc_as_registry_hive.htm

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