Собственно давно уже пора вытащить на свет божий набор шагов, которые должен проделать статический распаковщик для полиморфных пакеров.
Напомню некоторые термины:
Напомню некоторые термины:
- Полиморфизм - вид обфускации потока машинных инструкций целью которого является сохранение цели кода, но выразить другими машинными инструкциями.
- Статический распаковщик - характеризуется тем что он не запускает исполняемый файл, а снимает его защиту используя знание о строении файла, работе стаба в упакованном файле
Статические распаковщики очень часто пишут антивирусные компании, что бы получить "чистый" не упакованный файл без его запуска.
Этапы:
- Инициализация
- Работа
- Завершение
Этап инициализации включает в себя:
- Открытие файла и создание нового выходного
- Сделать "первичную", т.е. быструю проверку файл. Т.е. минимальные требования к файлу : правильные: битность, архитектура, процессор, сигнатуры формата и т.д.
- Далее следует подготовить выходной файл. Здесь возможны две ситуации: 1) Стаб применяет алгоритмы сжатия и 2) Стаб не применяет алгоритмы сжатия. В случае первой ситуации нужно проделать процедуру "размаппить"(см. ниже). Во втором случае мы просто копируем входной в выходной
Под "размаппить" понимается приведение файла в такой вид, как будто бы мы только что сдампили файл, за тем лишь исключением что дампим мы обычно уже после настроенного импорта. Как правило, процесс "размаппить" выглядит так:
- Выходной файл размером в SizeOfImage байт наполняется нулями.
- Затем в этот файл копируются заголовки
- Далее пробегаясь по описателям секций в файл записываются данные секций
Другими словами "размаппить" это частичная эмуляция системного загрузчика.
Этап работы включает в себя:
- Мы должны "пробежаться" потоку машинных инструкций и собрать статистику встречаемых инструкций.
- Попутно мы должны вычленить поведение интересующего нас потока полезных инструкций.
- На основании статистики встречаемых инструкций мы выносим вердикт "Это наш упаковщик"
- Если в п.3 вердикт положителен, мы на основании полученных в п.2 потоке машинных инструкций производим расшифровку
Этап завершения включает:
- Удаление стаба. К примеру наполнение байтом 0x90 области, которую он занимал.
- Задаем в заголовке значение новой точки входа
Писал для себя а то иногда забываю что-нибудь написать в коде. Если решили забрать себе в блог\журнал или еще куда ОБЯЗАТЕЛЬНО упомянуть автора,т.е. меня!
Комментариев нет:
Отправить комментарий