Подтвердить что ты не робот

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

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

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

Можно ли "unsign" DLL, а если нет, почему бы и нет...?

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Ответ 3

Довольно легко удалить подпись из файла .dll с помощью API ImageRemoveCertificate.

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

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

Ответ 4

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

Также обратите внимание на вопрос Какое основное различие между signcode.exe и signtool.exe?

Ответ 5

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

signtool доступен в Windows SDK.

Ответ 6

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

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