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