Модифицируем стаб SFX WinRAR

winrar
Речь пойдет о тривиальной модификации стаба самораспаковывающегося архива WinRAR, которая состоит в следующем: сделать, чтобы SFX-архив при обычном запуске просто извлекал свое содержимое, а при попытке открытия с помощью WinRAR - запрашивал ввод пароля. Зачем это? Да так, увидел тему на форуме и решил попробовать.
Стаб SFX-архива - это обычный исполняемый файл, оверлей которого содержит полезную нагрузку, сформированную пользователем: файлы, которые необходимо распаковать, и настройки, задаваемые при создании архива. Эта основа находится в директории, куда был установлен WinRAR, и называется Default.SFX.

Воспользуемся отладчиком-дизассемблером x64dbg, чтобы изучить этот файл. К слову, файл был взят из WinRAR версии 5.40, контрольная сумма:

Сразу обратимся к перечню строк, которые используются в коде.

dbg-strings
Меня сразу заинтересовали строки GETPASSWORD1, так как при открытии SFX-архива, который защищен паролем, появляется окно для ввода пароля, а стиль именования намекает, что это идентификатор ресурса, отвечающего за это окно. Рассмотрим подробнее, что происходит в фрагментах кода, которые ссылаются на эти строки.

dbg-1st
Первый фрагмент - это вызов функции WinAPI DialogBoxParam, после выполнения которой появляется диалоговое окно, предлагающее ввести пароль. Обратите внимание, один из аргументов - это адрес 418B2B, который представляет собой функцию-обработчик оконных сообщений для появившегося диалогового окна. Если перейти по этому адресу и полистать код, то почти сразу увидим место, где происходит получение пароля из диалогового окна.

dbg-2nd
Интересующий нас фрагмент кода начинается с адреса 418B81, а на этот адрес можно попасть по условному переходу с адреса 418B6B. Запомним последнее значение, оно нам еще понадобится. Также приведу примерную логику фрагмента кода функции-обработчика, чтобы было понятнее:

У нас есть одна из составляющих, теперь подумаем, куда можно прицепить пароль к архиву, чтобы поменьше заморачиваться и попроще им воспользоваться, не вдаваясь в анализ логики внутренних методов архиватора. Правильно, в ресурсы, точнее в качестве значения по умолчанию для поля, куда вводится пароль. Я буду использовать PE Explorer для этого.

pe-exp
После открытия файла, сразу перейдем в раздел диалогов и найдем интересующий нас диалог.
Теперь зададим значение по умолчанию для поля ввода пароля.

pe-exp-def
Такое большое число символов обусловленно тем, что мне захочется автоматизировать процесс подстановки пароля, а менять каждый раз содержимое вручную, когда хочется изменить пароль - пустая трата времени. Кстати, после сохранения Default.SFX с модифицированной секцией ресурсов, было бы неплохо поменять условный переход на безусловный по адресу, который я упоминал выше.

После этого форма ввода пароля даже не будет успевать отобразиться - сразу будет взят пароль из поля для ввода, с последующим мгновенным закрытием диалогового окна.
Давайте попробуем создать SFX-архив с модифицированным Default.SFX. Помещаем Default.SFX в директорию WinRAR и, как обычно, создаем архив с защитой паролем. В качестве пароля введем:

Теперь попробуем открыть получившийся архив. Если модификация была произведена корректно, то появится подобное окно:

sfx-fail
Все дело в том, что пароль, который мы задали, не совпадает с тем, который прописан в стабе. Что ж, для теста изменим содержимое стаба в каком-нибудь hex-редакторе. Для этого найдем строчку kaimi.io в файле и заменим её, а также цифры после, желаемым паролем, остаток заполним нулевыми байтами. Я сделаю это в CFF Explorer:

cff-exp

Сохраним модифицированный файл. Теперь при двойном клике по файлу - он будет извлечен без дополнительного запроса пароля, а при попытке открыть файл в WinRAR или каком-либо другом архиваторе - нас встретит диалоговое окно с просьбой ввести пароль от архива. Задание выполнено, но давайте сделаем небольшой скрипт, который будет заменять пароль в стабе, чтобы лишний раз не открывать hex-редактор.

Для запуска скрипта потребуется интерпретатор Python 3, скрипт следует поместить в директорию с WinRAR и модифицированным Default.SFX.

Архив со скриптом, оригинальным и модифицированным Default.SFX: скачать

Модифицируем стаб SFX WinRAR: 5 комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *