Можно ли удалить цифровую подпись из DLL?
Мой установщик строит "знаки" DLL, используя сертификат подписи кода во время процесса сборки.
Я заметил, что если я попытаюсь построить дважды подряд, вторая сборка завершится неудачно, потому что DLL уже подписана, так что двоеточие подписей. Очевидно, я могу это исправить, подписав копию библиотеки DLL в сборке, но проблема заинтриговала меня:
Можно ли "unsign" DLL, а если нет, почему бы и нет...?
Ответы
Ответ 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, перейдите на вкладку раздела, щелкните правой кнопкой мыши раздел цифровой подписи и выберите "Удалить раздел". Однако для этого требуется взаимодействие с пользователем. Старые версии инструмента могут уничтожить файл.