检查DLL是否已签名C ++

Rob*_*tes 4 c++ windows dll digital-signature windows-7

我正在尝试检查DLL是否基于文件路径进行了签名。我看到使用WinVerifyTrust可以解决此类问题,但是当我尝试针对“ C:\ Windows \ System32 \ kernel32.dll”进行检查时,它说:“文件“ C:\ Windows \ System32 \ kernel32.dll”未签名。” 尽管kernel32应该是一个签名的dll。我在Windows 7 Fyi上。

这是我调用的函数的源代码:https : //msdn.microsoft.com/zh-cn/library/windows/desktop/aa382384(v=vs.85).aspx

如何修复该功能?

And*_*ers 5

是的,WinVerifyTrust是正确使用的函数,但是您必须准备调用两次。

首先用调用它WTD_CHOICE_FILE,它成功了,然后完成。如果不是,则必须使用WTD_CHOICE_CATALOGCryptCATAdminCalcHashFromFileHandle+ CryptCATAdminEnumCatalogFromHash+ CryptCATCatalogInfoFromContext)再次调用它,因为某些Windows文件未嵌入证书信息(尤其是非PE文件)。(您也可以尝试先查找目录信息,以避免再次调用它,但是我认为这样做比较慢)

Sysinternals论坛上有各种主题(thisthis),也许是与此相关的最佳资源。