Проверка подписи Authenticode на EXE-C++ без CAPICOM

Я пишу функцию для DLL установщика, чтобы проверить подпись Authenticode EXE-файлов, уже установленных в системе.

функция должна:

A) убедитесь, что подпись действительна.
B) убедитесь, что подписавший является нашей организацией.

потому что это в установщике, и потому что это должно работать на старых установках Win2k, I не хотите положиться на CAPICOM.dll, так как он может быть не включен целевая система.

на winverifytrust, связанной с API отлично работает для решения (A).

Мне нужно найти способ сравнить известный сертификат (или свойства в нем) с тем, который подписал EXE в вопросе.

2 ответов


вы должны использовать CryptQueryObject.

эта KB-статья демонстрирует использование:как получить информацию из Authenticode подписанных исполняемых файлов.

комментатору, который спросил о том, как это сделать без Windows-APIs, я не знаю ни одной библиотеки, которая может это сделать, но формат задокументирован здесь: Windows Authenticode Портативный Исполняемый Формат Подписи


Если подпись действительна, ее цепочка сертификатов будет содержать ваш сертификат. CertGetCertificateChain получите эту цепь.