3

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

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

4

3 回答 3

1

如上所述,仅存在 IMAGE_DIRECTORY_ENTRY_SECURITY 目录是检测 PE 文件中是否存在签名的明确指标。如果您有大量文件要测试并想要过滤这些文件,则只需测试此标准目录的存在即可。你不需要图书馆来做到这一点。

于 2012-12-19T09:44:49.633 回答
1

我试图在同样的情况下解决这个问题。我推荐 osslsigncode。这是一个带有 openssl 的 windows 验证码的实现。
https://github.com/develar/osslsigncode

下面是 osslsigncode 的代码块摘录。

siglen = GET_UINT32_LE(indata + peheader + 152 + pe32plus*16 + 4);

如果osslsigncode中siglen为0,则判断没有签名。

如果您只想检查签名,则不需要库。
但是,请参阅 osslsigncode 以获得帮助。

于 2019-09-23T05:32:03.000 回答
0

您可以使用 Mono.Security.dll AuthenticodeBase [1] 中的代码找到此信息

[1] https://github.com/mono/mono/blob/master/mcs/class/Mono.Security/Mono.Security.Authenticode/AuthenticodeBase.cs

您最好的提示(如果存在验证码签名)是:

 // 2.2. Locate IMAGE_DIRECTORY_ENTRY_SECURITY (offset and size)
 dirSecurityOffset = BitConverterLE.ToInt32 (fileblock, peOffset + 152);
 dirSecuritySize = BitConverterLE.ToInt32 (fileblock, peOffset + 156);

如果 dirSecuritySize 大于 8 则存在签名条目(有效与否)。

于 2011-08-07T19:01:18.543 回答