Модифицируем стаб 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: скачать (пароль на архив: kaimi-io)

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

          1. Здравствуйте, спасибо за информацию, вы ее подаете лучше чем все преподаватели программирования. Может посоветуете, как снять защиту для тестов в tMaker. Нужно отредактировать старые тесты в установленном зарегистрированном пакете SunRav (tMaker, tTester, t admin). Редакция тестов непосредственно в tMaker. Могу инсталляцию программы с генератором ключей и сами тесты сбросить через Google disk. Выручите целый университет, включая преподавателей.

      1. Говорят что есть лозейки , и за деньги как то вскрывают архивы, без брута, что скажешь по этому поводу?

          1. Привет Kaimi! У меня проблема с твоим модулем Анти Вирус его удаляет. И SFX созданные им тоже удаляет. Как его исправить он мне очень нужен...

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

  1. Kaimi, очень интересный блог, много открыл для себя, продолжай.
    Знаю, ты не занимаешься криптом, но можешь ли ты посоветовать книги по этой теме?

    1. Привет, я отвечу. Я писал упаковщик, что недалеко от криптора, и для этого использовал только статью Криса Касперски "Путь воина" про формат PE-файлов. А дальше просто экспериментировал, читал MSDN и всякие мелкие статейки, которые находились в интернете.

  2. Kaimi. А как быть с sfx 7z архивом. Подскажите пожалуйста. У rar-а в sfx модуле есть getpassword и джампер в 7z sfx модуле этого нет.

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

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