У меня есть большое количество EXE-файлов и вам нужно выяснить, какие из них имеют цифровые подписи. Кто-нибудь знает, есть ли способ проверить без доступа к WinVerifyTrust (все они находятся на сервере Unix).
Кажется, я не могу найти никакой информации о том, где цифровая подпись действительно находится внутри EXE. Если бы я мог узнать, где это, я мог бы открыть файл и fseek в месте для тестирования. Мне не нужно делать «настоящую» проверку в сертификате, я просто хочу посмотреть, присутствует ли цифровая подпись (или, что более важно, НЕ присутствует) без использования WinVerifyTrust.
Как упоминалось выше, единственное присутствие каталога IMAGE_DIRECTORY_ENTRY_SECURITY является четким индикатором для обнаружения наличия подписи внутри PE-файла. Если у вас есть большое количество файлов для тестирования и вы хотите их отфильтровать, то проверяется наличие этого стандартного каталога. Для этого вам не нужна библиотека.
Вы можете найти эту информацию, используя код из Mono.Security.dll AuthenticodeBase [1]
Ваш лучший намек (если присутствует подпись подлинника):
// 2.2. Locate IMAGE_DIRECTORY_ENTRY_SECURITY (offset and size) dirSecurityOffset = BitConverterLE.ToInt32 (fileblock, peOffset + 152); dirSecuritySize = BitConverterLE.ToInt32 (fileblock, peOffset + 156);
если dirSecuritySize больше 8, то есть подпись (действительная или нет).