Обнаружение цифровой подписи без WinVerifyTrust - PullRequest
2 голосов
/ 25 июня 2011

У меня большое количество EXE-файлов, и мне нужно выяснить, какие из них имеют цифровую подпись.Кто-нибудь знает, есть ли способ проверить без доступа к WinVerifyTrust (все они на сервере Unix).

Кажется, я не могу найти никакой информации о том, где на самом деле находится цифровая подпись внутри EXE-файла.Если бы я мог узнать, где это, я мог бы открыть файл и найти место для тестирования.Мне не нужно проводить «настоящую» проверку сертификата, я просто хочу увидеть, присутствует ли цифровая подпись (или, что более важно, НЕ присутствует) без необходимости использовать WinVerifyTrust.

Ответы [ 2 ]

1 голос
/ 19 декабря 2012

Как упомянуто выше, единственное присутствие каталога IMAGE_DIRECTORY_ENTRY_SECURITY является четким индикатором для обнаружения наличия подписи внутри PE-файла.Если у вас есть большое количество файлов для тестирования и вы хотите их отфильтровать, то просто проверяется наличие этого стандартного каталога.Для этого вам не нужна библиотека.

0 голосов
/ 07 августа 2011

Вы можете найти эту информацию, используя код из 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, тогда есть запись подписи (действительная или нет).

...