2008-12-04 3 views
19

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

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

Возможно ли «выровнять» DLL, а если нет, почему бы и нет ...?

ответ

7

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

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

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

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

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

+1

Спасибо. Не совсем * ответ, на который я надеялся (например, «просто запустить UNSIGNTOOL»), но я теперь лучше информирован! – Roddy 2009-01-27 21:36:23

6

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

Кроме того, проверьте соответствующий вопрос What's the main difference between signcode.exe and signtool.exe?

3

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

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

25

Вы можете использовать delcert.exe из этого XDA Forum post.

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

+1

Этот инструмент использует API 'ImageRemoveCertificate` и отлично работает. – zig 2015-12-30 10:24:52

+0

И он даже поставляется с источниками, отлично. – 2016-08-18 21:40:19

12

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

У вас нет ни одного языка, указанного в тэгах, но в этой статье показано, как реализовать его на C#. Remove digital signature from a file using C#

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

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

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

Смежные вопросы