Удаление Цифровой Подписи Pe-Файла

Для подписания PE-файлов (exe, dll, sys и других) в большинстве случаев используется утилита Signtool.exe, но какую утилиту следует использовать, если необходимо удалить цифровую подпись из файла? Но официально такой утилиты нет. Вы можете только подписать или переподписать (поставить свою подпись поверх существующей), но не удалить ее.

Что делать, если файл необходимо исправить в Hex или PE-редакторе, а оставлять файл с заведомо поврежденной цифровой подписью не хочется?



Для чего это

  • Если вам необходимо изменить подписанный файл, например, исправить в нем ошибки или локализовать его.

    После любого изменения файла цифровая подпись становится поврежденной и недействительной, поэтому лучше удалить ее полностью, чем оставлять в таком виде.

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



Инструменты

Для работы нам потребуются следующие утилиты: 1. Шестнадцатеричный редактор.

я предпочитаю WinHex .

2. Утилита для исправления контрольной суммы PE файла ИзменитьPE .

3. В систему включен шестнадцатеричный калькулятор.



Пример

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

ДискКриптор (объект выбран случайно).

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

Откройте dcrypt_setup.exe в Hex-редакторе и найдите 4-байтовую последовательность 50450000h (в тексте вы можете увидеть ее как PE, за которой следуют два нулевых байта).

Эта подпись идентифицирует файл как файл формата PE и идет сразу после заголовка MS-DOS. В этом случае начало подписи находится по смещению 100h:

Удаление цифровой подписи PE-файла

Следующее, что вам нужно исправить после удаления цифровой подписи, — это контрольная сумма файла.

Он расположен через 58h байт после сигнатуры формата PE, то есть 100h+58h=158h, поэтому текущая контрольная сумма (тип dword, то есть занимает 4 байта) этого файла — 9F36Ch (байты перевернуты):

Удаление цифровой подписи PE-файла

Следующие два значения относятся непосредственно к цифровой подписи.

Если они состоят из нулей, подписи нет. Первый расположен через 40h байт после начала контрольной суммы или через 98h байт после начала подписи — 100h + 98h = 198h:

Удаление цифровой подписи PE-файла

Это 4-байтовое значение указывает смещение, по которому находится начало цифровой подписи.

Теперь это 8E438h:

Удаление цифровой подписи PE-файла

Второе, опять же 4-байтовое значение, находится сразу после первого:

Удаление цифровой подписи PE-файла

Имеется в виду размер цифровой подписи, который в данном случае составляет 1500h или 5376 байт. Это означает, что конец подписи будет по смещению 8E438h + 1500h = 8F938h. Как правило, цифровая подпись идет в конец файла, проверяем:

Удаление цифровой подписи PE-файла

Все совпадает, поэтому этот блок можно смело удалять, после чего конец файла будет 8E437h:

Удаление цифровой подписи PE-файла

Осталось только стереть нулями показатели смещения и размера цифровой подписи:

Удаление цифровой подписи PE-файла

И подкорректируем контрольную сумму с помощью утилиты ModifyPE:

Удаление цифровой подписи PE-файла

Мы проверяем:

Удаление цифровой подписи PE-файла

Готовый! Теперь установочный пакет программы точно такой же, как и был до подписи, байт в байт. P.S. Не судите строго, это первый раз, в дальнейшем качество будет расти.

Конструктивная критика приветствуется.

П.

П.

С.

Автор темы начинающий хабраюзер системный трассировщик , который попросил меня опубликовать его текст. Плюсы следует адресовать ему, минусы оставить мне.

Теги: #цифровая подпись #удаление ЭЦП #информационная безопасность

Вместе с данным постом часто просматривают: