DIESER SERVICE KANN ÜBERSETZUNGEN VON GOOGLE ENTHALTEN. GOOGLE ÜBERNIMMT KEINERLEI VERANTWORTUNG FÜR DIE ÜBERSETZUNGEN. DARUNTER FÄLLT JEGLICHE VERANTWORTUNG IN BEZUG AUF RICHTIGKEIT UND ZUVERLÄSSIGKEIT SOWIE JEGLICHE STILLSCHWEIGENDEN GEWÄHRLEISTUNGEN DER MARKTGÄNGIGKEIT, NICHT-VERLETZUNG VON RECHTEN DRITTER ODER DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.

Die Website von Kaspersky Lab wurde für Ihre Bequemlichkeit mithilfe einer Übersetzungssoftware von Google Translate übersetzt. Es wurden angemessene Bemühungen für die Bereitstellung einer akkuraten Übersetzung unternommen. Bitte beachten Sie, dass automatisierte Übersetzungen nicht perfekt sind und menschliche Übersetzer in keinem Fall ersetzen sollen. Übersetzungen werden den Nutzern der Kaspersky-Lab-Website als Service und "wie sie sind" zur Verfügung gestellt. Die Richtigkeit, Zuverlässigkeit oder Korrektheit jeglicher Übersetzungen aus dem Englischen in eine andere Sprache wird weder ausdrücklich noch stillschweigend garantiert. Einige Inhalte (z. B. Bilder, Videos, Flash, usw.) können aufgrund der Einschränkungen der Übersetzungssoftware möglicherweise nicht inhaltsgetreu übersetzt werden.

Virus.DOS.Zhengxi

Kategorie Virus
Plattform DOS
Beschreibung

Technische Details

Dies ist eine Familie sehr gefährlicher, polymorpher und heimlicher Parasitenviren. Diese Viren sind mehr als 7K lang, sehr komplex und möglicherweise die komplexesten DOS-Viren. Diese Viren infizieren EXE-, OBJ- und LIB-Dateien und hängen COM-Dropper an ZIP-, ARJ- und RAR-Archive an. Die Viren enthalten die internen Textstrings:


Unerwarteter Programmabbruch
Der Virus / DOS 0.54 Copyright (c) 1995 Zhengxi Ltd
Warnung! Dieses Programm nur für den internen Gebrauch!

Installation

Der Code des Virus erhält die Kontrolle von verschiedenen Punkten abhängig vom Infektionsweg, aber in allen Fällen ist das Ziel die polymorphe Entschlüsselungsroutine. In EXE-Dateien (anhängig) erhält die Entschlüsselungsroutine die Kontrolle sofort, wenn eine EXE-Datei zur Ausführung in den EXE-Dateien (Einfügen) geladen wird – aus dem Code des Loaders (siehe EXE-Infektion), in den mit infizierten OBJ / LIB-Dateien – von der CALL-Anweisung (siehe OBJ / LIB-Infektion) haben die COM-Tropfer zu Beginn einen JMP-Befehl, der JMP die Kontrolle über die Entschlüsselungsroutine überträgt.

Entschlüsselt erhält die Installationsroutine des Virus die Kontrolle. Der Virus hakt INT 1 (One Step Tracing) und verfolgt INT 21h. Während der Suche sucht der Virus nach einem bestimmten Code im INT 21h-Handler (dieser Code ist in DOS 5.x und DOS 6.x vorhanden). Wenn ein solcher Code gefunden wird, überprüft der Virus mehrere Bedingungen und beendet die Installation in einigen Fällen.

Der Virus beendet die Installation, wenn:

  • MS Windows ist installiert
  • Boot-Laufwerk ist A: oder B:
  • INT 8, 13h, 28h zeigt auf das gleiche Segment (um die Installation zu beenden, wenn der Antiviren-Monitor installiert ist?)
  • Der Tag der Host-Datei (Datum und Zeitstempel) ist gleich oder nahe dem aktuellen Tag (die beiden höchsten Bits der aktuellen Tag-Nummer XORed mit Datei Tag ist gleich Null)
Dann weist der Virus den Block des Systemspeichers für die Virus-TSR-Kopie zu, speichert in seinem Körper 11 Bytes von der Adresse des INT 21h-Handlers und patcht den INT 21h-Code mit dem FAR CALL-Befehl (2F FF 1E ?? ??), was bringt das Steuerelement zu INT 25h-Handler (Absolute Disk Read). Dann speichert der Virus die ersten fünf Bytes des INT 25h-Handlers und schreibt dort fünf Bytes von FAR JMP in den Viruscode. Das Ergebnis sieht folgendermaßen aus:

INT 21h-Handler:
… …
+ ——- 2E FF 1F ???? RUFEN SIE FAR CS: Int25
� C7 06 ???? ; magisches Wort?
� Int25: ???? ???? ???? ???? ; ferne Adresse von INT 25h
� … …

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

+> Virenbehandler:
2E 8F 06 … POP CS: Anrufer_IP
… …
Als Ergebnis hat der Virus den gleichen Handler, um sowohl INT 21h als auch INT 25h Aufrufe abzufangen. Um diese Anrufe zu trennen, überprüft der Virus die Adresse des Anrufers (Caller_IP). Geht der Aufruf vom INT 21h-Handler aus, übergibt der Virus die Kontrolle an die Handlerroutine Virus INT 21h, in einem anderen Fall empfängt der Handler Virus INT 25h das Steuerelement.

Die Installationsroutine ist abgeschlossen, aber der Virus kann seinen Code in andere Speicherblöcke verschieben (siehe INT 21h-Handler-Analyse). Die TSR-Kopie des Virus belegt also nicht die gleichen Blöcke des Systemspeichers, sondern kann sich selbst an andere Adressen, einschließlich UMBs, bewegen.

Dann gibt der Virus das Steuerelement an das Host-Programm zurück. Es gibt drei verschiedene Varianten einer solchen Rückkehr, sie hängen von der Infektionsmethode ab. Im Fall von COM Dropper zeigt der Virus nur die Nachricht an:


Unerwarteter Programmabbruch
und kehrt mit der Terminate-Funktion zu DOS zurück (INT 21h, AH = 4Ch). Im Falle der EXE-anhängigen Infektionsmethode stellt der Virus den ursprünglichen Header der Datei wieder her, indem er eine polymorphe Engine verwendet (erzeugt eine polymorphe Entschlüsselungsroutine und führt sie aus, um den ursprünglichen Header wiederherzustellen, siehe unten EXE-Infektion). Im Falle eines EXE-Einfügevorgangs kehrt der Virus einfach zum Host-Programm zurück, da der in die Datei eingefügte Virus-Lader den ursprünglichen Code selbst wiederherstellt. Im Falle einer OBJ / LIB-Datei kehrt der Virus auch nur zum Host-Programm zurück (siehe OBJ / LIB-Infektion unten).

INT 21h Handler

Der Virus fängt 18 von INT 21h Funktionen ab:

3Dh, 6Ch – Datei öffnen / erstellen
3Eh – Datei schließen
3Fh – Datei lesen
42 Stunden – Lseek
4Bh – Datei ausführen
41h – Datei löschen
11h, 12h – FindFist / Nächster FCB
4Eh, 4Fh – FindFist / Nächstes ASCII
00h, 4Ch – Beenden
31h – Bleiben Sie TSR
67h – Griffzahl einstellen
48h, 49h, 4Ah – Speicherverwaltungsfunktionen (Zuweisen, Frei, Größe ändern)
Die Funktionen "Handle zählen", "Datei ausführen" und "Speicher verwalten" werden vom Virus verwendet, um seinen Code im Systemspeicher zu verbergen. Der Virus wird so manipuliert, dass MCB-Blöcke nicht im Speicherabbild angezeigt werden.

Während des Abfangens von Terminate, Stay TSR und FreeMemory verschiebt der Virus seinen Code an eine neue Adresse im Systemspeicher. Der Virus weist einen neuen Block des Speichers zu (der ein konventioneller oder UMB-Speicherblock sein kann) und kopiert sich selbst dorthin. Also, während der Installation des Virus hat keinen Einfluss auf UMB-Blöcke, um seine TSR-Kopie zu platzieren, aber dann kann es sich in UMB bewegen, und sich dort verstecken.

Beim Öffnen der Datei führt der Virus mehrere verschiedene Aufrufe aus. Zuerst überprüft der Virus den Öffnungsmodus und wenn die Datei zum Schreiben geöffnet wird, desinfiziert der Virus die Datei.

Vor der Desinfektion überprüft der Virus, ob auf die Datei zugegriffen wird, und auf das Programm, das auf diese Datei (Aufrufer) zugreift. Der Virus vergleicht den Namen des aufrufenden Programms (Aufrufers) mit der Liste der Namen (siehe unten) und desinfiziert die aufgerufene Datei nicht, wenn der Name des zugreifenden Programms aus dieser Liste stammt. Die Dateinamen sind:


UUENCODE.EXE, PKLITE.EXE, LZEX.EXE, NDD.EXE, DIET.EXE, AFD.EXE, SD.EXE,
SPEEDDSK.EXE, DEFRAG.EXE, TLINK.EXE, LINK.EXE
Im Falle der AH = 3D00h Funktion (Open ReadOnly) führt der Virus einige merkwürdige Aktionen aus. Es scannt den Code des Anrufers und patcht ihn. Es sieht aus wie das Patchen einiger Antivirenscanner. Glücklicherweise hat der Virus den Fehler und dieser Zweig wird nie ausgeführt.

Beim Öffnen der Datei bringt der Virus auch die Kontrolle in die Stealth-Routine – der Virus ersetzt die Originaldatei durch die Datei.

Beim Lesen der Datei ruft der Virus die Stealth-Routine auf. Beim Lesen aus dem Header der infizierten Datei liest, entschlüsselt und kopiert der Virus den ursprünglichen Header in den Lesepuffer.

Im Falle der Lseek-Funktion bringt der Virus die Kontrolle zu einer anderen Stealth-Routine des Virus – der Virus erlaubt es nicht, die ursprüngliche Dateilänge zu suchen.

Beim Löschen der infizierten Datei desinfiziert das Virus es.

Bei der Suche nach Dateien mit FindFirst / Next-Aufrufen ersetzt der Virus die Dateilänge durch die ursprüngliche, wenn die Datei infiziert ist.

FindFist / Next ASCII-Aufrufe werden auch vom Virus verwendet, um die Dateien auf Infektionen zu untersuchen. Der Virus speichert den Namen jeder Datei, auf die mit der Funktion FindFirst zugegriffen wird, und ungefähr jede 5. Datei (mit der Wahrscheinlichkeit 3/16), auf die mit der Funktion FindNext zugegriffen wird. Der Virus hat nur einen Puffer für den Dateinamen, so dass jeder nächste Name den vorherigen überschreibt.

Beim Schließen einer Datei überprüft der Virus die Datei und infiziert sie mit dem Namen, der im Puffer gespeichert ist. Der Virus infiziert auch die Datei, die geschlossen ist, aber es ist mit der Wahrscheinlichkeit 1/4 (durch das Ergebnis des Zufallsgenerators des Virus)

Infektion

Vor dem Infizieren der Datei überprüft der Virus mehrere Bedingungen:
  • Die Datei wird nicht "nur erstellt", indem die aktuelle Tagesnummer mit dem Datums- und Zeitstempel der Datei verglichen wird (das gleiche wie bei der Installation).
  • Die Datei ist lokal und nicht auf A: oder B: Laufwerk
  • Der Dateiname ist nicht *.? V? (* .OVL?)
  • es ist genug freier Speicherplatz vorhanden (Checks mit INT 21h, AH = 36h)
Bei all diesen Bedingungen liest der Virus den Dateikopf und prüft ihn auf EXE-, OBJ-, LIB- und Archivstempel.

EXE-Dateien infizieren

Der Virus infiziert EXE mit drei verschiedenen Methoden – Anhängen, Einfügen und Infizieren von Archiven in selbstextrahierenden Dateien.

Zuerst überprüft der Virus die Dateistruktur, und wenn es sich um eine selbstextrahierende EXE-Datei (z. B. von ZIP2EXE) handelt, infiziert der Virus das angehängte Archiv (ZIP, ARJ, RAR) mit der unten beschriebenen Methode – erstellt COM-Dropper und fügt sie dem Inhalt des Archivs hinzu.

Dann überprüft der Virus die Dateilänge und infiziert die Dateien mit der Länge von weniger als 400h (1024) Bytes nicht. Wenn die Länge des ladbaren Moduls (Anmerkung: nicht die Dateilänge) größer als 32K ist, fügt der Virus seinen Loader in die Dateimitte ein. In einem anderen Fall infiziert der Virus die Datei durch Anhängen der Methode.

Beim Infizieren der Dateien durch Anhängen der Methode liest der Virus den Dateiheader, verschlüsselt ihn und speichert ihn am Ende der Datei. Dann startet der Virus seinen polymorphen Generator und speichert den verschlüsselten Viruskörper und die polymorphen Schleifen in das Dateiende. Um die Infektion abzuschließen, erhöht der Virus die Dateilänge auf den Wert, der durch 9Dh geteilt wird. Der Rest 25h (um bereits infizierte Dateien zu erkennen, ist der ID-Stempel) und modifiziert EXE-Headerfelder (Register und Modullänge).

Hinweis: Der Virus verschlüsselt den ursprünglichen Header der Hostdatei mit der polymorphen Verschlüsselungsschleife, und diese Schleife unterscheidet sich von der Routine, die beim Verschlüsseln des Viruskörpers verwendet wird. Dh der Virus ruft die polymorphe Engine zweimal auf – während der ursprüngliche EXE-Header verschlüsselt wird und der Hauptteil verschlüsselt wird.

Während der Ausführung der infizierten EXE-Datei werden die Entschlüsselungsschleifen den Hauptkörper des Virus, aber nicht den ursprünglichen Dateikopf wiederherstellen. Um zum Host-Programm zurückzukehren, muss der Virus die Host-Daten entschlüsseln, aber die Engine generiert zufällige Schleifen mit zufällig ausgewählten Verschlüsselungsfunktionen. Um dieses Problem zu lösen, speichert der Virus beim Verschlüsseln der Host-Daten Anfangswerte des Zufallsgenerators und führt beim Entschlüsseln der Daten einen polymorphen Generator mit denselben Werten aus. Als Ergebnis bringt der Generator den gleichen Code, der beim Verschlüsseln von Host-Daten verwendet wurde, und wird von dieser Routine entschlüsselt.

EXE-Dateien infizieren (Einfügen)

Wenn die Dateilänge über 32 KB liegt, sucht der Virus den Anfang des EXE-Hauptmoduls (direkt nach dem EXE-Header), liest 6 KB des Codes und sucht dort nach C / Pascal-Routinen. Gewöhnlich beginnen C / Pascal-Routinen mit demselben "Header", der das BP-Register speichert und den Stapelzeiger SP nach BP bewegt.

Der Virus scannt den Code nach diesen "Headern", und wenn ein solcher Code gefunden wird, durchsucht der Virus die nächsten 54 Stunden Code für die Anweisung RET oder CALL FAR, um eine Überlappung der nächsten Subroutine oder der verschobenen Adresse zu verhindern. Wenn ein solcher Code (RET oder CALL FAR) gefunden wird, verlässt der Virus die Infektionsroutine.

Dann liest der Virus 54h Bytes dieser Routine, überschreibt sie mit dem Code des Virusloaders, verschlüsselt dann den Hauptviruskörper mit der polymorphen Engine und speichert sie im Dateiende. Dann verschlüsselt der Virus mit einer einfachen SUB-Funktion den ursprünglichen Code der Subroutine und den zweiten Teil des Loaders und speichert ihn am Ende der Datei. Dann schreibt der Virus am Ende der Datei die Zufallsdaten auf die gleiche Weise wie beim "Anhängen" der Infektionsmethode.


Nicht infiziert Infiziert
———— ——–
+ ————– + + ————– +
�Exe-Header � xeExe-Header �
+ ————– � + ————– �
� Haupt-EXE-Code � Haupt-EXE-Code �
� ————– � � ————– �
� C / Pascal subr � – + � Virus loader � Teil 1, 52h Bytes, nicht verschlüsselt
� ————– � � � ————– �
� � � �Main EXE-Code �
Continued � � � (Fortsetzung) �
+ ————– + � + ————– �
� �Virus � Verschlüsselt mit polymorphen Schleifen
� � ————– �
� Virus Loader � Teil 2, verschlüsselt mit SUB-Befehl
� � ————– � 70h Bytes
+ -> �Saved code � Ursprünglicher Code der gepatchten Subroutine,
� ————– � 52h Bytes, verschlüsselt mit SUB
�Random-Daten � Dateilänge / 9Dh, der Rest ist 25h
+ ————– +
Bei der Ausführung sucht der Loader nach dem Namen der Host-Datei, indem er PSP-Felder verwendet, öffnet die Dateien, sucht nach dem Ende der Datei und liest, entschlüsselt und führt den zweiten Teil des Droppers aus. Dieser Teil stellt die gepatchte Subroutine wieder her, weist den Systemspeicher zu (konventionell oder UMB), liest den Hauptviruskörper und übergibt das Steuerelement an die polymorphe Entschlüsselungsschleife. Diese Schleife entschlüsselt den Viruskörper und übergibt das Steuerelement an die Installationsroutine.

Das ist eine sehr heimtückische Art der Infektion. Der Code des Virus ist in der Datei versteckt, und aus dem Dateikopf gibt es keinen direkten Zugang zum Virencode. Die mit dem Virus Loader ersetzte Subroutine kann "selten ausgeführt" werden. Zum Beispiel das Unterprogramm, das die Fehlermeldung anzeigt. So kann der Virus lange Zeit in solchen Dateien "schlafen" und dann unter bestimmten Bedingungen aus dem System springen und das System infizieren.

Infizierte Archive

Im Falle eines Archivs erstellt der Virus im Speicher das Abbild des infizierten COM-Droppers und hängt ihn an das Archiv an. Diese COM-Dropper beginnen immer mit JMP-Anweisungen, gefolgt von zufälligen Daten, verschlüsseltem Viruscode und polymorphem Entschlüsselungs-Loop. Der JMP-Befehl bringt die Steuerung zur Entschlüsselungsschleife.

Der Name des Droppers wird zufällig ausgewählt und mit der Erweiterung .COM beendet, zum Beispiel:


HAIF.COM, UCM.COM, DOO.COM, VLG.COM und so weiter.
Während der Verarbeitung der Archivfelder verwendet der Virus kein externes Dienstprogramm, sondern füllt alle notwendigen Felder selbst aus. Der Virus packt den Dropper nicht, sondern verwendet "gespeicherte" Methode – der Virus wird im Archiv "so wie er ist" gespeichert. Beim Infizieren überprüft der Virus den Inhalt von Archiven und infiziert sie nicht zweimal.

OBJ- und LIB-Dateien werden infiziert

Beim Infizieren von OBJ / LIB-Modulen prüft der Virus die Felder der Datei, erstellt und fügt dort neue Objektdatensätze ein, die den mit polymorphen Schleifen verschlüsselten Viruscode enthalten.

Beim Scannen der Objektdatei überprüft der Virus den Code dieser Datei auf die C / Pascal-Unterroutine "header" sowie beim Einfügen in EXE-Dateien und infiziert die Dateien nur, wenn dieser Code gefunden wird. Aber im Fall von OBJ oder LIB Modul löscht der Virus den Code von loader nicht dort, sondern überschreibt den C / Pascal Header mit CALL Anweisung (E8xxxx).

Da CALL in eine ausführbare Datei eingebunden ist, bringt CALL das Steuerelement zur polymorphen Entschlüsselungsschleife. Diese Schleife entschlüsselt den Virencode und übergibt das Steuerelement an die Vireninstallationsroutine.

Sowie in EXE-Dateien (Einfügen), dass CALL nie das Steuerelement erhalten, und Virus kann für lange Zeit schlafen. Aber unter bestimmten Umständen kann der Virus herausspringen und das System infizieren.

INT 25h Handler

Dieser Handler realisiert Stealth-Routine auf INT 25h-Ebene. Beim Zugriff auf Verzeichniseinträge ersetzt der Virus die Dateilänge durch Originale. Beim Lesen der Kopfzeile der infizierten Datei stellt der Virus sie wieder her und bringt sie in die ursprüngliche Form.

Der Virus erkennt natürlich nicht 100% Stealth auf INT 25h-Ebene. Es gibt Möglichkeiten, Stealth-Routine zu umgehen. Aber wenn ein Antivirenprogramm den Inhalt der Datei mit INT 21h DOS-Funktionen liest, dann die Verzeichnisstruktur liest und dann den Inhalt durch absolute INT 25h-Aufrufe liest, bleibt der Virus nicht sichtbar.

Triggerroutine

Wenn der Virus während der Verarbeitung von ZIP-Dateien einen Datensatz findet, der mit einer "gespeicherten" Methode gepackt ist, prüft er den Datums- und Zeitstempel der ZIP-Datei. Wenn das Jahr der letzten Änderung dieser Datei 1996 oder älter ist, sucht der Virus nach allen Dateien aller Verzeichnisse aller Datenträger von C: bis Z :, und löscht dann die Dateien und den gesamten Unterverzeichnisbaum.


Link zum Original