Explosion antivirus (одинадцатая версия)
О программе
Программа Explosion Antivirus, предназначена для демонстрации способов реализации различных антивирусных технологий и является, так называемым, учебным пособием для системных программистов.
Основная цель — показать возможность создания эффективного антивируса с открытым исходным кодом, использующего методы эмуляции, которые тогда применялись только в коммерческих продуктах (Kaspersky, Dr.Web).
В комплект каждой версии программы, входят полные исходные тексты (на языке ассемблера под операционую систему win32), с максимальным количеством комментариев на русском языке.
Предисловие
Между выходом 010 и 011 прошло без малого 5 лет, большую часть из которых никакой работы над антивирусом не велось. Однако в 2009 появилась возможность вернуться к проекту, что бы завершить наконец работу над эмулятором, в том виде, в котором он изначально задумывался.
Что нового по сравнению с версией 010
Язык и инструменты
Антивирус был полностью переписан под бесплатный и современный интерпретатор FASM.
Выполнен переход на модульную архитектуру (поставка увеличена с 20 файлов до 80+), почти весь исходный код содержит поясняющие комментарии.
Проделана огромная работа по отладке и обеспечению стабильности программы.
Лицензия
Начиная с этой версии, Explosion Antivirus защищен Стандартной Общественной Лицензией GNU GPL, оригинальный текст которой на английском языке, а так же неофициальный перевод на русский язык, входят в состав каждой поставки антивирусного сканера.
Управление памятью
Реализовано динамическое выделение памяти под размер проверяемых файлов (ранее выделялся фиксированный объем в 100mb).
Это позволяет проверять файлы любых размеров в пределах доступной RAM.\После проверки файла выделенная память освобождается.
Новый механизм «загрузки» PE-файлов
Реализована полноценная загрузка PE-файла с выравниванием (ранее файл просто читался в буффер), что помимо качества работы антивируса значительно повышает и скорость его работы.
Зачем это нужно: Многие упаковщики и вирусы используют секции, у которых виртуальный размер больше физического (например, .data секция с неинициализированными данными). Эмуляция без учёта этого могла привести к ошибкам доступа.
Эмуляция программного кода
Полностью переписана и оптимизирована.
Пересмотрены алгоритмы эмуляции инструкций работающих с виртуальным стеком (PUSH и POP).
Эмуляция API
Добавлены функции работы с перечнем API (31 шт.), импортируемых исполняемым файлом, а так же примитивный эмулятор вызовов API. Над этим блоком, мы стали трудиться разбирая сложный полиморфный вирус Win32.Driller (Он же TUAREG), способный генерировать вызовы API при формировании своих расшифровщиков.
Проверка файлов, упакованных последней версией UPX, временно не поддерживается. Эмулятор проходит почти весь код, но останавливается на вызове API “VirtualProtect”.
Частичный перечень ошибок, исправленных в эмуляторе
- Ошибка, возникавшая при имитации выполнения межсекционных переходов (если переход осуществлялся в самое начало второй, и выше, секции).
- При обращении к данным, расположенным в другой секции, неправильно рассчитывалось их положение.
- Переработан алгоритм полной имитации выполнения инструкций, обращающихся к данным. Раньше в большинстве случаев не сохранялось состояние флагов.
- Если в коде, регистр ESP использовался не для обращений к стеку (а например, для обращения к данным), некорректно рассчитывалось смещение.
Дизассемблер
Полностью переписан и оптимизирован. Поддерживает ~400 инструкций (ранее около 70).
Добавлены инструкции:
- MOVZX / MOVSX (расширение с/без знака)
- LEA со сложной адресацией ([eax+ecx*4+10h])
- Все 16 условных переходов (JO, JNO, JB, JNB, JE, JNE, JBE, JA, JS, JNS, JP, JNP, JL, JNL, JLE, JG)
- Инструкции с префиксом 66h (16-bit операнды)
- Строковые инструкции (CMPS, STOS, LODS)
- Инструкции FPU (сопроцессора)
- Более сложные формы адресации (масштабирование, база+индекс+смещение)
Обнаружение вирусов
База антивируса пополнилась сигнатурами вирусов:
- Win9x.HPS
- W32/Thorin
- W9x/Zombie II
- W32/Aztec [1344] (Symantec: Win32.Iced.1344)
Разработка алгоритмов лечения нами не планировалась. Основная цель расширения базы — тест корректности работы новой версии эмулятора и дизассемблера инструкций.
Лечение заражённых файлов
После перевода исходных текстов антивирусов на FASM, корректность лечения зараженных файлов не проверялась по этому в версии 011 функция лечения была отключена.
Сервисные функции
Отключение таймера эмулятора (/t-)
Для удобства отладки, добавлена возможность отключения таймера, используемого эмулятором. Отключение таймера инициируется через командную строку, при помощи специального ключа «/t». При выключенном таймере, эмулятор будет работать до тех пор, пока не встретит неизвестную инструкцию или же обнаружит известный вирус. Что может быть полезно для полной эмуляции длинных расшифровщиков или же расшифровщиков, работающих по алгоритму RDA. Внимание, процесс проверки файлов с отключенным таймером, может занять весьма продолжительное время и даже привести к зависаниям.
Создание дампов (/d)
Был доработан механизм создания «дампов» проверяемых файлов (ключ «/d» командной строки), который вызывается после завершения проверки исполняемого файла. В этом режиме, Explosion Antivirus создает файл с расширением “.dmp”, для каждого проверенного исполняемого файла (формат PE). По содержимому «дампа» можно посмотреть, результат работы эмулятора – например, как выглядит файл с расшифрованным (или же частично расшифрованным) вирусным телом. Однако даже при обнаружении вируса в исполняемом файле, в сформированном «дампе» не всегда будет содержаться его расшифрованная копия. Например, вирус Win9X.Zombie II, формирует расшифрованное тело в стеке, а для детектирования вируса Win32.Thorin совсем не обязательно полностью расшифровывать его тело (полная расшифровка необходима только для лечения этого вируса).
Формирование листингов дизассемблера
В процессе отладки эмулятора, возникла необходимость формирования листингов дизассемблера. Но спустя некоторое время, эта необходимость отпала сама по себе. Однако часть написанного на эту тему кода, мы не стали удалять, и она содержится в комплекте поставки.
Парсер командной строки
| Версия | Описание |
|---|---|
| 010 | Самодельный парсер с ограничениями |
| 011 | Профессиональный (см. «cmd.inc») GetMainArgs v1.01 © 2003 Theodor-Iulian Ciobanu |
Для кого может быть полезен Explosion Antivirus
Прекрасно осознавая тот факт, что рынок уже перенасыщен коммерческими программами, создатели которых ставят перед собой целью ожесточенную борьбу с вредоносными программами, мы не ставим перед собой подобных целей. Для этого есть масса специализированных продуктов, а Explosion Antivirus может быть полезен:
- Программа поставляется в виде полностью открытых исходных кодов, которые могут служить примером реализации различных антивирусных технологий (например, алгоритма проверки исполняемых файлов PE и их лечения от различных вирусов, или же эмулятора программного кода). Стоит подчеркнуть, что методы реализации алгоритмов, использованные нами в Explosion Antivirus, не являются единственно правильными. Вы можете использовать части исходного кода для обучения или же в своих программах согласно тексту лицензии GNU GPL.
- Как показал опыт, даже в специализированном, коммерческом программном обеспечении (антивирусах) не всегда содержатся процедуры лечения вирусов, и это касается не только новых, неизвестных программам вирусов, но, часто справедливо и для тех, что давно обнаруживаются сканнерами. На основе уже реализованного функционала, Explosion Antivirus может быть доработан для определения и лечения новых, не известных сканеру, файловых вирусов.
Планы на следующие версии
В дальнейшем мы планируем развивать эмулятор антивируса (а так же использующиеся в его составе дизассемблер инструкций и кодо-анализатор) и очень надеемся, что в далеком будущем его можно будет использовать не только для обнаружения шифрованных (полиморфных) вирусов, но и для снятия различных «навесных» защит.
Скачать
Версия 011 ранее публиковалась только на http://needful-things.ru (не активен).
Авторы: Andrei Agafonov, Andrew Vedisheff