Могу ли я удалить цифровую подпись из DLL?

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

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

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

6 ответов

Решение

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

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

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

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

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

signtool remove /s C:\path\to.exe.or.dll

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

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

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

Удалить подпись из DLL-файла довольно просто, используя API ImageRemoveCertificate.

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

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

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

Кроме того, проверьте вопрос В чем основное различие между signcode.exe и signtool.exe?

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

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

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