Проверить подпись Authenticode на EXE - C++ без CAPICOM
Я пишу функцию для установщика DLL для проверки подписи Authenticode EXE-файлов, уже установленных в системе.
Функция должна:
А) убедитесь, что подпись действительна.
Б) убедиться, что подписывающее лицо является нашей организацией.
Поскольку это в установщике, и потому что это должно работать на более старых установках Win2k, я не хочу полагаться на CAPICOM.dll, так как он может отсутствовать в целевой системе.
WinVerifyTrust API прекрасно работает для решения (A).
Мне нужно найти способ сравнить известный сертификат (или свойства в нем) с тем, который подписал данный EXE-файл.
2 ответа
Вы должны использовать CryptQueryObject.
В этой статье базы знаний демонстрируется использование: Как получить информацию из исполняемых файлов, подписанных Authenticode.
Комментатору, который спросил о том, как сделать это без API-интерфейсов Windows, я не знаю ни одной библиотеки, которая могла бы это сделать, но формат задокументирован здесь: Формат подписи переносимого исполняемого кода Windows Authenticode
Если подпись действительна, ее цепочка сертификатов будет содержать ваш сертификат. CertGetCertificateChain получит эту цепочку.