问题标签 [winverifytrust]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
16222 浏览

c - WinVerifyTrust 检查特定签名?

我正在为 Windows 实现一个进程提升助手。该程序将以提升模式运行并以管理员权限启动其他程序,而不会显示额外的 UAC 提示。出于安全原因,我想确保只能执行使用我公司的 Authenticode 密钥进行数字签名的二进制文件。

WinVerifyTrust函数让我成功了一半,但它只确保二进制文件由Microsoft 信任链中的某个密钥签名。是否有一种相对简单的方法来执行 Authenticode 验证并确保它由我们的私钥签名?

0 投票
2 回答
5344 浏览

perl - How can I check the digital signature of an .exe or .dll in Perl?

I'm trying to find a way to script (preferably in Perl) - a check to see if an .exe or .dll is digitally signed - if anyone has an easy direction to point me, I'd appreciate it.

0 投票
1 回答
4296 浏览

winapi - 如何验证我的组织是否签署了受信任的 Windows 二进制文件?

这是问题 1072540“WinVerifyTrust 检查特定签名?”的后续问题。.

我想写一个 C++ 函数让我们调用它TrustedByUs的形式:

我们的想法是,我们为这个函数提供了一个二进制 .dll 或 .exe 文件的路径,该文件已使用数字签名进行了签名。该pathToPublicKey字符串是我们特定签名证书的公钥的路径。

使用http://support.microsoft.com/kb/323809中的代码,可以非常直接地验证该pathToBinary文件实际上是否受操作系统信任。

现在我和问题 1072540 的作者在同一个地方,我知道操作系统信任这个二进制文件的签名者,但我想知道我的组织的 RSA 密钥是否是签署二进制文件的那个。

KB323809 展示了如何从嵌入在我们的二进制文件中的证书中提取字符串。此示例显示了如何在其GetProgAndPublisherInfo函数中从签名证书中提取字符串,但我不习惯使用字符串匹配来验证证书。

我想做的是从嵌入式签名中提取公钥,并将其与与首先签署我的二进制文件的私钥相对应的公钥进行比较。

的文档CryptMsgGetParamCMSG_SIGNER_CERT_ID_PARAM 参数“返回有关标识签名者公钥所需的消息签名者的信息”。我使用此密钥成功获取了证书的序列号。我的代码如下所示:

这接近我想要的,但我真的想使用签名证书的公钥来验证目标签名二进制文件实际上是用我的特定公钥/私钥对创建的。

使用CMSG_ENCRYPTED_DIGEST标志此代码成功:

底线问题:给定由 发现的证书信息CryptQueryObject,我应该使用什么技术来确保目标文件实际上是使用与执行上述代码时可用的公钥对应的私钥对目标文件进行签名的?

0 投票
4 回答
1478 浏览

winapi - 验证可执行文件的 Authenticode 签名时发生内存泄漏?

我正在使用WinVerifyTrust使用以下函数验证某些 Windows 可执行文件的有效性,该函数在循环中调用_tmain

然而,随着每个循环,内存不断增长,这是内存泄漏的明确迹象。

我对 的理解有问题API还是WinVerifyTrust函数实际上泄漏了?我正在Windows XP Professional SP3系统上对此进行测试。

编辑:

以下是一些输出umdh

在我看来,CRYPT32功能是泄漏的......或者我错过了一些东西。

编辑2

这是几千个循环的内存演变: 替代文字

0 投票
3 回答
3092 浏览

winverifytrust - WinVerifyTrust 很少失败

我使用 winverifytrust 来验证签名。

我正在使用 WINTRUST_ACTION_GENERIC_VERIFY_V2 进行验证。但它很少返回“NO SIGNATURE FOUND”。我无法模拟这个问题。

我收到反馈说某些用户正在发生这种情况。一个反馈有一个日志,表明对文件的第一次 WinVerifyTrust 调用成功,而对同一文件的第二次调用失败。

我使用的代码正是

http://msdn.microsoft.com/en-us/library/aa382384%28v=VS.85%29.aspx

任何想法可能导致失败。对同一个文件的相同调用成功了一次,然后又失败了。

0 投票
3 回答
1409 浏览

php - 检测没有 WinVerifyTrust 的数字签名

我有大量的 EXE 文件,需要找出哪些有数字签名。有谁知道是否有一种方法可以在不访问 WinVerifyTrust 的情况下进行检查(它们都在 Unix 服务器上)。

我似乎找不到任何有关数字签名在 EXE 中实际位置的信息。如果我能找到它在哪里,我可能能够打开文件并 fseek 到一个位置进行测试。我不需要对证书进行“真实”验证,我只想查看是否存在数字签名(或者更重要的是,不存在)而无需使用 WinVerifyTrust。

0 投票
2 回答
3849 浏览

c++ - 验证 system32/drivers 文件夹中的数字签名

我整晚都在研究这个,但没有解决方案。

我正在尝试验证驱动器文件夹 (C:\Windows\System32\drivers*.sys) 中文件的数字签名,选择你想要的任何一个。我知道代码是正确的,因为如果您将文件从该文件夹移动到 C:\,则测试有效。

WinVerifyTrust给出错误 80092003 http://pastebin.com/nLR7rvZe

CryptQueryObject给出错误 80092009 http://pastebin.com/45Ra6eL4

这是怎么回事?

0 投票
1 回答
4475 浏览

c# - WinVerifyTrust 返回 0x80092003 - CRYPT_E_FILE_ERROR

我正在使用 C# .net 3.5 并在 64 位平台上运行。

我有一个需要动态加载的 32 位 dll。dll 位于“C:\Program files\ApplicationToLoad\Application.dll”下

因为 dll 是 32 位的,所以我必须将我的应用程序也编译为 32 位。

在加载 dll 之前,我检查 dll 是否使用 WinVerifyTrust 签名,但我收到错误 0x80092003 = CRYPT_E_FILE_ERROR = 读取或写入文件时发生错误。

我猜这是因为我被编译为 32 位并试图检查 Program Files 下的 dll 而不是 Program Files x86 下的 dll。因此,我遵循了在 system32/drivers 文件夹中验证数字签名的答案,并尝试禁用 FS 重定向,但没有帮助。

我很确定问题与重定向有关,因为我

  1. 在“程序文件(x86)”下创建了 ApplicationToLoad 文件夹的副本 - WinVerifyTrust 返回状态正常

  2. 将我的应用程序编译为 64 位 - WinVerifyTrust 返回状态正常

更新:

这是禁用重定向的代码:

pinvoke 声明:

0 投票
2 回答
380 浏览

c# - 如何识别隔离网络

我正在开发 ac# .Net3.5 应用程序。

应用程序使用WinVerifyTrust检查文件的签名。问题是在孤立的网络上(即没有 Internet 访问权限,但机器仍有 IP 地址)需要很长时间(约 20 秒)直到 WinVerifyTrust 返回。

有没有办法识别这种情况?

0 投票
1 回答
358 浏览

systemtime - winVerifyTrust 在 sys 时间不准确时被粉碎

我正在开发一个 C# .net 3.5 应用程序。我正在尝试使用 WinVerifyTrust 验证文件签名。我还想要一个吊销检查,所以我设置了 WinTrustData 的以下参数。

一切正常,除非我将系统时间向前移动,然后该方法被卡住并且 winVerifyTrust 仅在很长一段时间后才返回答案。

您知道为什么会发生这种情况,我该如何预防?

谢谢