Frankie Killer - Reiner Tisch unter Aladin

Kennen Sie schon Frankie? Ach, Sie arbeiten nicht mit Aladin? Doch? Na, dann werden Sie ihn bestimmt noch kennenlernen. Ich habe Frankies Bekanntschaft vor etwa einem Monat gemacht. Zur Zeit hin ich dabei, meine Studienarbeit auf dem ATARI zu schreiben. Und da ich neben der reinen Textverarbeitung auch noch Bilder und Diagramme malen muß, habe ich mich entschlossen, das ganze auf dem ATARI, aber unter dem Aladin-Betriebssystem zu machen. Dort habe ich dann mit den Programmen MacWrite und MacPaint gearbeitet.

Am Anfang ging auch alles gut. bis eines Tages dann Frankie tauchte: Ich war gerade an einer Zeichnung, als sich plötzlich die gesamte Menü-Leiste nach unten verschob und hinter meiner Zeichnung verschwand. Direkt danach tauchte sie wieder auf, aber diesmal stand da nicht ‘Ablage Bearbeiten usw..’, sondern ‘Frankie says: No more Piracy’, und ab diesem Augenblick tat sich überhaupt nichts mehr. Die Maus bewegte sich nicht mehr, es ließen sich keine Disketten mehr einlegen oder auswerfen und selbst der Griff zum Reset-Knopf, der bisher bei jedem ‘schwerwiegenden Systemfehler’ geholfen hat, brachte mich nur zurück zum schnöden ATARI-Desktop.

Was tun? Ich habe (dummerweise) gleich darauf untersucht, ob meine anderen Mac-Programme noch laufen. Bis ich auf die Idee kam, daß sie dadurch vielleicht auch infiziert werden, hatte ich schon mindestens 3/4 aller meiner Programme getestet und natürlich auch infiziert. Das Gemeine an Frankie ist ja, daß er den Benutzer am Anfang ganz normal arbeiten läßt, bis er dann nach knapp zehn Minuten in Erscheinung tritt. Und wenn er erst einmal aufgetreten ist, dann läßt sich das bisher Erstellte auch nicht mehr abspeichern.

Da Frankie immer knapp zehn Minuten nach dem Starten eines Programmes auftaucht. vermutete ich, daß er sich vielleicht nach der internen Uhr richtet. Deswegen versuchte ich alles mögliche, um sein Auftreten zu verhindern: Uhrzeit vor dem Programmstart zurückstellen, Uhrzeit direkt nach dem Aufruf des Programmes zurückstellen, Uhrzeit mehrfach verstellen, aber leider alles ohne Erfolg.

Dann habe ich versucht herauszufinden, wo sich Frankie versteckt. Schon bald hatte ich bemerkt, daß die infizierten Programme plötzlich etwa 3 kB größer waren als ursprünglich. Ich stellte fest, daß Frankie die Programme bereits beim Kopieren von einer Diskette auf eine andere verändert! Da mir aber nach einiger Zeit die Lust verging, immer nach 10 Minuten das ganze System wieder neu zu starten, beschloß ich, das Virusproblem einmal grundlegend zu untersuchen. Ich besorgte mir ein sauberes System: Res-Edit (ein Resource-Editor von Apple) und MacTools (ein Diskettenmonitor).

Grundlagen

Zunächst einmal ein paar grundlegende Fakten zum Apple. Eine Datei besteht beim Macintosh immer aus zwei Teilen: dem Datenteil und dem Resourceteil. Im Datenteil werden anwenderspezifische Daten gespeichert, wie z.B. der Text, den ich mit einem Textverarbeitungsprogramm erstellt habe. Im Resourceteil werden Informationen über Dialogboxen, Alarmboxen usw. wie man sie z.B. auch vom ATARI und dessen Resourcedateien kennt, gespeichert, aber auch der Programmcode selbst. Dies ist auch ein Grund dafür, daß Macintosh-Programme in der Regel nur aus einer einzigen Datei bestehen: Ein Programm speichert die unzähligen Parameterdateien, die man aus der IBM-Welt kennt, im Daten-oder im Resourceteil der Programmdatei ab und kommt deswegen mit einer einzigen Datei aus.

Es müssen aber nicht jedesmal beide Teile einer Datei existieren. Bei einer Datei, in der z.B. meine Studienarbeit abgespeichert ist, existiert kein Resourceteil. Zu meiner anfänglichen Verwirrung trug auch bei, daß ein und dieselbe Datei auf verschiedenen Medien (Laufwerken) unterschiedlich groß sein kann. Kopieren Sie einmal eine Datei von einer Diskette auf die SuperDisk. Sie werden in den meisten Fällen feststellen, daß die Datei angeblich kleiner wird. Das liegt daran, daß im Directory des Macintoshs nur die Größe der Datei in BLOCKs angegeben wird. Ein BLOCK entspricht den Clustern beim ATARI. Offensichtlich wird bei der Superdisk mit kleineren BLOCKs gearbeitet. Die Standardgröße eines BLOCKs beträgt bei den Aladin-Disketten 1536 Bytes (3*512). Wenn also eine Datei 800 Bytes groß ist, erscheint im normalen Directory eine Größe von 1,5 kb. Die wahre Größe einer Datei erfährt man nur über Propeller-I (Propeller ist die sogenannte Befehlstaste des Macs, bei Aladin die Control-Taste).

Aber jetzt wieder zu Frankie. Wie bereits gesagt, wird in der Resourcedatei jedes Programmes im Unterschied zum ATARI auch der eigentliche Programmcode abgespeichert. Mit Hilfe des Resource-Editors ResEdit kann man sich die Resourcen eines beliebigen Programmes auflisten lassen (s. Bild 1). Es gibt noch einen anderen Resource-Editor, REdit, aber der kann nur bestimmte Resource-Typen verarbeiten, und ausgerechnet der ‘Code’-Typ gehört nicht dazu. Resourcen eines bestimmten Typs werden zusammengefaßt und erhalten einen Namen, der immer aus vier Großbuchstaben besteht. Die Kombinationen aus Kleinbuchstaben sind von Apple für eigene Zwecke reserviert. Andere Resource-Typen und -Namen sind bereits von Apple vordefiniert; ein Programmierer kann jedoch auch seine eigenen Namen für seine Resourcen verwenden.

Bild 1: Mit ResEdit lassen sich die Resourcen von Programmen auflisten

Unter dem Namen ‘ALRT‘ sind z.B. alle Alert- (Alarm-) Boxen zusammengefaßt; die Icons, die ein Programm verwendet, stehen unter ‘ICN#' oder 'ICON' (s. Bild 1). Uns interessieren jetzt aber nur die CODE'-Resourcen. Unter diesem Namen verbirgt sich der eigentliche Programmcode. Und auch hier kann der Macintosh mit einigen Besonderheiten glänzen. Der Programmcode kann vom Programmierer in verschiedene Segmente aufgeteilt werden. Über verschiedene Flags, die der Programmierer vergibt, können die Eigenschaften der Segmente beeinflußt werden (diese Flags können für alle Resourcen vergeben werden). So kann das Macintosh-Betriebssystem angewiesen werden, bestimmte Code-Segmente bei zu geringem Speicherplatz aus dem Speicher zu löschen und erst wieder bei Bedarf von Diskette oder Festplatte zu laden.

Mit Hilfe des Programmes ResEdit kann der (erfahrene) Anwender fast jedes Programm nach seinen Wünschen verändern. Nehmen wir an, Sie haben ein Programm erstellt und wollen es in Amerika verkaufen. Da bei einem richtigen Maccie-Programm der gesamte Dialog mit dem Benutzer über Dialogboxen und Menüs abläuft, brauchen Sie bloß die entsprechenden Stellen in der Resource-Datei mit ResEdit zu ändern, das Programm wird davon nichts merken.

Und gerade diese Offenheit macht sich der Frankie-Virus zunutze. Er kopiert seinen eigenen Programm-Code einfach als zusätzliches Code-Segment in die Resource-Datei eines Programmes. Da der Macintosh schon während des normalen Betriebes ständig auf die System- und Programmdateien zugreift, wird man von einem solchen Kopiervorgang in der Regel nichts merken. Haben Sie schon einmal ’aus Versehen’ ein Programm von der Diskette gestartet, wenn Sie nur mit einem Laufwerk arbeiten und auch das System nicht auf der SuperDisk installiert ist? Vielleicht können Sie sich jetzt besser vorstellen, wieso man in einem solchen Fall ständig die Disketten wechseln muß.

Wie findet man nun den Virus?

Als erstes öffnet man bei einem infizierten Programm den Code-Eintrag in Bild 1 durch Doppelklick (in Bild 1 wird gerade der Finder untersucht). Dann sollte so etwas ähnliches wie in Bild 2 erscheinen. In diesem Finder gibt es also sechs verschiedene Code-Segmente, würde man jetzt vermuten. Fast richtig, aber Segment Null hat eine besondere Funktion. Im Segment Null jedes Programmes wird eine Sprungtabelle abgespeichert. Da ein Programmierer beim Erstellen des Programmes nicht wissen kann, an welcher Stelle im Speicher später einmal die verschiedenen Code-Segmente stehen, legt er eine Sprungtabelle an, in der für jeden (Programm-)Sprung von einem Segment zum anderen ein Eintrag steht. Und auch hier schlägt der Virus zu.

Bild 2: Der Code-Eintrag unseres Beispiels

Der Virus untersucht bei einem gestarteten oder zu kopierenden Programm die Code-Tabelle. Falls das Programm noch nicht infiziert ist, sucht er in der Code-Tabelle die höchste Nummer. Daraufhin legt er ein neues Code-Segment mit einer um Eins höheren Nummer an. In dieses Segment kopiert er dann den eigenen Programm-Code. Das allein aber reicht noch nicht, denn irgendwann soll sein Programm-Code ja auch einmal ausgeführt werden. Deshalb schreibt der Virus an die erste Stelle in der Sprungtabelle einen Sprung ins eigene Programmsegment und, das ist wichtig, rettet den alten Eintrag im eigenen Programm-Code. Dadurch wird nach dem Start eines infizierten Programmes immer zuerst das Virusprogramm ausgeführt und dann mit Hilfe des geretteten alten Eintrags aus der Sprungtabelle mit dem ursprünglichen Programm fortgefahren. Dem Benutzer bleibt dies verborgen.

Den Frankie-Virus erkennt man am Eintrag ‘0008 3F3C XXXX A9F0' an der ersten Stelle in der Sprungtabelle (Code 0) (s. dritte Zeile in Bild 3), wobei an der Stelle von XXXX dann die Nummer des neuen Code-Segments steht. Die ersten 16 Bytes der Sprungtabelle enthalten unter anderem Informationen über die Größe und Organisation der Sprungtabelle. Das Virussegment selbst ist zwischen 3400 und 3800 Bytes groß. Die Größe eines bestimmten Eintrags erfährt man über die ‘Informationen’-Funktion von Res-Edit. Aber Vorsicht: Es gibt auch andere, saubere Programme, deren erster Eintrag ‘0008’ lautet. Meistens verrät sich der Virus aber durch die Tatsache, daß ‘normale’ Programme an der ersten Stelle nie einen Sprung in das Segment mit der höchsten Nummer haben.

Noch ein weiterer Tip: Gelegentlich kommt es vor, daß Programme Code-Segmente mit den Nummern 0 bis 10 und 15 bis 20 haben (Zahlen sind willkürlich gewählt). In diesem Fall steckt der Virus im Segment 10.

Bild 3: Frankie erkennt man an der dritten Zeile

Wie beseitigt man den Virus?

Jetzt wird es ja eigentlich erst richtig interessant, denn was nützt einem die Kenntnis. daß und wo ein Virus steckt, wenn man ihn nicht auch beseitigen kann. Man startet ResEdit, öffnet das infizierte Programm und sucht sich das Code-Segment heraus, das den Virus versteckt. Dieses Segment kopiert man in die Zwischenablage mit ‘Kopieren’. Dann klickt man das Diskettenfenster nach oben und eröffnet mit ‘Neu’ eine neue Datei. In diese neue Datei kopiert man mit ‘Einfügen’ das Code-Segment aus der Zwischenablage. Danach schließt man diese neue Datei und läßt die Änderungen abspeichem. Jetzt kann man das Virus-Code-Segment mit ‘Löschen’ endgültig aus dem infizierten Programm löschen. Auch dieses Programm schließt man und verläßt dann ResEdit.

Für die weitere Arbeit braucht man einen Diskettenmonitor, wie z.B. MacTools oder FEdit. Diesen startet man und öffnet die zuvor angelegte Datei mit dem Virus-Code. An der Stelle ’00A2' in Block 1 (oder an der absoluten Stelle 02A2) findet man dann den ursprünglichen Eintrag aus der Sprungtabelle (s. Bild 4). In diesem Fall lautete der ursprüngliche Eintrag: Springe an die Stelle '0000' im Segment '0001'. Diesen Eintrag notiert man sich und startet wieder ResEdit. Jetzt braucht man nur noch den Viruseintrag in der Sprungtabelle zu löschen und stattdessen die notierten Werte einzutragen. Die Datei mit dem Virus-Segment kann man danach natürlich löschen.

Bild 4: Zum Entfernen des Virus ist ein Diskettenmonitor notwendig.

Zum Abschluß noch eine Warnung: Arbeiten Sie nur mit Kopien. Ich habe auf die beschriebene Weise zwar alle meine Programme gesäubert und sie funktionieren auch wieder, aber ich übernehme natürlich keine Garantie für diese Methode.

Und noch ein Tip: Kopieren Sie nach dem Start von Aladin alle Systemdateien auf die SuperDisk und booten sie dann von dieser. So kann normalerweise zumindest Ihre Systemdiskette nicht infiziert werden. Bei manchen Programmen läßt sich das Arbeiten mit dem System von der Diskette leider nicht vermeiden, wie z.B. beim Programm ‘GemLoad’. Hier wird eine leere SuperDisk vorausgesetzt...

Literatur:

Schirmacher, Arne:


Bernhard Malle
Aus: ST-Computer 10 / 1989, Seite 66

Links

Copyright-Bestimmungen: siehe Über diese Seite