Речь пойдет о тривиальной модификации стаба самораспаковывающегося архива
Стаб SFX-архива - это обычный исполняемый файл, оверлей которого содержит полезную нагрузку, сформированную пользователем: файлы, которые необходимо распаковать, и настройки, задаваемые при создании архива. Эта основа находится в директории, куда был установлен WinRAR, и называется Default.SFX.
Воспользуемся отладчиком-дизассемблером
Сразу обратимся к перечню строк, которые используются в коде.
Меня сразу заинтересовали строки GETPASSWORD1, так как при открытии SFX-архива, который защищен паролем, появляется окно для ввода пароля, а стиль именования намекает, что это идентификатор ресурса, отвечающего за это окно. Рассмотрим подробнее, что происходит в фрагментах кода, которые ссылаются на эти строки.
Первый фрагмент - это вызов функции WinAPI
Интересующий нас фрагмент кода начинается с адреса 418B81, а на этот адрес можно попасть по условному переходу с адреса 418B6B. Запомним последнее значение, оно нам еще понадобится. Также приведу примерную логику фрагмента кода функции-обработчика, чтобы было понятнее:
У нас есть одна из составляющих, теперь подумаем, куда можно прицепить пароль к архиву, чтобы поменьше заморачиваться и попроще им воспользоваться, не вдаваясь в анализ логики внутренних методов архиватора. Правильно, в ресурсы, точнее в качестве значения по умолчанию для поля, куда вводится пароль. Я буду использовать PE Explorer для этого.
После открытия файла, сразу перейдем в раздел диалогов и найдем интересующий нас диалог.
Теперь зададим значение по умолчанию для поля ввода пароля.
Такое большое число символов обусловленно тем, что мне захочется автоматизировать процесс подстановки пароля, а менять каждый раз содержимое вручную, когда хочется изменить пароль - пустая трата времени. Кстати, после сохранения Default.SFX с модифицированной секцией ресурсов, было бы неплохо поменять условный переход на безусловный по адресу, который я упоминал выше.
После этого форма ввода пароля даже не будет успевать отобразиться - сразу будет взят пароль из поля для ввода, с последующим мгновенным закрытием диалогового окна.
Давайте попробуем создать SFX-архив с модифицированным Default.SFX. Помещаем Default.SFX в директорию WinRAR и, как обычно, создаем архив с защитой паролем. В качестве пароля введем:
Теперь попробуем открыть получившийся архив. Если модификация была произведена корректно, то появится подобное окно:
Все дело в том, что пароль, который мы задали, не совпадает с тем, который прописан в стабе. Что ж, для теста изменим содержимое стаба в каком-нибудь hex-редакторе. Для этого найдем строчку kaimi.io в файле и заменим её, а также цифры после, желаемым паролем, остаток заполним нулевыми байтами. Я сделаю это в CFF Explorer:
Сохраним модифицированный файл. Теперь при двойном клике по файлу - он будет извлечен без дополнительного запроса пароля, а при попытке открыть файл в WinRAR или каком-либо другом архиваторе - нас встретит диалоговое окно с просьбой ввести пароль от архива. Задание выполнено, но давайте сделаем небольшой скрипт, который будет заменять пароль в стабе, чтобы лишний раз не открывать hex-редактор.
Для запуска скрипта потребуется интерпретатор
Архив со скриптом, оригинальным и модифицированным Default.SFX:
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
, которая состоит в следующем: сделать, чтобы SFX-архив при обычном запуске просто извлекал свое содержимое, а при попытке открытия с помощью WinRAR - запрашивал ввод пароля. Зачем это? Да так, увидел тему на форуме и решил попробовать.Стаб SFX-архива - это обычный исполняемый файл, оверлей которого содержит полезную нагрузку, сформированную пользователем: файлы, которые необходимо распаковать, и настройки, задаваемые при создании архива. Эта основа находится в директории, куда был установлен WinRAR, и называется Default.SFX.
Воспользуемся отладчиком-дизассемблером
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
, чтобы изучить этот файл. К слову, файл был взят из WinRAR версии 5.40, контрольная сумма:
Код:
sha1sum Default.SFX
368619270c0f5a921813a9acd631a668c5f78388 Default.SFX
Меня сразу заинтересовали строки GETPASSWORD1, так как при открытии SFX-архива, который защищен паролем, появляется окно для ввода пароля, а стиль именования намекает, что это идентификатор ресурса, отвечающего за это окно. Рассмотрим подробнее, что происходит в фрагментах кода, которые ссылаются на эти строки.
Первый фрагмент - это вызов функции WinAPI
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
, после выполнения которой появляется диалоговое окно, предлагающее ввести пароль. Обратите внимание, один из аргументов - это адрес 418B2B, который представляет собой функцию-обработчик оконных сообщений для появившегося диалогового окна. Если перейти по этому адресу и полистать код, то почти сразу увидим место, где происходит получение пароля из диалогового окна.Интересующий нас фрагмент кода начинается с адреса 418B81, а на этот адрес можно попасть по условному переходу с адреса 418B6B. Запомним последнее значение, оно нам еще понадобится. Также приведу примерную логику фрагмента кода функции-обработчика, чтобы было понятнее:
Код:
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
...
if(uMsg == WM_INITDIALOG)
{
SetDlgItemText(...)
}
else
{
if(uMsg != WM_COMMAND)
return 0;
if(wParam == 1) // 418B6B
{
GetDlgItemText(...) // 418B81
func1(...)
func2(...)
EndDialog(...)
}
}
...
}
После открытия файла, сразу перейдем в раздел диалогов и найдем интересующий нас диалог.
Теперь зададим значение по умолчанию для поля ввода пароля.
Такое большое число символов обусловленно тем, что мне захочется автоматизировать процесс подстановки пароля, а менять каждый раз содержимое вручную, когда хочется изменить пароль - пустая трата времени. Кстати, после сохранения Default.SFX с модифицированной секцией ресурсов, было бы неплохо поменять условный переход на безусловный по адресу, который я упоминал выше.
Код:
00418B6B 74 14 -> EB 14
Давайте попробуем создать SFX-архив с модифицированным Default.SFX. Помещаем Default.SFX в директорию WinRAR и, как обычно, создаем архив с защитой паролем. В качестве пароля введем:
Код:
SamplePassword
Все дело в том, что пароль, который мы задали, не совпадает с тем, который прописан в стабе. Что ж, для теста изменим содержимое стаба в каком-нибудь hex-редакторе. Для этого найдем строчку kaimi.io в файле и заменим её, а также цифры после, желаемым паролем, остаток заполним нулевыми байтами. Я сделаю это в CFF Explorer:
Сохраним модифицированный файл. Теперь при двойном клике по файлу - он будет извлечен без дополнительного запроса пароля, а при попытке открыть файл в WinRAR или каком-либо другом архиваторе - нас встретит диалоговое окно с просьбой ввести пароль от архива. Задание выполнено, но давайте сделаем небольшой скрипт, который будет заменять пароль в стабе, чтобы лишний раз не открывать hex-редактор.
Код:
import sys
import fileinput
pattern = 'kaimi.io0123456789012345678901234567890123456789'
print('Enter desired password:')
password = input('>')
if len(password) > len(pattern):
print('Too long password')
else:
password = password.encode('utf-16le')
pattern = pattern.encode('utf-16le')
password = password.ljust(len(pattern), b'\0')
with fileinput.FileInput('Default.SFX', inplace=True, backup='.bak', mode='rb') as file:
for line in file:
sys.stdout.buffer.write(line.replace(pattern, password))
print('Done')
input('\nPress Enter to exit...')
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
, скрипт следует поместить в директорию с WinRAR и модифицированным Default.SFX.Архив со скриптом, оригинальным и модифицированным Default.SFX:
Вложения
-
124.2 KB Просмотры: 25