Подтвердить подпись Authenticode на EXE-С++ без CAPICOM

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

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

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

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

API WinVerifyTrust отлично подходит для решения (A).

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

Ответы

Ответ 1

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

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

К комментатору, который спрашивал о том, как это сделать без Windows-API, я не знаю ни одной библиотеки, которая может это сделать, но формат документален здесь: Windows Authenticode Portable Executable Signature Format

Ответ 2

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