Движок DEE является вариацией на тему UEP. Данная технология подразумевает
"врезание" в случайное место кода программы какой-то команды, обычно
перехода на тело вируса.Такая техника позволяет претендовать на
неизлечимость вируса, но реально может только усложнить его детектирование.
Допустим, что UEP реализует замену команды по случайному адресу в программе
на что-либо иное вариант - замена на jmp/call в вирус), но необходимо,
чтобы длина "врезанной" команды была меньше, либо равной исходной т.к. в
противном случае “врезанная” команда может испортить последующую за ней.
Нахождение адресов для замены может быть реализовано различными
способами, но основные направления - релокейшены и частичный реверсинг,
движок DEE реализует второе.
DEE ничего не заменяет - пусть заменяют другие, а его дело найти команды по
требуемым признакам и вернуть в качестве результата адрес в исходном буфере,
случайно выбранной из найденных, команды, удовлетворяющей поиску.
Действия движка заключаются в нахождении CALL'ов, как вариант (с заданием
соответствующих флагов) - поиск команд, длина которых больше либо равна
5 байтам.
Это осуществляется посредством последовательного дизасма буфера с помощью
внешнего дизассемблера. Затем движок берет рандомом любой из найденных
адресов и как ответ функции возвращает этот адрес. Т.к. в DEE передается
адрес буфера, то на выходе отдается абсолютный адрес команды в буфере, а не
ее RVA относительно буфера. Это кажется более универсальным.
В процессе работы движок использует память, и количество требуемых байт
составляет cnt*4*2. Для достаточно большой программы это может быть много и
есть вероятность нехватки памяти, в таком случае DEE вернет на выходе
FFFFFFFF, теперь стоит уменьшить сnt ,тем самым ограничив количество
просматриваемых байт, и повторить все снова, а потом, в случае ошибки, еще
раз и так пока не заебет.
С включенным флагом LINKS при встрече относительного JMP'а,дизассемблирование
продолжается по адресу, куда он указывает. В таком случае, следует грузить
кодовую секцию в буфер полностью, а лучше весь имадж с имитацией загруженных
секций, т.к. могут быть и файлы с кодом в данных, хотя это и маловероятно.
Иначе есть риск выйти за пределы буфера.
Для того ,чтобы совершить нахождние команды ,котороая вероятнее всего
запустится при старте программы ,при встрече всяких там RET'ов ,абсолютных
переходов и пр. поиск команд прекращается и команда выбирается из найденных
до этого.Как показала практика это несколько понижает процент заражения,при
котором вирус не запускается.
Вот вроде бы и все.
Unseek & grow!