CE SERVICE PEUT CONTENIR DES TRADUCTIONS GÉNÉRÉES PAR GOOGLE. GOOGLE DÉCLINE TOUTE GARANTIE, EXPLICITE OU IMPLICITE, Y COMPRIS LES GARANTIES D'EXACTITUDE, DE FIABILITÉ, AINSI QUE TOUTE GARANTIE IMPLICITE DE COMMERCIALISATION ET D'ADAPTATION À DES FINS PARTICULIÈRES ET À L'ABSENCE DE CONTREFAÇONS.

Le site internet de Kaspersky Lab a été traduit pour votre commodité en utilisant un logiciel de traduction générée par Google. Des efforts raisonnables ont été faits pour fournir une traduction exacte. Cependant, aucune traduction automatique n'est parfaite et l'objectif n'est pas de remplacer le travail des traducteurs. Le site internet de Kaspersky Lab fournit ces traductions comme un service pour ses utilisateurs, et elles ont été publiées "telles quelles". Aucune garantie, explicite ou implicite, n'est faite au sujet de l'exactitude, de fiabilité ou de conformité de ces traductions faites de l'anglais vers une autre langue. Certains contenus (images, vidéos, Flash, etc.) peuvent ne pas être traduits correctement à cause des limites du logiciel de traduction.

Virus.DOS.Zhengxi

Classe Virus
Plateforme DOS
Description

Détails techniques

C'est une famille de virus parasitaires très dangereux, polymorphes et furtifs. Ces virus sont plus de 7K de longueur, très complexes, et peut-être les virus DOS les plus complexes. Ces virus infectent les fichiers EXE, OBJ et LIB et ajoutent les drop-lists COM aux archives ZIP, ARJ et RAR. Les virus contiennent les chaînes de texte internes:


Résiliation anormale du programme
Le Virus / DOS 0.54 Copyright (c) 1995 Zhengxi Ltd
Attention! Ce programme pour usage interne seulement!

Installation

Le code du virus reçoit le contrôle de différents points en fonction de la manière d'infection, mais dans tous les cas, la destination est la routine de décryptage polymorphe. Dans les fichiers EXE (en annexe) la routine de déchiffrement reçoit le contrôle immédiatement quand un fichier EXE est chargé en mémoire pour exécution, dans les fichiers EXE (insertion) – du code du chargeur (voir infection EXE), dans les fichiers liés avec OBJ infecté / Fichiers LIB – à partir de l'instruction CALL (voir l'infection OBJ / LIB), les dropers COM ont l'instruction JMP à leurs débuts, que JMP apporte le contrôle à la routine de déchiffrement.

En étant déchiffré, la routine d'installation du virus reçoit le contrôle. Le virus croise INT 1 (One Step Tracing) et trace INT 21h. Pendant le traçage, le virus recherche un code spécifique dans le gestionnaire INT 21h (ce code est présent dans DOS 5.x et DOS 6.x). Si un tel code est trouvé, le virus vérifie plusieurs conditions et termine l'installation dans certains cas.

Le virus met fin à l'installation si:

  • MS Windows est installé
  • le lecteur de démarrage est A: ou B:
  • INT 8, 13h, 28h pointe sur le même segment (pour quitter l'installation si le moniteur anti-virus est installé?)
  • le jour du fichier hôte (horodatage) est identique ou proche du jour actuel (les deux bits les plus élevés du numéro de jour actuel XORed avec le jour du fichier sont égaux à zéro)
Ensuite le virus alloue le bloc de la mémoire système pour la copie du virus TSR, stocke dans son corps 11 octets à partir de l'adresse du gestionnaire INT 21h, et corrige le code INT 21h avec l'instruction FAR CALL (2F FF 1E ?? ??) qui apporte le contrôle au gestionnaire INT 25h (Absolute Disk Read). Ensuite, le virus stocke les cinq premiers octets du gestionnaire INT 25h et écrit cinq octets de FAR JMP au code du virus. Le résultat ressemble à ceci:

INT 21h gestionnaire:
… …
+ ——- 2E FF 1F ???? CALL FAR CS: Int25
� C7 06 ???? ; mot magique?
� Int25: ???? ???? ???? ???? ; Loin de l'INT 25h
� … …

+> INT 25h gestionnaire:
+ ——– EA ???? ???? JMP FAR VirusHandler
� … …

+> Gestionnaire de virus:
2E 8F 06 … POP CS: Caller_IP
… …
En conséquence, le virus a le même gestionnaire pour intercepter les appels INT 21h et INT 25h. Pour séparer ces appels, le virus vérifie l'adresse de l'appelant (Caller_IP). Si l'appel passe du gestionnaire INT 21h, le virus transmet le contrôle à la routine du gestionnaire de virus INT 21h, dans un autre cas, le gestionnaire du virus INT 25h reçoit le contrôle.

La routine d'installation est terminée, mais le virus peut déplacer son code vers d'autres blocs de mémoire (voir l'analyse INT 21h handler). Ainsi, la copie TSR du virus n'occupe pas les mêmes blocs de la mémoire système, mais peut se déplacer vers d'autres adresses, y compris celles d'UMB.

Ensuite, le virus renvoie le contrôle au programme hôte. Il existe trois variantes différentes d'un tel retour, elles dépendent de la méthode d'infection. En cas de compte-gouttes COM, le virus affiche uniquement le message:


Résiliation anormale du programme
et retourne à DOS avec la fonction Terminate (INT 21h, AH = 4Ch). Dans le cas d'une méthode d'infection avec extension EXE, le virus restaure l'en-tête du fichier d'origine en utilisant un moteur polymorphe (génère une routine de décryptage polymorphe et l'exécute pour restaurer l'en-tête original, voir l'infection EXE ci-dessous). En cas d'insertion d'un fichier EXE, le virus revient simplement au programme hôte car le chargeur de virus inséré dans le fichier restaure le code original par lui-même. Dans le cas d'un fichier OBJ / LIB, le virus retourne également au programme hôte (voir l'infection OBJ / LIB ci-dessous).

INT 21h Handler

Le virus intercepte 18 des fonctions INT 21h:

3Dh, 6Ch – Ouvrir / Créer un fichier
3Eh – Fermer le fichier
3Fh – Lire le fichier
42h – Lseek
4Bh – Exécuter le fichier
41h – Supprimer le fichier
11h, 12h – FindFist / Suivant FCB
4Eh, 4Fh – FindFist / ASCII suivant
00h, 4Ch – Terminer
31h – Restez TSR
67h – Régler le nombre de poignées
48h, 49h, 4Ah – fonctions de gestion de la mémoire (Allouer, Libérer, Redimensionner)
Les fonctions Set Handle Count, Execute File et memory management sont utilisées par le virus pour cacher son code dans la mémoire système – le virus manipule les blocs MCB pour ne pas être visible sur la carte mémoire lors de l'utilisation des utilitaires de navigation.

Lors de l'interception des fonctions Terminate, Stay TSR et FreeMemory, le virus déplace son code vers une nouvelle adresse dans la mémoire du système. Le virus alloue un nouveau bloc de la mémoire (qui peut être un bloc de mémoire conventionnel ou UMB), et s'y copie. Ainsi, pendant l'installation du virus n'affecte pas les blocs UMB pour placer sa copie TSR, mais il peut ensuite se déplacer dans UMB, et se cacher là-dedans.

Pendant l'ouverture du fichier, le virus effectue plusieurs appels différents. Tout d'abord, le virus vérifie le mode d'ouverture, et si le fichier est ouvert pour l'écriture, le virus désinfecte le fichier.

Avant la désinfection, le virus vérifie l'accès au fichier et le programme qui accède à ce fichier (appelant). Le virus compare le nom du programme d'accès (appelant) avec la liste des noms (voir ci-dessous), et ne désinfecte pas le fichier accédé si le nom du programme d'accès provient de cette liste. Les noms de fichiers sont:


UUENCODE.EXE, PKLITE.EXE, LZEXE.EXE, NDD.EXE, DIET.EXE, AFD.EXE, SD.EXE,
SPEEDDSK.EXE, DEFRAG.EXE, TLINK.EXE, LINK.EXE
En cas de fonction AH = 3D00h (Open ReadOnly), le virus effectue des actions étranges. Il scanne le code de l'appelant, et le corrige. Cela ressemble à un patch de certains scanners anti-virus. Heureusement, le virus a le bug, et cette branche n'est jamais exécutée.

Lors de l'ouverture du fichier, le virus apporte également le contrôle à la routine furtive – le virus substitue la longueur du fichier à celle d'origine.

En lisant le fichier, le virus appelle la routine furtive. En cas de lecture de l'en-tête du fichier infecté, le virus lit, décrypte et copie l'en-tête d'origine dans le tampon de lecture.

En cas de fonction Lseek le virus apporte le contrôle à une autre routine furtive du virus – le virus ne permet pas de rechercher la longueur du fichier original.

Pendant la suppression du fichier infecté, le virus le désinfecte.

Lors de la recherche des fichiers avec FindFirst / Next, le virus substitue la longueur du fichier à celle d'origine si le fichier est infecté.

Les appels FindFist / Next ASCII sont également utilisés par le virus pour détecter les fichiers infectés. Le virus enregistre le nom de tout fichier accessible avec la fonction FindFirst, et environ chaque 5ème fichier (avec une probabilité 3/16) accessible avec la fonction FindNext. Le virus n'a qu'un seul tampon pour le nom de fichier, de sorte que chaque nom suivant écrase le précédent.

Lors de la fermeture de tout fichier, le virus vérifie et infecte le fichier avec le nom qui est stocké dans le tampon. Le virus infecte également le fichier qui est fermé, mais le fait avec une probabilité de 1/4 (par le résultat du générateur aléatoire du virus)

Infection

Avant d'infecter le fichier, le virus vérifie plusieurs conditions:
  • le fichier n'est pas "simplement créé" en comparant le numéro du jour actuel avec la date et l'horodatage du fichier (le même que lors de l'installation)
  • le fichier est local, et pas sur A: ou B: lecteur
  • le nom de fichier n'est pas *.? V? (* .OVL?)
  • il y a assez d'espace disque libre (vérifie avec INT 21h, AH = 36h)
En cas de toutes ces conditions, le virus lit l'en-tête du fichier et le vérifie pour les tampons EXE, OBJ, LIB et archives.

Infecter les fichiers EXE

Le virus infecte EXE par trois méthodes différentes: ajouter, insérer et infecter des archives dans des fichiers auto-extractibles.

Premièrement, le virus vérifie la structure du fichier, et s'il s'agit d'un fichier EXE auto-extractible (créé par ZIP2EXE, par exemple), le virus infecte l'archive attachée (ZIP, ARJ, RAR) par la méthode décrite ci-dessous. et l'ajoute au contenu de l'archive.

Ensuite, le virus vérifie la longueur du fichier et n'infecte pas les fichiers dont la longueur est inférieure à 400h (1024) octets. Si la longueur du module chargeable (note: pas la longueur du fichier) est supérieure à 32 Ko, le virus insère son chargeur dans le fichier central. Dans un autre cas, le virus infecte le fichier en ajoutant une méthode.

Tout en infectant les fichiers en ajoutant une méthode, le virus lit l'en-tête du fichier, le chiffre et l'enregistre à la fin du fichier. Ensuite, le virus exécute son générateur polymorphique, et enregistre le corps du virus chiffré et les boucles polymorphes à la fin du fichier. Pour terminer l'infection, le virus augmente la longueur du fichier à la valeur qui est divisée par 9Dh donne le reste 25h (pour détecter les fichiers déjà infectés, il est un "ID") et modifie les champs d'en-tête EXE (registres et longueur du module).

Remarque: le virus chiffre l'en-tête d'origine du fichier hôte avec la boucle de chiffrement polymorphe et cette boucle est différente de la routine utilisée lors du chiffrement du corps du virus. C'est-à-dire que le virus appelle le moteur polymorphe deux fois – en cryptant l'en-tête EXE d'origine, et en cryptant le corps principal.

Lors de l'exécution du fichier EXE infecté, les boucles de décryptage restaurent le corps du virus principal, mais pas l'en-tête du fichier d'origine. Pour revenir au programme hôte, le virus doit déchiffrer les données de l'hôte, mais le moteur génère des boucles aléatoires avec des fonctions de cryptage choisies au hasard. Pour résoudre ce problème, le virus stocke les valeurs initiales du générateur aléatoire tout en cryptant les données de l'hôte, et exécute un générateur polymorphe avec les mêmes valeurs tout en décryptant ces données. En conséquence, le générateur apporte le même code que celui utilisé lors du cryptage des données de l'hôte, et étant exécuté, cette routine le décrypte.

Infecter les fichiers EXE (insertion)

Si la longueur du fichier est supérieure à 32 Ko, le virus cherche au début du module principal EXE (juste après l'en-tête EXE), lit 6 Ko du code et recherche les routines C / Pascal dans ce dernier. Habituellement, les routines C / Pascal commencent à partir du même "en-tête" qui enregistre le registre BP, et déplace le pointeur de pile SP vers BP.

Le virus scanne le code pour ces "en-têtes" et si un tel code est trouvé, le virus scanne les 54h d'octets de code suivants pour l'instruction RET ou CALL FAR pour éviter le chevauchement du sous-programme suivant ou l'adresse relocalisée. Si un tel code (RET ou CALL FAR) est trouvé, le virus sort de la routine d'infection.

Ensuite, le virus lit 54h octets de cette routine, l'écrase avec le code du chargeur de virus, puis crypte le corps du virus principal avec le moteur polymorphique, et l'enregistre à la fin du fichier. Ensuite, le virus crypte avec une simple fonction SUB le code original du sous-programme et la deuxième partie du chargeur, et l'enregistre à la fin du fichier. Ensuite, le virus écrit à la fin du fichier les données aléatoires de la même manière que lorsque "annexe" méthode d'infection.


Non infecté infecté
———— ——–
+ ————– + + ————– +
�Exe en-tête � �Exe en-tête �
+ ————– � + ————– �
�Main code EXE � �Main code EXE �
� ————– � � ————– �
SuC / Pascal subr � – + � Chargeur de virus � Partie 1, 52h octets, non chiffré
� ————– � � � ————– �
� � � �Main code EXE �
� � � � (suite) �
+ ————– + � + ————– �
� �Virus � Crypté avec des boucles polymorphes
� � ————– �
Load � Chargeur de virus � Partie 2, cryptée avec la commande SUB
� � ————– � 70h octets
+ -> �Sauvegarde � Code original du sous-programme corrigé,
� ————– � 52h octets, cryptés avec SUB
�Random données � longueur du fichier / 9Dh, le reste est de 25h
+ ————– +
En cours d'exécution, le chargeur recherche le nom du fichier hôte en utilisant les champs PSP, ouvre les fichiers, recherche la fin du fichier, puis lit, décrypte et exécute la seconde partie du compte-gouttes. Cette partie restaure la sous-routine corrigée, alloue la mémoire système (conventionnelle ou UMB), lit le corps viral principal et transmet le contrôle à la boucle polymorphe de décryptage. Cette boucle décrypte le corps du virus et transmet le contrôle à la routine d'installation.

C'est un moyen très insidieux d'infection. Le code du virus est caché dans le fichier, et il n'y a pas d'entrée directe au code du virus à partir de l'en-tête du fichier. Le sous-programme remplacé par le chargeur de virus peut être "rarement exécuté". Par exemple, le sous-programme qui affiche le message d'erreur. Ainsi, le virus peut "dormir" dans de tels fichiers pendant une longue période, puis sauter et infecter le système dans des conditions limitées.

Infecter des archives

En cas d'archivage, le virus crée en mémoire l'image du dropper COM infecté et l'ajoute à l'archive. Les compteurs COM commencent toujours par une instruction JMP suivie de données aléatoires, de code de virus chiffré et de boucle polymorphe de décryptage. L'instruction JMP amène le contrôle à la boucle de déchiffrement.

Le nom du dropper est sélectionné au hasard et fini avec l'extension .COM, par exemple:


HAIF.COM, UCM.COM, DOO.COM, VLG.COM, et ainsi de suite.
Lors du traitement des champs d'archive, le virus n'utilise aucun utilitaire externe, mais remplit à lui seul tous les champs nécessaires. Le virus n'emballe pas le compte-gouttes, mais utilise la méthode "stockée" – le virus est stocké dans l'archive "tel quel". Pendant l'infection, le virus vérifie le contenu des archives et ne les infecte pas deux fois.

Infecter les fichiers OBJ et LIB

Lors de l'infection des modules OBJ / LIB, le virus vérifie les champs du fichier, crée et insère dans celui-ci de nouveaux enregistrements d'objets contenant le code du virus qui est chiffré avec des boucles polymorphes.

Lors de l'analyse du fichier objet, le virus vérifie le code de ce sous-programme C / Pascal "en-tête" ainsi que lors de l'insertion dans les fichiers EXE, et n'infecte les fichiers que si ce code est trouvé. Mais dans le cas d'un module OBJ ou LIB, le virus ne supprime pas le code du chargeur, mais écrase l'en-tête C / Pascal avec l'instruction CALL (E8xxxx).

Étant lié dans le fichier exécutable que CALL apporte le contrôle à la boucle de décryptage polymorphique du virus. Cette boucle décrypte le code du virus et transmet le contrôle à la routine d'installation du virus.

Ainsi que dans les fichiers EXE (insertion) que CALL peut ne jamais recevoir le contrôle, et le virus peut dormir pendant une longue période. Mais dans certaines conditions, le virus peut sauter et infecter le système.

INT 25h Handler

Ce gestionnaire réalise une routine furtive au niveau INT 25h. Lors de l'accès aux entrées du répertoire, le virus substitue la longueur du fichier à celle du fichier original, tandis que le virus le restaure en lisant l'en-tête du fichier infecté et apporte le formulaire original.

Le virus ne réalise pas 100% de furtivité sur le niveau INT 25h, bien sûr. Il y a des façons de contourner la routine furtive. Mais si un programme anti-virus lit le contenu du fichier par INT 21h fonctions DOS, puis lit la structure du répertoire, puis le contenu du fichier par des appels INT 25h absolus, le virus reste invisible.

Trigger Routine

SI lors du traitement des fichiers ZIP le virus trouve un enregistrement qui est emballé avec la méthode "stockée", il vérifie la date et l'horodatage du fichier ZIP. Si l'année de la dernière modification de ce fichier est 1996 ou plus, le virus recherche tous les fichiers de tous les répertoires de tous les disques de C: jusqu'à Z:, puis supprime les fichiers et l'arborescence entière des sous-répertoires.


Lien vers l'original