Php 检测没有WinVerifyTrust的数字签名

Php 检测没有WinVerifyTrust的数字签名,php,code-signing,portable-executable,authenticode,winverifytrust,Php,Code Signing,Portable Executable,Authenticode,Winverifytrust,我有大量的EXE文件,需要找出哪些文件有数字签名。有人知道是否有一种方法可以在不访问WinVerifyTrust的情况下进行检查(他们都在Unix服务器上) 我似乎找不到任何关于数字签名在EXE中实际位置的信息。如果我能找到它在哪里,我也许能够打开文件并找到一个要测试的位置。我不需要对证书进行“真正的”验证,我只想看看数字签名是否存在(或者更重要的是,不存在),而不必使用WinVerifyTrust 您可以使用Mono.Security.dll AuthenticodeBase[1]中的代码找到

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


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

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

[1]

您的最佳提示(如果存在authenticode签名)是:


如果dirSecuritySize大于8,则有一个签名条目(有效或无效)。

如上所述,单独存在IMAGE\u DIRECTORY\u entry\u SECURITY DIRECTORY是检测PE文件中是否存在签名的明确指示器。如果您有大量文件要测试,并且希望筛选这些文件,那么只需测试此标准目录的存在性即可。这样做不需要库。

我尝试在相同的情况下解决这个问题。 我推荐OSLSigncode。 这是windows authenticode与openssl的一个实现。

下面是从osslsigncode中摘录的代码块

siglen = GET_UINT32_LE(indata + peheader + 152 + pe32plus*16 + 4);
如果osslsigncode中的siglen为0,则会确定没有签名

如果您只想检查签名,则不需要库。

但是,请参阅osslsigncode以获取帮助。

我还没有测试过这个,但是您可以使用mono和
chktrust
实用程序来进行测试。谢谢,我考虑过这一点,但我宁愿直接查看文件,而不是完全验证证书。它必须按计划一次运行数千个文件,我担心chktrust(甚至使用WinVerifyTrust)会太慢。如果我能找出数字签名应该在EXE中的什么位置,那似乎是最快的。谢谢这就是PeStudio()在处理PE映像时检测此指示器的方式。是的,在过去9年中发生了很大变化。谢谢
siglen = GET_UINT32_LE(indata + peheader + 152 + pe32plus*16 + 4);