Как проверить цифровую подпись для программы в Windows 10/8/7

#1 — цифровая подпись программы — как проверить в проводнике windows 10

Данный метод, пожалуй, является самым простым, поскольку занимает минимум времени и не требует никакого дополнительного программного инструментария. Сложностей никаких:

В окне «Состав цифровой подписи» можно найти Имя подписавшего и имена других сторон, дату подписания программы, посмотреть её Сертификат, попутно Windows покажет, действительная ли данная подпись на данный момент времени.

#2 — цифровая подпись программы — как проверить с помощью signtool

SignTool — это официальная Microsoft-овская утилита, которая содержится в Windows SDK. То есть, по умолчанию с ОС Windows она не устанавливается, и доустановить её можно вместе с Windows SDK. Линки вот:

Windows 7 SDK

Windows 10 SDK

Однако: Windows 10 SDK «весит» 2.5 гига, предназначен для разработчиков и содержит уйму файлов, которые обычному юзеру совершенно без надобности.

После установки Windows 10 SDK файл signtool.exe отыскать можно «по адресу»:

C:Program Files (x86)Windows Kits10binx86signtool.exe

или

C:Program Files (x86)Windows Kits10binx64signtool.exe

В SignTool цифровая подпись программы проверяется следующими командами:

SignTool verify program.exe — проверить подпись драйвера

SignTool verify /pa program.exe — проверить сертификат подписи кода.

1] через проводник


Прежде всего, откройте проводник Windows и перейдите в папку, в которой сохранена ваша программа.

Нажмите правой кнопкой мыши файл установки и выберите Свойства.

Перейдите на вкладку, которая помечена как Цифровые подписи.


Если в списке подписи вы видите записи, это означает, что ваш файл имеет цифровую подпись.

Вы можете дважды щелкнуть любую из этих записей, чтобы просмотреть дополнительные сведения об органе подписи.

Следовательно, вы можете знать, подписан ли файл оригинальным распространителем программного обеспечения или нет.


Кроме того, в подробном представлении подписи вы можете нажать кнопку с надписью Просмотреть сертификат , чтобы просмотреть дополнительные сведения о сертификате, который идет с подписью.

2] использование утилиты сертификатов digicert

Используйте эту ссылку , чтобы загрузить последнюю версию DigiCert и запустить исполняемый файл.

Примите условия использования, отображаемые в начале, а затем перейдите на вкладку с надписью Подписывание кода , а затем в разделе заголовка нажмите Проверить подпись.

Выберите установочный файл, который вам нужен для проверки цифровой подписи.


Это приведет к тому, что DigiCert проверит подпись и отобразит всю информацию в новом открывшемся окне.

DigiCert проверяет две вещи. Они заключаются в следующем:

  • Если файл был подписан и если подпись действительна.
  • Проверяет метку времени подписи.

Если вы получили две зеленые галочки, как показано на скриншоте выше, проверка прошла успешно. У вас есть дополнительная информация в этом окне для вашего удобства.

Code signing в windows, просто и недорого

Хотел бы рассказать тут о такой важной особенности разработки под Windows как Code Signing. А ведь многие достаточно серьёзные разработчики до сих пор ей не пользуются, и очень зря. Помимо того что при запуске вашего неподписанного приложения появляется противная красная иконка с крестом и неприятным текстом:

Читайте также:  Выпуск/генерация и установка КЭП для OS Windows | ITCOM удостоверяющий центр

«Этот файл не имеет цифровой подписи которая может подтвердить производителя. Вы должны запускать программы только от производителей которым доверяете.»

Это ещё и пропуск на корпоративный рынок.

При запуске неподписанной программы появляется такое окно:
image

А так выглядит окно когда программа подписана:
image

Раньше вы возможно не обращали внимания на эту ерунду, но многие обращают. Во многих компаниях (те что покрупнее и не очень) запуск неподписанных программ просто запрещён, защита от вирусов и прочего «добра». Так что неподписанной программой вы сходу закрываете себе этот рынок и пугаете обычных пользователей. И это при том что сертификат для подписи стоит всего $99 в год ( у Comodo Group Inc. ).

Правда тут может быть одна проблема, сертификат выдаётся на компанию, в некоторых случаях получается получить сертификат на ИП с dba(doing business as) именем вместо имени и фамилии. На частное лицо получить сертификат не получится. Ещё некоторое время назад, хитрецы владеющие фотошопом могли получить сертификат «нарисовав» документы. Но потом ребята из сообщества Mozilla купили себе сертификат в Comodo без каких либо проверок вообще и рассказали об этом в сети. С тех пор в Comodo требуют уставные документы компании.
Другие trusted certificate authority тоже предлагают подобные услуги, но они дороже. Даже на сайте самого Comodo сертификаты по $166.95 в год, Thawte $299 в год, Verisign $499 в год. Если же вам надо подписать драйвер, то Verisign без вариантов, хотя на первый год можно получить скидку в $400 и заплатить всего $99 ( надо использовать этот промо код: THEDEAL99 ). Также без сертификата Verisign не получить Designed for Windows… Во всех остальных случаях нет никакого смысла переплачивать за имя компании выдавшей сертификат. Сертификат за $99 наилучший вариант на данный момент, только покупать его надо через реселлера, например: ksoftware.net, я покупаю сертификаты через них уже не первый год.

Один важный момент, прежде чем получать сертификат, очень желательно зарегистрировать вашу компанию или ИП в агенстве Dun & Bradstreet и получить DUNS номер. Этот номер очень уважается компаниями которые выдают сертификаты и при предъявлении этого номера, в абсолютном большинстве случаев, более никаких подтверждающих документов не спрашивают. Иначе придётся высылать сканы уставных документов, а иногда и каких-нибудь счетов на компанию, например за телефон. Для получения сертификата на ИП это один из главных шагов. Без этого в случае ИП может вообще ничего не получиться.

Сам процесс подписания программы/инсталлятора достаточно простой и легко автоматизируется, если надо могу описать и его.

Вот собственно и всё. Если вы работаете на рынке программного обеспечения для windows — сертификат это важная и необходимая вещь. Я надо признать и сам стал избегать неподписанных программ после этого.

Startssl

Как проверить цифровую подпись для программы в Windows 10/8/7Шаг первый

— Получение личного сертификата — на сайте

Читайте также:  Хранение электронных документов: способы, требования, сроки и решения

Ближе к теме

Но что, если мы (авторы этих приложений) хотим передавать в них какую-либо дополнительную информацию, которая будет известна только в момент скачивания? Ведь любое изменение файла автоматически делает цифровую подпись недействительной. Какие у нас есть варианты?

  1. Дописывать в название отдаваемого файла требуемые для передачи данные, а веб-сервером через регулярные выражения перенаправлять подобные запросы на один физический файл.
    легко реализуемо;
    внутренности файла остаются нетронутыми и подпись всегда верна;
    передать можно лишь небольшой набор данных (например, несколько идентификаторов);
    при переименовании файла информация пропадает.
  2. Изменять данные внутри файла и переподписывать его при отдаче.
    передать можно любой объем данных;
    при переименовании ничего не теряется;
    переподписывание – очень долгий процесс, если речь идёт про отдачу сотен больших (100 MB ) дистрибутивов игр в секунду, как в нашем случае.
  3. Изменять данные внутри файла и НЕ переподписывать его, сохраняя при этом корректную цифровую подпись.
    передать можно любой объем данных;
    при переименовании ничего не теряется;
    не нужно переподписывать файл;
    это невозможно (или возможно?).

Как подписывать приложения?

Существуют различные утилиты для подписи программного обеспечения. Но мы всегда рекомендуем использовать стандартный софт. Давайте рассмотрим один из таких инструментов, а именно: «signtool.exe» от Microsoft (инструмент командной строки, который по умолчанию идет вместе с Microsoft Visual Studio).

  • Если ваш браузер Internet Explorer или Chrome

Если вы заказывали сертификат Code Signing через браузер IE или Chrome на компьютер с ОС Windows, то в таком случае ваш сертификат будет доступен в хранилище сертификатов Windows. Вам понадобится ввести следующий код в командную строку:

Невозможное возможно


Фокус заключается вот в чём:

размер секции, описанный в IMAGE_DATA_DIRECTORY может отличаться от фактического размера структуры WIN_CERTIFICATE

, а при проверке цифровой подписи исключается

вся

секция, размер которой описан в IMAGE_DATA_DIRECTORY. При этом добавленное вручную содержимое в эту секцию уже не является частью цифровой подписи и по сути может содержать любой набор данных. Таким образом можно с легкостью добавлять любые данные в содержимое блока «Атрибуты таблицы сертификатов», предварительно изменив размер секции в структуре IMAGE_DATA_DIRECTORY, не повредив при этом цифровую подпись файла. Не забывайте про паддинг файла до размера, кратного 8 байтам.

Вы должны понимать возможные последствия при использовании этого метода, иметь в виду тип передаваемых данных, объем, возможную их обработку и потенциальные дыры, связанные с этим. В ваших же интересах передавать там только такую информацию, которую можно безболезненно удалить/заменить/испортить (в случае, если кто-то захочет это сделать намеренно), но при этом не потерять основную функциональность.

«Конечно, а как же контрольная сумма PE файла?» — спросите вы. Спешу вас успокоить — она не играет никакой роли при запуске и работе обычных EXE файлов. Контрольная сумма проверяется только на критически важных системных файлах, например на неё ориентируется сервис System File Checker (для диагностики пропавших или повреждённых системных файлов).

Читайте также:  Как восстановить эцп

Немного теории

Ниже представлена структура Windows

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


Также показан формат блока цифровой подписи (структура

#7), используемый Microsoft.

Ключевой момент в этой схеме — наличие блоков, исключаемых при генерации и проверке цифровой подписи. Эти блоки описываются простейшими C структурами:

«Таблица сертификатов» в секции «Директории данных» – это структура IMAGE_DATA_DIRECTORY:

typedef struct _IMAGE_DATA_DIRECTORY {
    DWORD   VirtualAddress;
    DWORD   Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;

где:

  • VirtualAddress — прямой указатель на атрибуты таблицы сертификатов в PE файле;
  • Size — размер этого блока в PE файле.

«Атрибуты таблицы сертификатов» – это структура WIN_CERTIFICATE:

typedef struct _WIN_CERTIFICATE
{
    DWORD       dwLength;
    WORD        wRevision;
    WORD        wCertificateType;   
    BYTE        bCertificate[ANYSIZE_ARRAY];
} WIN_CERTIFICATE, *LPWIN_CERTIFICATE;

элементы которой содержат следующие значения:

  • dwLength — размер секции Бинарных данных сертификата;
  • wRevision — используемая версия структуры WIN_CERTIFICATE;
  • wCertificateType — устанавливается в значение 0x0002 для цифровых подписей PE файлов. Значение определено в Wintrust.h как WIN_CERT_TYPE_PKCS_SIGNED_DATA;
  • bCertificate — набор данных, содержащий цифровую подпись в формате PKCS#7.


При подписывании PE файла секция атрибутов таблицы сертификатов всегда помещается в конец файла (блок «Оставшееся содержимое» отсутствует). Зная об этой особенности, можно провернуть небольшой трюк с очень заманчивыми результатами.

Програмная цифровая подпись исполняемых файлов

Приветствую!

Какие есть пути, которыми можно сделать подпись PE (.exe, .dll, .sys) сертификатом (разработчика)? Что можно почитать по этому поводу?

Очень желательно, без библиотек, требующих установку системы. Лучше конечно вообще, обойтись без них.

Язык в принципе не так важен, желательно конечно Delphi, но и C / C# пойму без проблем.

Заранее спасибо)

В качестве заключения: кто и как этим пользуется?

Эту возможность использует Google при распространении своих продуктов через автоматический апдейтер Google Omaha. Возможно, вы замечали, что при загрузке Google Chrome или Google Earth, вам предлагают сделать некоторые настройки ещё перед скачиванием, например, установить вместе с Earth браузер Chrome.

Также эту возможность удобно использовать в различных партнёрских сетях – отдача дистрибутивов с трекингом партнёра — необходимость в различных компаниях.

Механизм по отдаче файлов с веб-сервера с использованием этой фичи может быть реализован с помощью самописного плагина для nginx, виртуальной файловой системы на основе FUSE, или ещё каким-нибудь более экзотическим способом (расскажите в комментах, если придумали свой вариант).

Информацию о цифровых подписях PE файлов можно почерпнуть из этого документа: Windows Authenticode Portable Executable Signature Format.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector