Проверить подпись Authenticode на EXE - C ++ без CAPICOM - PullRequest
15 голосов
/ 19 ноября 2008

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

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

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

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

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

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

Ответы [ 2 ]

25 голосов
/ 21 ноября 2008

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

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

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

0 голосов
/ 20 ноября 2008

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

...