Базовая схема сильно отличается от того, что вы описали. Обычно шифруется только тело вируса, а не весь раздел кода. Рассмотрим простой вирус, который либо расширяет раздел кода, либо создает новый для своего тела. Теперь, чтобы сделать его полиморфным, нужно добавить шифрование и сделать код расшифровщика непостоянным, например:
1) вставлять nops случайным образом (nop
, add reg, 0
, push reg; pop reg
и т. Д.)
2) изменить ход программы с помощью (jmp next
, clc; jc next
и т. Д.)
3) использовать инструкции с таким же арифметическим эффектом (add eax, 3
-> add eax, 9; sub eax, 6
)
Полиморфный означает, что он может иметь фиксированное количество кодировок, поэтому самый простой способ его создания - разбить код расшифровщика на несколько блоков и обеспечить несколько кодировок одинаковой длины для каждого.
РЕДАКТИРОВАТЬ: Да, это часть тела вируса. Чтобы использовать его, вы помещаете все эти «кирпичики» в тело вируса, а когда другой файл заражен, вы создаете для него случайную версию расшифровщика.