Подтвердить подпись 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 получит эту цепочку.