Rol*_*lie 5 c++ winapi digital-signature
我有一个二进制'api.dll',它使用另一个二进制'helper.dll'.我想使用数字签名验证每个DLL的真实性,但我不确定正确的方法.对于上下文,DLL使用visual studio 2010构建,并通过依赖项选项卡进行链接.链接通过存根helper.lib发生,所以我没有显式调用LoadLibraryapi.dll代码.部分问题是我不知道从哪里加载helper.dll.我最初的想法是:
这是解决这个问题的最好方法吗?
其次,基于我对数字签名/证书的模糊理解,在我看来验证需要连接到证书颁发机构,或者证书需要已经在机器上列为可信任.当外部连接被不赞成或明确禁止时,通常如何处理?是应用程序"安装"的东西吗?或者在这种情况下是否需要另一种不太安全的验证方法?
您希望在加载DLL 之前验证签名.加载后,他们已经有时间在您的流程中运行任意代码(请参阅参考资料DllMain),并且您已经丢失了.
您可能希望延迟加载 DLL.这样,您不需要为每个函数手动执行LoadLibrary/ 操作GetProcAddress,但在加载DLL之前仍然有机会运行一些代码,如果验证失败则会挽救.
不,WinVerifyTrust不需要实时Internet连接.每台Windows计算机都有一个受信任的根证书列表.验证的作用是提取签名和附加到二进制文件的证书,验证签名是否有效(文件内容实际上与签名的内容相匹配),以及证书是否形成了导致其中一个受信任根的有效链.
请注意,WinVerifyTrust这不会验证您的公司是否签署了该文件- 只是由已从某个已知CA购买证书的人签名,并且之后未被篡改.如果要确认文件实际上是您的,则需要执行其他步骤.