3

任何人都知道为什么如果我在命令提示符下使用 sigverif, powershell 中的 get-authenticicodesignature 总是将 .dll 或 .exe 文件显示为NotSigned,而它显示为已签名。

sigverif 输出

    File                      Modified       Version             Status              Catalog              Signed By
------------------      ------------   -----------        ------------        -----------          -------------------
[c:\windows\system32]
batt.dll                 7/14/2009      2:6.1               Signed              nt5.cat             Microsoft Windows

PowerShell 输出:

    PS> get-authenticodesignature C:\Windows\System32\batt.dll    

    Directory: C:\Windows\System32    

SignerCertificate                         Status                                 Path
-----------------                         ------                                 ----
                                          NotSigned                              batt.dll
4

3 回答 3

2

Microsoft 有一个程序来确保设备驱动程序可靠且不太可能导致您的计算机出现问题。当 Microsoft 开发人员和第 3 方供应商创建新驱动程序时,可以将其提交给 Microsoft 内部的一个特殊部门进行“设备签名”。签名存储在驱动程序包中的一个 cat 文件中,即sigverify.exe检查。有关更多说明,请参阅Windows 的驱动程序签名要求

get-authenticodesignature用于检测其他可执行签名,即.EXE、.DLL 或.PS1。就 PowerShell 而言,您可以使用它Set-AuthenticodeSignature来签署您的代码。对于 .DLL 和 .EXE(无论它们是本机的还是托管的),您可以使用SDK 或 DDK 中的signtool.exe。结果可以显示在文件的属性中:

在此处输入图像描述

它存在另一种签名,仅保留给托管代码。它被称为一个强大的名字。它用于为程序集提供标识。使用强名称对程序集进行签名可以验证它的唯一性并允许将其存储在全局程序集缓存中,这是使用sn.exe完成的。它可以与前一个结合。

于 2012-10-07T06:32:33.933 回答
2

普通文件可以通过以下两种方式之一进行签名:嵌入式签名或目录签名。有关这两种方法的详细信息,请参阅本文档的第 12 页。

Get-AuthenticodeSignature 适用于嵌入签名的文件;但它将目录签名的文件报告为未签名。这已作为一个错误报告给 PowerShell 团队,但显然还没有得到足够的支持来引起他们的注意。

作为一种解决方法,您可以使用 Sysinternals Sigcheck,它可以正确处理目录签名文件。在这个 github 代码中有一个称为 Use-Sigcheck 的 Powershell 函数,它可能对你有用。

于 2015-10-17T11:32:34.883 回答
1

sigverif 用于查找未签名的驱动程序并验证设备驱动程序(在 C:\WINDOWS\SYSTEM32\DRIVERS 下)。当您打开 Dll 的属性页面时,您是否看到“数字签名”选项卡?

于 2012-10-06T13:21:18.687 回答