检查DLL是否已签名C ++

时间:2017-07-19 04:31:08

标签: c++ windows dll windows-7 digital-signature

我正在尝试检查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

如何修复此功能?

1 个答案:

答案 0 :(得分:4)

WinVerifyTrust是正确使用的功能,但您必须准备好两次调用。

首先用WTD_CHOICE_FILE调用它,成功然后就完成了。如果没有,则必须使用WTD_CHOICE_CATALOGCryptCATAdminCalcHashFromFileHandle + CryptCATAdminEnumCatalogFromHash + CryptCATCatalogInfoFromContext)再次调用它,因为某些Windows文件未嵌入证书信息(尤其是非PE文件) 。 (您也可以尝试find the catalog info first以避免两次调用它,但我认为这样会慢一些)

Sysinternals论坛上有各种各样的主题(thisthis)可能是与此相关的问题的最佳资源。