┌──┌─┐┌──
──┘├─┘──┘ Presents
┐  ┌┐┐┌─┤ VMag, Issue 3, 1 January 1999
└─┘┘ ┘└─┘ ─────────────────────────────

(c) 1998 Евгений Касперский.

   Глава из книги "Компьютерные вирусы". СК-Пресс, Москва, 1998.

   2.8.2. Уровни полиморфизма

   Существует деление  полиморфик-вирусов  на  уровни  в  зависимости от
сложности кода,  который встречается в расшифровщке этих вирусов.  Такое
деление  впервые  предложил  д-р  Алан  Соломон,  через  некоторое время
Весселин Бончев расширил его.

   Уровень 1.  Вирусы,  которые имеют  некоторый набор  расшифровщиков с
постоянным кодом и  при  заражении выбирают один  из  них.  Такие вирусы
являются   полуполиморфиками  и   носят   также   название  олигоморфики
(oligomorphic). Примеры: Cheeba, Slovakia, Whale.

   Уровень 2. Расшифровщик вируса содержит одну или несколько постоянных
инструкций, основная же его часть постоянна.

   Уровень  3.  Расшифровщик содержит неиспользуемые инструкции -  мусор
типа NOP,CLI, STI и т.д.

   Уровень 4. В расшифровщике используется взаимозаменяемые инструкции и
изменение  порядка   следования  (перемешивание)  инструкций.   Алгоритм
расшифровки при этом не изменяется.

   Уровень  5.  Используется  все  перечисленные выше  приемы,  алгоритм
расшифровки непостоянен,  возможно  повторное шифрование кода  вируса  и
даже частичное шифрование самого кода расшифровщика.

   Уровень 6. Permutating-вирусы. Изменению подлежит основной код вируса
- делится на блоки,  которые при заражении переставляются в произвольном
порядке.  Вирус при этом остается работоспособным. Подобные вирусы могут
быть не зашифрованы.

   Приведенное  выше  деление  не  свободно  от  недостатков,  поскольку
производится по единственному критерию -  возможности обнаруживать вирус
по коду расшифровщика при помощи стандартного приема вирусных масок:

   Уровень 1. Для обнаружения вируса достаточно иметь несколько масок.

   Уровень 2. Обнаружение по маске с использованием wildcards.

   Уровень 3. Обнаружение по маске после удаления инструкций-"мусора".

   Уровень 4.  Маска содержит несколько вариантов возможного кода,  т.е.
становится алгоритмической.

   Уровень 5. Невозможность детектирования вируса по маске.

   Недостаточность  такого  деления  продемонстрирована  в  вирусе  3-го
уровня полиморфичности,  который так и называется -  Level3. Этот вирус,
являясь одним из  наиболее сложных полиморфик-вирусов,  по  приведенному
выше делению попадает в  уровень 3,  поскольку имеет постоянный алгоритм
расшифровки,  перед  которым  стоит  большое количество команд-"мусора".
Однако  в   этом  вирусе  алгоритм  генерирования  "мусора"  доведен  до
совершенства:  а  коде  расшифровщика могут  встретится  практически все
инструкции процессора i8086.
   Если  произвести деление с  точки  зрения  антивирусов,  использующих
системы  автоматического  расшифрования  кода  вируса  (эмуляторы),   то
деление на  уровни  будет  зависеть от  сложности эмуляции кода  вируса.
Возможно  определение  кода   вируса   и   другими  приемами,   например
расшифрование при  помощи  элементарных  математических законов  и  т.д.
Поэтому мне кажется более объективным деление, в котором помимо критерия
вирусных масок участвуют и другие параметры:

   1.  Степень  сложности полиморфик-кода  (процент от  всех  инструкций
процессора, которые могут встретиться в коде расшифровщика).
   2. Использование антиэмуляторных приемов.
   3. Постоянство алгоритма расшифровщика.
   4. Постоянство длины расшифровщика.

   Мне бы не хотелось излагать эти пункты подробнее, поскольку это может
подтолкнуть вирусописателей к созданию подобных монстров.