【发布时间】:2017-12-24 03:52:34
【问题描述】:
我正在尝试检查是否根据文件路径对 DLL 进行了签名。我看到使用 WinVerifyTrust 有针对此类问题的预先存在的解决方案,但是,当我尝试对照“C:\Windows\System32\kernel32.dll”检查它时,它说:“文件”C:\Windows\System32 \kernel32.dll" 未签名。"虽然 kernel32 应该是一个签名的 dll。我在 Windows 7 上,仅供参考。
这是我调用的函数的源代码:https://msdn.microsoft.com/en-us/library/windows/desktop/aa382384(v=vs.85).aspx
如何修复该功能?
【问题讨论】:
-
当我在 Windows 10 上运行该应用程序时:
The file "c:\windows\system32\kernel32.dll" is signed and the signature was verified. -
fwiw,如果您将该代码编译为 32 位(Visual Studio 的默认设置),但在 64 位操作系统上运行,则 c:\windows\system32 的文件访问将被重定向到 c :\windows\syswow64.您可以手动检查 syswow64 中的 kernel32.dll 是否经过代码签名?此外,由于 kernel32.dll 可能是一个非常特殊的 DLL,受其他可能的重定向内容的影响,请手动将其复制到另一个目录并重命名它。然后在复制的文件上再次运行代码,看看是否有任何差异。
-
当我在 syswow 中尝试 kernel32.dll 时,我必须将其编译为 32 位,同样的消息“文件“C:\Windows\SysWOW64\kernel32.dll”未签名”。我尝试将 dll 放在 C:\ 和相同的消息中。我正在寻找一个全局解决方案,所以它可能不适用于 Windows 7,但需要适用于 vista 之后的所有操作系统。
-
您实际上是在尝试专门验证 kernel32.dll,还是任何其他 DLL? (该 winverifytrust api 是否适用于来自其他产品的其他代码签名二进制文件,这些产品内置于 Windows 中?)
-
任何已签名的 dll。我尝试了一个覆盖 dll,它说“文件“C:\overlay.x64.dll”已签名并且签名已验证。”。但是,即使它是 Windows dll,我也需要该函数返回 true。
标签: c++ windows dll windows-7 digital-signature