Полиморфизм - высококлассная техника, позволяющая вирусу быть незамеченным по стандартной сигнатуре. Все полиморфные вирусы снабжаются расшифровщиком кода, который по определенному принципу преобразует переданный ему код, вызывая при этом стандартные функции и процедуры операционной системы. Сами методы шифрования могут быть разными, но, как правило, каждая операция имеет свою зеркальную пару. В ассемблере это реализуется очень просто, и таких пар может быть очень много - ADD/SUB, ROL/ROR и т.п. Немаловажной особенностью полиморфного вируса является то, что вирус содержит операнды, функции и процедуры, которые служат лишь для запутывания кода.
Выделяют несколько уровней полиморфизма, используемых в вирусе:
- самые простые олигоморфные вирусы. Они используют постоянные значения для своих расшифровщиков, поэтому легко определяются антивирусами;
- вирусы, имеющие одну или две постоянные инструкции, которые используются в расшифровщиках;
- вирусы, использующие в своем коде команды-мусор. Это в своем роде ловушка от детектирования, помогает запутать собственный код. Но такой вирус может быть засечен с помощью предварительного отсеивания мусора антивирусом;
- использование взаимозаменяемых инструкций с перемешиванием в коде без дополнительного изменения алгоритма расшифровки, помогает полностью запутать антивирус;
- неизлечимый уровень. Существуют вирусы, которые состоят из программных единиц - частей. Они постоянно меняются в теле и перемещают свои подпрограммы. Характерной особенностью такой заразы являются пятна. При этом в различные места файла записываются несколько блоков кода, что обуславливает название метода. Такие пятна в целом образуют полиморфный расшифровщик, который работает с кодом в конце файла. Для реализации метода даже не нужно использовать команды-мусор, подобрать сигнатуру будет все равно невозможно.
Полиморфизм стал весьма распространенным лишь благодаря расшифровщику. Удобно то, что один файл может работать со многими вирусами. Этим и пользуются вирусописатели, используя чужой модуль. В полиморфы нередко встраивают код, который выполняется в зависимости от определенной ситуации. Например, при детектировании вируса он может вызвать процедуру самоуничтожения. Как самого себя (частичная или полная безвозвратная модификация кода), так и системы (массовое заражение системных файлов без возможности восстановления). Это очень осложняет поиск антивируса от полиморфного вируса, до антивирусной лаборатории вирус доходит уже в нерабочем состоянии.
Первый полиморфный вирус появился в 1990 году и назывался Chameleon. Он вписывал свой код в конец COM-файлов, а также использовал два алгоритма шифрования. Первый шифрует тело по таймеру в зависимости от значения заданного ключа. Второй использует динамическое шифрование и при этом активно мешает трассировки вируса. Он не был опасен, хотя содержал в коде ряд ошибок, из-за которых генератор не мог расшифровать тело вируса. При этом исполняемый файл переставал функционировать. После длительного простоя системы Phantom выводил на экран видеоизображение с надписью. Она гласила, что компьютер находится под наблюдением опасного вируса.
Параллельно вирусам появлялись и полиморфик-генераторы, одним из которых был MtE, открывший целые вирусные семейства. Он уже использовал зеркальные функции, чем затруднял своё детектирование. Теперь вирусологу не нужно было писать свой дешифратор, а лишь воспользоваться MtE. MtE-вирус был перехвачен антивирусной лабораторией, поэтому быстрый выход защиты от первого серьёзного полиморфного вируса защитил множество рабочих станций от заразы.
Другое семейство вирусов Daemaen записывает себя в COM, EXE и SYS файлы. С виду эти вирусы выглядят вполне безопасно, но на самом деле происходит запись в MBR винчестера и в boot-сектора дискет, а тело заразы хранится в последних секторах.