Для подписания PE-файлов (exe, dll, sys и других) в большинстве случаев используется утилита Signtool.exe, но какую утилиту следует использовать, если необходимо удалить цифровую подпись из файла? Но официально такой утилиты нет. Вы можете только подписать или переподписать (поставить свою подпись поверх существующей), но не удалить ее.
Что делать, если файл необходимо исправить в Hex или PE-редакторе, а оставлять файл с заведомо поврежденной цифровой подписью не хочется?
Для чего это
- Если вам необходимо изменить подписанный файл, например, исправить в нем ошибки или локализовать его.
После любого изменения файла цифровая подпись становится поврежденной и недействительной, поэтому лучше удалить ее полностью, чем оставлять в таком виде.
- Узнайте больше о механизме подписи файлов и поймите, как он работает.
Инструменты
Для работы нам потребуются следующие утилиты: 1. Шестнадцатеричный редактор.я предпочитаю WinHex .
2. Утилита для исправления контрольной суммы PE файла ИзменитьPE .
3. В систему включен шестнадцатеричный калькулятор.
Пример
В качестве примера удалим цифровую подпись из раздачи замечательной открытой и бесплатной программы для шифрования разделов диска.ДискКриптор (объект выбран случайно).
На этом примере, кстати, будет понятно, что удаление цифровой подписи никак не влияет на производительность PE-файлов.
Откройте dcrypt_setup.exe в Hex-редакторе и найдите 4-байтовую последовательность 50450000h (в тексте вы можете увидеть ее как PE, за которой следуют два нулевых байта).
Эта подпись идентифицирует файл как файл формата PE и идет сразу после заголовка MS-DOS. В этом случае начало подписи находится по смещению 100h:
Следующее, что вам нужно исправить после удаления цифровой подписи, — это контрольная сумма файла.
Он расположен через 58h байт после сигнатуры формата PE, то есть 100h+58h=158h, поэтому текущая контрольная сумма (тип dword, то есть занимает 4 байта) этого файла — 9F36Ch (байты перевернуты):
Следующие два значения относятся непосредственно к цифровой подписи.
Если они состоят из нулей, подписи нет. Первый расположен через 40h байт после начала контрольной суммы или через 98h байт после начала подписи — 100h + 98h = 198h:
Это 4-байтовое значение указывает смещение, по которому находится начало цифровой подписи.
Теперь это 8E438h:
Второе, опять же 4-байтовое значение, находится сразу после первого:
Имеется в виду размер цифровой подписи, который в данном случае составляет 1500h или 5376 байт. Это означает, что конец подписи будет по смещению 8E438h + 1500h = 8F938h. Как правило, цифровая подпись идет в конец файла, проверяем:
Все совпадает, поэтому этот блок можно смело удалять, после чего конец файла будет 8E437h:
Осталось только стереть нулями показатели смещения и размера цифровой подписи:
И подкорректируем контрольную сумму с помощью утилиты ModifyPE:
Мы проверяем:
Готовый! Теперь установочный пакет программы точно такой же, как и был до подписи, байт в байт.
P.S. Не судите строго, это первый раз, в дальнейшем качество будет расти.
Конструктивная критика приветствуется.
П.
П.
С.
Автор темы начинающий хабраюзер системный трассировщик , который попросил меня опубликовать его текст. Плюсы следует адресовать ему, минусы оставить мне.
Теги: #цифровая подпись #удаление ЭЦП #информационная безопасность
-
Пишем Здесь
19 Oct, 24 -
Невидимый Macintosh Hd
19 Oct, 24 -
Конференции: Начало Пути
19 Oct, 24 -
Не В России
19 Oct, 24 -
Пункты Разработки И Продажи Модулей Битрикс
19 Oct, 24