Viren, Würmer und Trojaner, Virenscanner und Personal Firewalls
Viren, Würmer und Trojanische Pferde (Trojaner), Virenscanner und Personal Firewalls

 

Anzeige


Computerviren
Würmer & Wurm-Viren
Dialer & Trojanische Pferde
Mythen, Hoaxes & Scherzviren

Virenschutz mit Scannern & Co
Firewalls gegen Trojaner und so

Tipps
Tools, die ich empfehle
 · Viren-Entfernung
 · Networking
 · Assembler
 · debug.exe

Für Sie gelesen - mein Buch ist nicht das einzige

Presseinformationen
Impressum / Info: Wer macht diese Site?
E-Mail

debug

(Outtake)

Viren frisch gepresst, dank debug.exe

In fast allen DOS- und Windows-Versionen gibt es ein Tool namens debug.exe, das meist im Verzeichnis c:\windows\command liegt. Es handelt sich um einen kleinen, aber vollwertigen Assembler und Disassembler. Das bedeutet, sie können damit

im Arbeitsspeicher Ihres PCs herumstochern und Programme live patchen,

Ihrem Intel- oder AMD-Prozessor auf die Register schauen,

Programme disassemblieren, also eine ausführbare Datei wie command.com in ein für Menschen "lesbares" Assembler-Listing übersetzen lassen,

ein Assembler-Listing in eine ausführbare Datei übersetzen lassen - zum Beispiel in einen Virus!

Über Debug könnte man ganze Bücher schreiben. Nicht, weil die Software so toll oder umfangreich ist, sondern weil die zugehörige Assembler-Sprache sich an realen Bits und Bytes orientiert. Um Assembler aber wirklich zu verstehen, muss man tief in das Reich der IBM-Architektur, der CPU und andere Chips einsteigen. Der Vorteil ist, dass man hinterher wirklich Ahnung hat, wie ein PC funktioniert. Oder zumindest mehr als vorher ;-)

Debug - das Werkzeug, das zur Waffe wird

Sie sollten sich (bei Interesse) den Debugger unbedingt einmal näher ansehen, denn dies ist eines der Instrumente, die auch Ihr Gegner einsetzt, der Virenschreiber. Weiter unten zeige ich, dass Sie mit Debug und ein paar Batch-Dateien ein beliebiges ausführbares Programm in ein Assembler-Listing verwandeln können, und umgekehrt: dass einige Batch-Dateien plus ein Assemblerlisting genügen, um auf Ihren PC heimlich ein Programm zu erzeugen, das voller tödlicher Funktionen stecken kann.

Hier mal ein Beispiel für eine Zeile Assembler:

MOV AX,BX

Das ist kein abgeschlossenes Programm, sondern nur ein Befehl: MOV weist die CPU an, den Wert nach dem Komma in den Bereich vor dem Komma zu laden, also in diesem Fall den Wert des Registers BX in das Register AX. Und die folgende Anweisung befiehlt der CPU, den Wert des Registers CX zum Wert des Registers AX zu addieren und das Ergebnis in AX zu speichern.

ADD AX,CX

Sie sehen sofort den Unterschied von Assembler zu allen anderen Sprachen: Sie arbeiten direkt mit dem Prozessor, weisen persönlich den Registern Werte zu, und diese Register haben wirklich ihre Entsprechung in den Schaltungen des Prozessors. Referenzbücher zu Assembler besitzen sogar Angaben darüber, wie viele Taktzyklen ein Maschinencode in Anspruch nimmt.

Tolle Sache, doch Befehle a là PRINT oder IF ... THEN gibt es in Assembler nicht. Selbst die popeligste Bildschirmanzeige müssen Sie von vorne bis hinten selbst bauen. Assembler ist einfach zu ineffektiv, um es als hauptsächliche Programmiersprache einzusetzen, und kommt deswegen auf dem PC vor allem bei besonders rechenintensiven Routinen zum Einsatz.

Was nicht heißt, dass Assembler nichts kann: Der Virus "Magistr" besteht laut Viren-Analysten zu hundert Prozent aus hochfeinstem Assembler und ist immerhin 30 KByte lang, das sind schätzungsweise 10.000 bis 20.000 Zeilen Assembler. Er enthält neben Virus, Schadensfunktion, Outlook-Fernsteuerung und Abwurf-Trojaner unter anderem einen kompletten SMTP-Mailserver!

Sie können sich den Bootsektor einer Diskette mit Debug selbst ansehen. Öffnen Sie dazu eine Kommandozeile und starten Sie Debug. Laden Sie an den Speicher-Offset 0000h vom Laufwerk 0 (dem ersten, das ist A:, also die Diskette) die Daten von ersten (00) bis zum vierten Sektor (03)

l 0000 0 00 03

Sehen Sie sich dann mal diese Sektoren an:

d 0000 005f

Sie sehen, dass dies eine DOS-Diskette mit FAT-Formatierung ist. Probieren Sie einen anderen Bereich:

d 0100 01ff

Windows 98 Startdiskette - durch die Debug-Brille gesehen

Hier können Sie die Fehlermeldungen im Klartext lesen, die eine Diskette ausgibt. Wenn ein Virus diese manipuliert hat, erkennen Geübte ihn mit bloßem Auge!

DEBUG-Workshöpchen

Assembler in 10 Minuten

Auch Assembler ist kein Hexenwerk. Dennoch die Warnung: Jetzt wirds ein bisschen technisch...

Als erstes basteln Sie sich eine harmlose COM-Datei - zum Beispiel die sogenannte EICAR-Testdatei. Diese hat mehrere Besonderheiten: Sie können Sie mit einem normalen Texteditor schreiben (das geht sonst fast nie), sie ist trotzdem ein vollständiges Programm nach COM-Bauart (sie gibt nur ein bisschen Text aus), sie ist erwiesenermaßen harmlos und obendrein kurz genug für diese Website, die das Thema Assembler ja nur streifen kann.

Entweder holen Sie sich die Datei eicar.com aus dem Internet, etwa bei http://www.eicar.com im Bereich The AntiVirus testfile eicar.com, oder Sie machen Sie das Programm selbst. Starten Sie dazu den Editor Notepad und geben Sie exakt das folgende ein:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Es sind genau 68 Zeichen. Speichern Sie diese Datei dann als eicar.txt in einem Verzeichnis. Öffnen Sie die Eingabeaufforderung und geben Sie ein:

copy eicar.txt eicar.com

Spätestens jetzt müsst eigentlich Ihr Hintergrund-Virenwächter maulen. Wenn dem so ist, müssen Sie ihn eine Weile kalt stellen und deaktivieren.

Starten Sie nun den Debugger und laden sie auch gleich die Testdatei:

debug eicar.com

Wie Sie sehen, sehen Sie nichts: Der Debugger ist nämlich reichlich unspektakulär, um nicht zu sagen: spartanisch. Lassen Sie sich davon nicht täuschen. Wenn allgemein gilt, dass man auf PCs kaum etwas falsch machen, für Debug gilt das bestimmt nicht. Sie können direkt Formatierungsroutinen aufrufen, Warmstarts veranlassen und so weiter.

Geben Sie am Bindestrich das Dump-Kommando d ein, um eine Ausgabe des aktuellen Speichers ab der Standardadresse zu erwirken. Die Ausgabe ist dreispaltig: Links sehen Sie Angaben zu Adressen im Format Segment:Offset, COM-Programme beginnen bei Offset 0100h. In der Mitte sehen Sie die Maschinensprache-Anweisungen, als Hexadezimal dargestellte Bytes (Es soll Cracks geben, die Maschinensprache so lesen können, Sie und ich gehören wahrscheinlich nicht dazu...). Rechts sehen Sie eine Ausgabe der ASCII-Zeichen, sofern diese anzeigbar sind. Das ist nützlich, um Texte im Hex-Wirrwarr zu erkennen..

Eicar.com im Hex-Schnetzler

Sie sehen deswegen sofort, dass Debug die Eicar-Testdatei in den Speicher an die Adresse 0100h geladen hat, denn die Zeichenkette "EICAR-STANDARD-ANTIVIRUS-TEST-FILE" ist zu lesen. Wenn Sie den Befehl r eingeben, liefert Ihnen Debug den Status der aktuellen Prozessorregister - Sie haben hier wirklich die Hardware vor Augen!.

Mit dem Kommando u lassen Sie sich die Datei eicar.com disassemblieren. Debug greift sich standardmäßig die ersten 16 Byte und übersetzt sie in einen wenn schon nicht leicht verständliche, so doch immerhin lesbaren Code:

Eicar.com im Debugger

Links sehen Sie wieder Segmentadresse, knapp daneben wieder Hexcode, direkt daneben dann den eigentlichen Assembler-Code. Jetzt wird kompliziert: Da ein Byte nur ein Befehl sein kann, ein Befehl aber auch einen oder zwei Werte laden kann, kann als Assembler-Befehl auch länger als ein Byte sein. Sie sehen also links zuweilen mehrere Bytes für eine Zeile Assembler.

Asssembler-Cracks können diesen Code fast wie Klartext lesen (behaupten sie jedenfalls) und auf diese Weise nachvollziehen, was das Programm tut. Das in Portionen von 16 Byte zu tun ist allerdings etwas umständlich. Sie können zwar mit u auch größere Bereiche disassemblieren, aber das ganze ist dann nur unübersichtlich.

Verlassen Sie also den Assembler mit dem Quit-Befehl q. Wenn Sie später mit Assembler experimentieren wollen, dann können Sie im Debugger mit ? eine Liste der möglichen Befehle erhalten. Im Internet finden Sie zahlreiche Workshops, die in das Thema einführen (und zwar erheblicher gründlicher und besser als ich), eines ist zum Beispiel das Debug Assembly Tutorial von Fran Golden. Eine ganze Liste mit Tutorials finden Sie zum Beispiel hier.

Man kann Debug dazu benutzen, eicar.com in eine Datei zu disassemblieren. Die Vorgehensweise wäre: Debug aufrufen, eicar.com laden, mit u den Disassembler für 68 Byte (hexdezimal: 43) anwerfen, das Ergebnis in eine Datei abtippen und Debug beenden. Würden Sie so vorgehen, dann sähen Ihre Eingaben wie folgt aus:

debug eicar.com
-u 0100 0143
-q


Aber ha! Diese Eingaben können Sie auch mit Notepad in eine Textdatei schreiben und in Debug hinein pipen, und das Ergebnis heraus pipen lassen. Dazu fertigen Sie zunächst eine Datei, die Ihre Eingaben simuliert, und speichern Sie als disass.bla im selben Verzeichnis wie eicar.com. Folgendes sollte drinstehen:

u 0100 0143
q


Dann legen Sie mit Notepad eine Datei namens disass.bat an. Diese ist sehr kurz:.

debug eicar.com < disass.bla > eicar.dis

Diese Zeile bewirkt folgendes: Debug startet und lädt eicar.com, dann wartet es auf Eingaben. Die kommen auch, per Pipe umgeleitet aus der Datei dissass.bla. Das Ergebnis zeigt der Debugger diesmal nicht an, denn Sie leiten es wiederum in die Datei eicar.dis um. Wenn Sie eicar.dis mit dem Editor öffnen, sollten Sie das hier sehen:.

-u 0100 0143
0CD2:0100 58 POP AX
0CD2:0101 354F21 XOR AX,214F
0CD2:0104 50 PUSH AX
0CD2:0105 254041 AND AX,4140
0CD2:0108 50 PUSH AX
0CD2:0109 5B POP BX
0CD2:010A 345C XOR AL,5C
0CD2:010C 50 PUSH AX
0CD2:010D 5A POP DX
0CD2:010E 58 POP AX
0CD2:010F 353428 XOR AX,2834
0CD2:0112 50 PUSH AX
0CD2:0113 5E POP SI
0CD2:0114 2937 SUB [BX],SI
0CD2:0116 43 INC BX
0CD2:0117 43 INC BX
0CD2:0118 2937 SUB [BX],SI
0CD2:011A 7D24 JGE 0140
0CD2:011C 45 INC BP
0CD2:011D 49 DEC CX
0CD2:011E 43 INC BX
0CD2:011F 41 INC CX
0CD2:0120 52 PUSH DX
0CD2:0121 2D5354 SUB AX,5453
0CD2:0124 41 INC CX
0CD2:0125 4E DEC SI
0CD2:0126 44 INC SP
0CD2:0127 41 INC CX
0CD2:0128 52 PUSH DX
0CD2:0129 44 INC SP
0CD2:012A 2D414E SUB AX,4E41
0CD2:012D 54 PUSH SP
0CD2:012E 49 DEC CX
0CD2:012F 56 PUSH SI
0CD2:0130 49 DEC CX
0CD2:0131 52 PUSH DX
0CD2:0132 55 PUSH BP
0CD2:0133 53 PUSH BX
0CD2:0134 2D5445 SUB AX,4554
0CD2:0137 53 PUSH BX
0CD2:0138 54 PUSH SP
0CD2:0139 2D4649 SUB AX,4946
0CD2:013C 4C DEC SP
0CD2:013D 45 INC BP
0CD2:013E 2124 AND [SI],SP
0CD2:0140 48 DEC AX
0CD2:0141 2B482A SUB CX,[BX+SI+2A]
-q


Wenn Sie nun den Adressangaben und die Bytefolgen entfernen, erhalten Sie ein reines Assembler-Listing, welches Sie in der Datei eicar.asm speichern.

In einem letzten Schritt übersetzen wir nun die Datei eicar.asm mit Debug wieder, und zwar wieder automatisch per Batch-File. Nennen Sie es assemble.bat und füllen Sie es mit dieser wenig beeindruckenden Zeile:

debug < eicar.asm

Das Geheimnis liegt in der Datei eicar.asm, denn diese enthält alle Eingaben, mit denen Sie Debug sonst manuell füttern würden, einschließlich des Assembler-Listings. Dazu müssen Sie sich wieder nur klarmachen, wie Sie manuell vorgehen würden. Und Sie brauchen zwei neue Debug-Befehle: Mit n erzeugen Sie eine neue Datei, und mit a und einer offset-Adresse starten Sie die Eingabe des Assembler-Listings. So sieht die Datei eicar.asm aus:.

N MYEICAR.COM
A 100
POP AX
XOR AX,214F
PUSH AX
AND AX,4140
PUSH AX
POP BX
XOR AL,5C
PUSH AX
POP DX
POP AX
XOR AX,2834
PUSH AX
POP SI
SUB [BX],SI
INC BX
INC BX
SUB [BX],SI
JGE 0140
INC BP
DEC CX
INC BX
INC CX
PUSH DX
SUB AX,5453
INC CX
DEC SI
INC SP
INC CX
PUSH DX
INC SP
SUB AX,4E41
PUSH SP
DEC CX
PUSH SI
DEC CX
PUSH DX
PUSH BP
PUSH BX
SUB AX,4554
PUSH BX
PUSH SP
SUB AX,4946
DEC SP
INC BP
AND [SI],SP
DEC AX
SUB CX,[BX+SI+2A]

R CX
44
W
Q


Die Leerzeile bewirkt, dass Debug aus dem Assembler-Eingabemodus in den Befehlsmodus zurückwechselt. Mit r cx holen Sie sich den Wert des CX-Registers, schreiben ihm eine neue Länge vor (68 Byte plus eines), schreiben schliesslich mit dem Write-Befehl w das Programm in die Datei myeicar.com und verlassen mit q den Debugger.

Natürlich fummeln wir hier gerade halb ahnungslose an Dingen herum, für die man eigentlich tausendseitige Bücher im Großformat zu wälzen hat, daher kann das ganze nur an der Oberfläche kratzen. Wichtig ist, dass Sie nun eine Datei namens myeicar.com haben. Und wenn Sie den Editor Notepad starten und die Datei myeicar.com hineinladen und mit eicar.com vergleichen, dann werden Sie feststellen, dass sie identisch sind. Tadaa!

Sie können myeicar.com sogar ausführen - das bedeutet, Sie haben soeben per Assembler ein eigenes Stück Software produziert!.

Bevor Sie sich nun auf die Schulter klopfen - hier die schlechte Nachricht: Das eben gesehene kann heute fast jeder dritte Virus. Makro-Viren und Script-Viren erzeugen gar nicht selten eine Datei, die Tastatureingaben simuliert und das ASM-Listing enthält, sowie eine BAT-Datei, die diese Eingabe-Datei in den Debugger per Pipe umleitet. Die in Word gespeicherten Befehle sind dabei völlig unscheinbar und für sich genommen ungefährlich - und deswegen für einen Virenscanner fast nicht zu finden. Dennoch ist es möglich, ein Programm zu schreiben, das Word-Dokumente mit Makros infiziert, die wiederum das ursprüngliche Programm erzeugen können. Das macht Viren doppelt mobil und doppelt gefährlich.

Der langen Rede kurzer Sinn: Wenn Sie sich den Mühe machen, debug.exe umzubenennen (oder zu löschen), entziehen Sie einem Gutteil der Viecher die komplette Lebensgrundlage!

Word-Datei im Notepad: Man sieht den Aufruf von debug, mit der die Word-Datei life (!) einen COM-Virus erzeugt ('droppt')

Es gibt noch andere versteckte, aber gefährliche Tools in Windows; sie sind ebenfalls im Buch beschrieben.

 

 
·

Anzeige

Google

 

Text/Design viren-wuermer-trojaner.de + scareware.de
© Andreas Winterer All Rights Reserved · Disclaimer/ Haftungsausschluss
Besuchen Sie auch: winterer.de | cosmopollite.de