Распаковка джойнеров

Тема в разделе "Статьи", создана пользователем Undead, 9 май 2012.

  1. Undead
    Undead Новичок
    Симпатии:
    1
    Доброго времени суток.
    В этой статья я расскажу, как достать склеенные файлы из джойнера.

    Оглавление:
    1)Инструменты
    2)Как работают джойнеры
    3)Распаковка

    Инструменты:
    Во первых, нам понадобиться сам джойнер.
    Порывшись в гугле, я нашел FreeJoiner by GLOFF. Он клеит файлы в неограниченном количестве и с любыми расширениями.
    Во вторых, нам понадобиться отладчик. Я использую OllyDbg c плагином CommandBar. Все, больше ничего не нужно :)
    Как работают джойнеры
    Джойнер - программа, которая "склеит" два файла в один с расширением EXE.
    Принцип прост. Сначала прога читает коды файлов и кладет их в стаб, т.е
    в ту часть джойнера, которая занимается распаковкой. На выходе мы получим файл вида:
    Код распаковщика+Код 1 файла+ Код 2 файла+Код N файла
    Такой файл называют контейнером.
    Распаковщик извлечет коды файлов из контейнера, создаст пустые файлы, положит в них коды наших файлов (которые мы клеили) и запустит.
    Надеюсь, все объяснил.
    Распаковка
    Для начала запустим джойнер и склеим два файла.
    Я склеил readme.txt и сам джойнер :)
    [​IMG]
    [​IMG]
    [​IMG]
    На выходе, я получил файл весом чуть более 10 кб.
    Теперь открываем его в OllyDbg.
    [​IMG]
    [​IMG]
    Посмотрим на начало кода:
    [​IMG]
    Вызывается какая-то процедура, и после ее вызова программа завершается. Посмотрим что у нас в этой процедуре.
    Ставим на нее брэйкпоинт:
    [​IMG]
    Жмем F9 (запуск программы). Когда серая строчка окажется на нашей функции, жмем F7(вход в процедуру). Самое ее начало нас не интересует. Интересное начинается с адреса 00401288. Идем на этот адрес, для этого:
    Жмем правой кнопкой на поле с кодом->go to->expression
    и вводим адрес 00401288.
    Попадем в цикл:
    [​IMG]
    Я думаю опытные реверсеры уже поняли как происходить распаковка.

    1)Вызывается функция GetTempPath, которая возвращает путь до папки Temp
    2)Вызывается функция lstrcatA, которая соединит путь до папки Temp и название
    3)Функции CreatFileA передаются параметры (путь до файла, доступ и т.п), затем она создает пустой файл с расширением EXE.

    4)Функция WirteFile запишет код одного в файла в предварительно созданный EXE(см п.3)
    5)Вызывается функция ShellExecuteA которая запустит файл.
    Потом все начнется заново (цикл), но уже для второго файла
    Общий вид:
    [​IMG]

    Теперь распаковка. Нам нужно "занопить" вызов функции ShellExecuteA.
    Для этого:
    1) Открываем файл в отладчике заново
    2) Идем на адрес 00401348 (это адрес функции ShellExecuteA)
    3)Жмем два раза на эту строчку и пишем NOP
    [​IMG]
    4) Теперь жмем F9 (запуск из отладчика)
    Ждем пока адреса изменяться (будут начинаться на 7) и идем в темп.
    Там нас будут ждать два файла :)
    [​IMG]
     
    9 май 2012
  2. onthar
    onthar Продвинутый
    Симпатии:
    224
    Это сработает только с примитивными дроперами. Сейчас уже давно запуск из памяти производится, без копирования на диск.
     
    9 май 2012
Загрузка...