Все кому не лень, трактуют его , Я же предлагаю прийти к общей терминологии, дабы облегчить общение.
Полиморфизм, как свойство – это наличие разных ассемблерных форм, для одного и того же кода.
Мутация – это процесс морфинга кода:
- замена опкодов на аналоги
- смешивание целевого кода с
- математические преобразования
- перестановка местами блоков кода
- генерация случайного алгоритма декриптора
- и многие другие бинарные
В своём первоначальном значении, которое появилось более десятка лет назад:
- Полиморфный вирус – тело вируса накрыто полиморфным декриптором.
- Метаморфный вирус – способный мутировать своё тело целиком, пересобирая его по внутренним “чертежам”.
- Пермутирующий вирус – способный мутировать откомпилированный код, обычно свой. То есть, он дизассемблирует код, мутирует его и кладёт на место.
Конечно оно будет сильно затруднено, но современные эвристики и являются достойным решением возникшей угрозы сканерам. Говоря по-простому, эти красивые идеи несколько порастеряли свою актуальность, а вырванные из контекста термины используются совсем в других областях…
Исторический экскурс закончен, подробней вы сможете почитать в разделе ссылок, а мы переходим к современным реализациям.
Декрипторы
Зашифровать код и вызвать декриптор перед исполнением – наиболее распространённое решение. Код меняет свою бинарную форму? Да, он превращается в мусор и без декриптора бесполезен. Но как быть с появлением сигнатур на декрипторе? Тут на нам помощь приходит полиморфизм!
Поиграть с этим декриптором можно .
У декрипторов в современных ОС есть одна проблемка – для работы расшифрованного кода, он должен иметь атрибуты памяти Read|Write|Execute, что достигается:
- назначением таких прав в pe-хидерах, на что плохо реагирует эвристика хидеров.
- динамическим вызовом VirtualProtect(PAGE_EXECUTE_READWRITE) или VirtualAlloc(PAGE_EXECUTE_READWRITE), что может заинтересовать эвристику эмулятора.
Генераторы
Алгоритмы, способные создавать разные ассемблерные представления одного кода, называютполиморфными движками:
- C++
- MASM
Давайте мысленно проследим развитие одной команды полиморфного генератора:
- GEN_MOV_REG_0 – умеет генерировать одну команду mov reg,0
- SET_REG_0 – умеет генерировать случайную из
- SET_REG_0_TRASH – прошлый шаг щедро разбавляется
- SET_REG_0_MEGATRASH – мусор становится сложнее, на каждый целевой опкод приходится по сотне вложенных функций с WinApi.
Ссылки
Почитайте эти тщательно отобранные труды, но помните о чём мы говорили выше =)
Ну и конечно, Вы можете помочь !