Schädlingen auf der Spur, Teil 5

Seite 4: Schädlingen auf der Spur, Teil 5

Inhaltsverzeichnis

Und nun lieber Leser, verrate ich dir ein kleines Geheimnis. Bitte verstehe, dass das was ich gleich sage absolut vertraulich zu behandeln ist... es ist top secret: Das ganze Zeug da oben ist...

... kodiert.

Da hat jemand etwas geschrieben, das wir NICHT SEHEN SOLLEN.

Pssst - erzähl es keinem.

Ok. Vielleicht war es auch -- naja -- ziemlich offensichtlich.

Offensichtlich ist jedoch nicht, was wir jetzt damit anstellen werden. Macht euch bereit. Der gute, alte Dr. Tom nimmt euch mit auf einen Ausflug ins Land des Reverse Engineering und lehrt euch hoffentlich das ein oder andere, wie ihr selber mit solch verschleiertem Code zurecht kommt.

Vor vielen Jahren, als ich noch jünger, dümmer und energiegeladener war, hätte ich ein bißchen Perl-Code zusammengezimmert, um den Sinn dieser wirren Zeichenfolge zu entschlüsseln. Mit der Zeit bin ich jedoch reifer geworden und habe gelernt, dass jugendlicher Elan und Begeisterung gegen die faule Gerissenheit des Alters fast immer den Kürzeren zieht. "Warum härter arbeiten, wenn man es schlauer anstellen kann?" und ähnliche Klischees kommen mir da in den Sinn. Ich bin in einer Lebensphase angelangt, in der ich die Fertigkeit meines Gegenübers gegen ihn wenden kann -- ungefähr wie Road Runner gegen Willi Koyote. (Ich wette, du hast gedacht, jetzt kommt irgend so ein Zen/Kung-Fu-Verweis, oder?)

Lassen wir den Datenteil mal außer Acht und werfen einen Blick auf den funktionalen Teil. Der Code entschlüsselt die Daten und schreibt sie mit "document.write()" in ein existierendes HTML-Dokument. Dieses "Dokument" führt den Code dann aus und macht etwas - vermutlich etwas böses. Aber was, wenn wir diesen Prozess irgendwie ausnutzen könnten, um uns das dekodierte Doukment zu zeigen? Es stellt sich heraus, dass das gar nicht so schwer ist.

JavaScript hat viel mehr Möglichkeiten, wenn es auf vom lokalen System aus gestartet wird, als wenn es eine Web-Seite ausführt. Das nutzen wir aus, und fügen einen Aufruf zu einer ActiveX-Komponente ein, der eine Datei auf dem Testsystem öffnet. Mit einer weiteren kleinen Änderung an dem Skript bringen wir es dazu, das dekodierte Dokument in eine Datei zu schreiben.

Hey - das klingt ja schon fast, als wĂĽsste ich, wovon ich spreche, oder?

Bevor es weitergeht: Mach das nie, NIEMALS auf einem Produktionssystem. Mach das nie auf einem Rechner, der fĂĽr irgend etwas anderes genutzt wird. Mach das nie auf irgendeiner Maschine, die ans Netz angeschlossen ist. Mach das niemals auf einem System, das du nicht danach formatieren und neu installieren kannst. Spuck nicht gegen den Wind -- NIE.

Echt nicht.

Also... wir bauen das folgende Schnipsel in den JavaScript-Code ein; gleich am Anfang nach der Zeile <SCRIPT LANGUAGE="JavaScript">:

var fso, output;
fso = new ActiveXObject("Scripting.FileSystemObject");
output = fso.OpenTextFile("C:\\test.txt" , 8, 1, -2);

Und dann ändern wir noch den Aufruf von "document.writeln()" am Ende in "output.write()".

Damit erzeugt das Schnipsel am Anfang ein FileSystemObject, über das es eine neue Datei namens "test.txt" im Wurzelverzeichnis des Laufwerks C: anlegt. Der Handle dieser Ausgabedatei heißt "output" und nach der Änderung des Funktionsaufrufs am Ende in "output.write()" landet alles, was vorher in das HTML-Dokument geschrieben wurde, in unserer Ausgabedatei. Dann starten wir das editierte Skript im Internet Explorer auf unserem opferbaren Testsystem und finden Bingo! die dekodierte Ausgabe in C:\test.txt

(Anm.d.Ü: Stattdessen kann man oft auch einfach das "document.write(...)" durch ein "alert(...)" ersetzen. Das erzeugt eine Messagebox mit dem dekodierten Code und hat den Vorteil, dass es auch mit anderen Browsern und sogar auf anderen Betriebssystemen funktioniert. Trotzdem sollte man mit verdächtigem Code natürlich nur auf reinen Testsystemen hantieren.)

Da hat also jemand einiges an Zeit investiert, dieses "Verschlüsselungsverfahren" zu entwerfen. Mehrere Stunden gingen dafür drauf, die Dekodierfunktion zu entwerfen und den Programmcode in Kauderwelsch umzuwandeln. Und wir haben das ganze in wenigen Minuten über den haufen geworfen. Der anonyme Programmierer hätte seine Zeit besser damit verbracht, mal eine Ethikkurs zu besuchen, sich einen richtigen Job zu besorgen oder eine echte Programmiersprache zu lernen...

Aber ich schweife ab.