![]() |
![]() |
![]() |
Anzeige |
|||||||||||
![]() |
![]() · Viren-Entfernung · Networking · Assembler · debug.exe |
debug(Outtake)Viren frisch gepresst, dank debug.exeIn 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
Ü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 wirdSie 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:
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)
DEBUG-WorkshöpchenAssembler in 10 MinutenAuch 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:
Es sind genau 68 Zeichen. Speichern Sie diese Datei dann als eicar.txt in einem Verzeichnis. Öffnen Sie die Eingabeaufforderung und geben Sie ein:
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:
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..
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:
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:
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:
Dann legen Sie mit Notepad eine Datei namens disass.bat an. Diese ist sehr kurz:.
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:.
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:
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:.
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!
Es gibt noch andere versteckte, aber gefährliche Tools in Windows; sie sind ebenfalls im Buch beschrieben.
|
Anzeige |
|||||||||||
Text/Design viren-wuermer-trojaner.de + scareware.de |
||||||||||||||