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