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

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

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

A) убедитесь, что подпись действительна.
B) убедитесь, что подписавшая сторона является нашей организацией.

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

API WinVerifyTrust отлично подходит для решения (A).

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

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

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

Для комментатора, спрашивающего о том, как это сделать без Windows-API, я не знаю ни одной библиотеки, которая может это сделать, но формат документален здесь: Windows Authenticode Portable Executable Signature Format

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

  • как использовать RSA для шифрования файлов (огромные данные) в C #
  • Слишком много данных для блока RSA не работает. Что такое PKCS # 7?
  • Как читать закрытый ключ PEM RSA из .NET.
  • Солить свой пароль: лучшие практики?
  • Проблема шифрования RSA
  • Можно ли расшифровывать hashи md5?
  • Как правильно управлять закрытым ключом
  • iText / BouncyCastle ClassNotFound org.bouncycastle.asn1.DEREncodable и org.bouncycastle.tsp.TimeStampTokenInfo
  • Шифрование файлов cookie в ASP.NET
  • Как долго переборщить соленый hash SHA-512? (соль предоставляется)
  • Учитывая, что последний блок не заполнен неправильно
  • Interesting Posts

    Ошибка конфигурации: этот раздел конфигурации не может использоваться на этом пути

    Включить веб-службу ASP.NET ASMX для HTTP-запросов POST / GET

    Работа с SAML 2.0 в C # .NET 4.5

    Какова эффективность и производительность выражения LINQ и Lambda в .Net?

    Каков наилучший способ обмена данными между действиями?

    Ansible “, когда переменная == true” не ведет себя так, как ожидалось

    jQuery ui перетаскиваемые элементы не «перетаскиваются» вне прокрутки div

    Легко сказать, если сфокусирован на окне VirtualBox?

    Как установить прокси-аутентификацию (пользователь и пароль) с помощью python selenium

    Как использовать class в DLL?

    Ошибки возникали при обработке плавкого предохранителя

    Показать / скрыть UIToolbar, «перемещать пальцы», точно так же, как, например, в iOS7 Safari

    Как синтаксис отличается от регулярной привязки к жизни?

    Как вставить символ utf-8 mb4 (emoji в ios5) в mysql?

    Являются ли ключи и значения в NSDictionary заказаны?

    Давайте будем гением компьютера.