22.03.2000 Stack polimorphic engine [Voodoo]

 Приветствую тебя уважаемый  читатель. Речь в этой статье пойдет о 
полиморфизме.
Люди имевшие дело с полиморфизмом знают, что традиционным методом 
является создание  полиморфного расшифровщика. При этом  основной код 
шифруется. Существует еще один метод создания полиморфного кода, 
менее традиционный. 
Суть данного метода заключается в следующем:
генерируется  код результатом работы которого является появление
в стеке исходного кода. Далее передается управление в стек на 
исходную программу. Код который  дописывается к жертве выглядит 
примерно так:

мусор
push 0xXXXXXXXX ; Последнее двойное слово исходного кода
мусор
push 0xXXXXXXXX
мусор
:
:
push 0xXXXXXXXX ; Первое двойное слово исходного кода
мусор
jmp esp
мусор

Данный метод имеет свой плюсы и свои минусы.
К минусам можно отнести большой коэффициент увеличения кода. Так при
коэффициенте увеличения кода 4, исходный код в 1к преобразуется в 4к 
кода. И это не предел (Этот коэфициент можно менять в файле dinav2.inc).
К плюсам следует отнести высокую степень полиморфности. Она обусловлена
 тем что при данном подходе ограничения на "мусор" минимальны.К плюсам 
также следует отнести тот факт, что кодовая секция (в PE файле) в 
которую будет дописываться наш код может быть и ReadOnly. При этом 
многие антивирусы ничего не заподозрят.
Этот метод был реализован мной в виде процедуры  MakePolyImg в dinav2.inc файле.
Параметрами этой процедуры является :
Esi=Смещение на исходный код
Edi=Смещение на буфер в котором генерируется полиморфный код
Ecx= Размер исходного кода.
Результатом работы является: 
edi=сгенерированный полиморфный код, 
eax=размер генерированного полиморфного кода. 
Пример использования DINA v2.0 находится в файле dinav2.asm
(c) Voodoo/SMF
http://smf.chat.ru