Могу ли я удалить цифровую подпись из DLL? - PullRequest
21 голосов
/ 04 декабря 2008

Мой установщик собирает "подписи" DLL с помощью сертификата подписи кода в процессе сборки.

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

Можно ли "подписать" DLL, и если нет, то почему ...?

Ответы [ 6 ]

28 голосов
/ 06 апреля 2012

Вы можете использовать delcert.exe из этого сообщения на форуме XDA .

вот небольшой инструмент, который удаляет (удаляет) цифровой знак (Authenticode) из PE исполняемых файлов, таких как * .exe, * .dll, * .mui и т. д.

17 голосов
/ 21 октября 2016
signtool remove /s C:\path\to.exe.or.dll

signtool доступен в Windows SDK и должен быть как минимум из комплекта Windows 8 SDK (версия 6.2.9200.20789), чтобы поддерживать команду remove.

12 голосов
/ 04 февраля 2013

Довольно легко удалить подпись из DLL-файла, используя ImageRemoveCertificate API.

В ваших тегах не указан язык, но в этой статье показано, как реализовать его в C #. Удалить цифровую подпись из файла, используя C #

Кроме этого, если вы ищете простой инструмент для выполнения работы за вас, вы можете использовать FileUnsigner .

8 голосов
/ 11 марта 2011

Другой возможный вариант - переключиться на SignTool.exe . Он поставляется с Windows SDK , и подписывание двоичного файла, который уже был подписан, не приводит к ошибке. Я использую signtool.exe в процессе сборки и не испытываю никаких сложностей, даже если что-то уже подписано.

Также проверьте вопрос В чем основное отличие signcode.exe от signtool.exe?

7 голосов
/ 27 января 2009

Конечно, это возможно, но не тривиально.

Хотя было бы проще сохранить копию предварительно назначенной DLL.

Эта цифровая подпись представляет собой нечто большее, чем дополнительный раздел, добавляемый в конец файла PE. Вы можете написать программу, которая удалила подпись, если хотите.

Это не так просто, как усечение файла; Вы должны удалить ссылки на подпись в заголовке файла. Это может осложниться, если в DLL есть несколько подписей, и вы просто хотите удалить одну.

Формат PE-файла публично задокументирован здесь

3 голосов
/ 27 марта 2012

Проверьте, поддерживает ли ваш инструмент сборки «Переподпись». Это должно заменить все существующие подписи.

Если нет, вы можете использовать Stud_PE для удаления блока подписи. Откройте DLL или EXE в Stud_PE, перейдите на вкладку разделов, щелкните правой кнопкой мыши раздел цифровой подписи и выберите «Удалить раздел». Однако это требует взаимодействия с пользователем. Старые версии инструмента могли уничтожить файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...