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

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

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

А) убедитесь, что подпись действительна.
Б) убедиться, что подписывающее лицо является нашей организацией.

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

WinVerifyTrust API прекрасно работает для решения (A).

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

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам