# BHP (Computervirus)

Das Computervirus BHP aus dem Jahr 1986 ist eines der wenigen Schadprogramme, die für den Heimcomputer Commodore 64 geschrieben wurden.
Das Virus war in mehrfacher Hinsicht ein Novum, denn es handelte sich um das erste C64-Virus überhaupt. Außerdem ist es auch das erste bekannte Clustervirus und auch das erste bekannte dateiinfizierende Stealth-Virus.
BHP wurde als Teil einer Präsentation auf der Hacker-Convention „Chaos Communication Congress 1986“ vorgestellt und nach dem damaligen Szenemagazin Bayrische Hackerpost benannt. Ein Mitglied der Redaktion hat das BHP-Virus geschrieben. Das Schadprogramm war nicht dazu gedacht, sich in freier Wildbahn zu verbreiten, sondern wurde als Beweis für die Machbarkeit eines C64-Virus entwickelt. Speziell dieses System galt im Vorfeld aus verschiedenen Gründen als denkbar ungeeignet für eine effektive Verbreitung von Computerviren.
In der Folge wurden von Privatpersonen und Computerzeitschriften mehrere Programme zur Erkennung und Entfernung von BHP veröffentlicht. Sie gehören zu den ersten Antivirenprogrammen überhaupt.

## Herkunft und Motiv

BHP steht für die Zeitschrift Die Bayrische Hackerpost. Dabei handelt es sich um eine von 1984 bis 1988 erschienene Fachzeitschrift mit dem Untertitel Das Informationsblatt für den lebensbejahenden DFÜ-Benutzer.
Den Anlass zur Entwicklung des Virus gab eine Diskussion zwischen dem BHP-Autor und Wau Holland, dem Gründer des Chaos Computer Clubs. Holland vertrat die Meinung, dass sich Computerviren auf Systemen wie dem C64 nicht verbreiten könnten. Ein 8-Bit-Computer ohne Netzwerkverbindungen, der nicht von einer Diskette bootet und dessen Betriebssystem keinen Speicherschutz unterstützt, war Hollands Meinung nach ein denkbar ungeeignetes Wirtssystem. Der Autor des BHP-Virus war anderer Meinung und schloss mit Holland eine Wette ab. Er wollte bis zum „Chaos Communication Congress '86“ ein Demo-Virus für den Commodore C64 implementieren.
Nach Meinung des BHP-Autors sollte die lebhafte Raubkopierer- und Diskettentauscher-Szene des weitverbreiteten Heimcomputers ausreichend sein, um das Virus zu verbreiten. Der fehlende Bootvorgang sollte sich ebenfalls adäquat ersetzen lassen, indem man die Lade- und Speichervorgänge entsprechend ausnutzt. Einen geeigneten Bereich im Speicher des C64, der von Programmierern normalerweise kaum genutzt wurde, fand der Autor ebenfalls.
Das Virus wurde im Jahr 1986 geschrieben. Die Konzeption und die Testphase nahmen mehrere Wochen in Anspruch. Der Code besteht aus verschiedenen Teilen, die sich vom Programmierstil her teilweise stark unterscheiden. Das führte dazu, dass später die Fehlinformation kursierte, die Schadsoftware sei von mehreren Personen geschrieben worden. Die drei Namen, die beim Payload angezeigt werden, bestätigten dies scheinbar. Der Grund lag in Wahrheit darin, dass die finale Version und fehlende Teile des Virus erst einen Tag vor der Hackerkonferenz „Chaos Communication Congress '86“ innerhalb einer 24-stündigen „Non Stop Hacker Session“ codiert wurden. Andere Bestandteile des Schadprogrammes wurden dagegen mit deutlich mehr Zeit und entsprechend gründlicher erstellt. Das Virus wurde einen Tag nach der Session der Öffentlichkeit vorgestellt.
Das BHP-Virus sollte beweisen, dass ein Virus über Disketten verbreitet werden kann, ohne sich per Netzwerk zu übertragen, und dass prinzipiell jedes Computersystem anfällig für Computerviren ist.
In den folgenden Jahren konnte man den dokumentierten Quellcode des Virus bei der Redaktion der Hackerpost auf einer Diskette mit einem Dropper, bzw. Injector, für 10 DM bestellen.

## Funktion

Das Virus wurde komplett in 6510-Assembler geschrieben. Einigen Quellen nach sollen relevante Teile des Viruscodes in Commodore BASIC 2.0 programmiert worden sein, das ist aber nicht zutreffend. BHP enthält lediglich eine BASIC-Zeile, die nur einen SYS-Befehl enthält und quasi als Markierung für bereits infizierte Dateien dient.
BHP nutzt die CBM80-Kennung als Reset-Schutz und wird durch einen normalen Hardware-Reset oder durch die Tastenkombination RUN/STOP+RESTORE nicht deaktiviert. Das Virus nutzt den Speicherbereich ab $D000, der im RAM direkt unter dem I/O-Bereich liegt. Dieser Bereich ist verhältnismäßig umständlich zu beschreiben und auszulesen und wurde von Programmierern eher selten genutzt. Daher hat der Viruscode dort gute Chancen, nicht überschrieben zu werden.
BHP verursacht keine gezielten Schäden. Es handelt sich also um ein vergleichsweise harmloses Virus, allerdings werden durch BHP zusätzliche Daten in Programme eingefügt und auf Disketten abgespeichert. In der Folge kann es unbeabsichtigt passieren, dass infizierte Programme nicht mehr (oder nicht mehr richtig) funktionieren, da sich zunächst das BHP-Virus aktiviert und dieses sich im Speicher an eine Stelle ablegt, an der eventuell bereits geladener Programmcode überschrieben wird.
Wenn das BHP-Virus ausgeführt wird, lädt es sich in den Speicherblock, der normalerweise für I/O-Geräte reserviert ist. Durch einen Eintrag in der Speicherzelle $1 wird die RAM-Konfiguration entsprechend eingestellt, um das Virusprogramm auszublenden. Nachdem sich das BHP-Virus in den Speicher kopiert hat, stellt es bei seiner Wirtsdatei die ursprüngliche Größe und den ursprünglichen Speicherort wieder her, so dass sie normal ausgeführt werden kann. BHP hat eine Prüfsumme, wenn diese nicht mit der des Host-Programms übereinstimmt, wird dieses Programm im Speicher überschrieben. BHP überprüft, ob das Virus bereits läuft, indem es den Wert eines Bytes an einer bestimmten Stelle des Speichers überprüft. Wenn das Programm diesen Wert findet, wird es beendet. Falls nicht, wird das Virus seinen Code an einer niedrigen Adresse im Systemspeicher ablegen. Dabei bindet es die Vektoren MAIN, NMI, CBINV, RESET, ILOAD und ISAVE ein, um auf das Virus zu verweisen. Das Einhaken der ersten vier Vektoren stellt dabei sicher, dass das Virus bei einem Programmneustart die Kontrolle über das System nicht verliert. Die letzten beiden Vektoren stellen sicher, dass das Virus immer dann ausgeführt wird, wenn eine Datei geladen oder gespeichert wurde. Wenn die Vektoren eingehakt sind, wird der Code des infizierten Programms ausgeführt.

### Infektions-Routine

Für eine Erstinfektion muss das Virus mit einem speziellen Dropper freigesetzt, also in den Speicher geladen werden. Ist dies erfolgreich geschehen, erscheint die Bildschirmmeldung:
?FATAL ERROR IN YOUR COMPUTER!
Ist das Virus im Systemspeicher resident und somit aktiv, wird die Infektionsroutine immer dann aufgerufen, wenn ILOAD oder ISAVE verwendet werden. ILOAD wird unter anderem dann verwendet, wenn zum ersten Mal auf eine Datei zugegriffen wird, eine Verzeichnisliste erstellt wird oder bei einer Suche Platzhalter verwendet werden. Unabhängig davon, ob eine Datei wirklich geladen ist oder nicht, ruft das Virus seine Infektionsroutine auf. ISAVE wird verwendet, wenn eine Datei gespeichert wird. Um mit der Infektion zu beginnen, überprüft das Virus zunächst, ob das angeforderte Gerät ein Laufwerk ist. Wenn der ISAVE-Vektor verwendet wurde, wird eine gerade gespeicherte Datei geöffnet, sofern dies der Fall ist. Andernfalls wird die erste Datei in der Verzeichnisliste geöffnet. Das Virus prüft, ob die Datei ein BASIC-Programm ist, indem es die ersten Bytes des Programms überprüft und mit seinem eigenen SYS-Befehl vergleicht. Wenn es seinen SYS-Befehl findet, untersucht das Schadprogramm die potentielle Wirtsdatei genauer, indem weitere 27 Bytes verglichen werden. Wenn diese 27 Bytes übereinstimmend sind, wird die Datei als bereits infiziert betrachtet.
Wenn BHP eine nicht infizierte Datei findet, überprüft es die Diskette, um sicherzustellen, dass das Verzeichnis auf Spur 18 existiert und dass die Datei auf dieser Spur nicht existiert. Anschließend prüft das Virus die Trackliste auf freie Sektoren, beginnend mit der zu infizierenden Datei. Sobald es acht freie Sektoren auf einer Spur findet, reserviert es den Platz für sich selbst. BHP verlinkt die befallene Datei in den letzten Sektor, während in den ersten und in die restlichen Sektoren der Virencode geschrieben wird. In der infizierten Datei selbst sitzt der virale Code dann am Anfang des Programmes. BHP ist vom Infektionsverhalten her also ein sogenannter Prepender.
Wenn das BHP-Virus aktiv ist, verbreitet es sich bei Nutzung der BASIC-Befehle LOAD, SAVE und VERIFY, sowie auch beim programmgesteuerten Laden und Speichern, auf andere Disketten und Dateien. Das BHP-Virus belegt auf einer Diskette etwa 9 Blocks pro Speichervorgang. Die Blöcke werden allerdings nur in der BAM (Block Availability Map) als belegt markiert und nicht von der Anzahl der als frei angezeigten Blöcken im Directory abgezogen. Entsprechend kann es passieren, dass durch den Platzbedarf des Virus eine nach Anzeige im Directory nicht voll belegte Diskette tatsächlich keinen freien Platz mehr hat. Der Floppy-Befehl VALIDATE (Vergleichbar mit CHKDSK oder SCANDISK bei den Microsoft-Betriebssystemen MS-DOS und Windows oder fsck unter Unix/Linux) aktualisiert, beziehungsweise korrigiert die im Directory als frei angegebene Blockanzahl wieder.

### Payload

Nach dem Laden eines infizierten Programmes wird per Zufall bei Benutzung von LOAD oder SAVE folgende Bildschirmmeldung ausgegeben, wobei hinter SERIALNO. angezeigt wird, wie viele Dateien diese Virus-Kopie bereits infiziert hat:
Anm.: Außerhalb der Fachsprache ist für den Begriff „Virus“ das grammatikalische Maskulinum üblich.
Die Meldung „Hallo Dickerchen“ ist ein scherzhafter Gruß an Wau Holland.

### Stealth-Techniken

Benutzt ein Computervirus spezielle Techniken, die es vor der Erkennung durch den Anwender oder durch Antivirenprogrammen tarnen sollen, spricht man von einem Stealth-Virus (engl. heimlicher Virus).
Das BHP-Virus nutzt verschiedene Methoden, um seine Anwesenheit auf dem Computer zu verschleiern. Bei der Infektion einer Diskette wird beispielsweise die Blockanzahl im Verzeichnis nicht aktualisiert. Bei der Infektionsroutine kam es den Entwicklern zugute, dass die BAM ohnehin nach jedem Schreibzugriff aktualisiert wird. So konnte der Viruscode schnell und unauffällig nach freiem Speicherplatz auf der Diskette suchen, ohne dabei Laufwerkszugriffe zu verursachen – denn diese würde man deutlich am Betriebsgeräusch des Laufwerks erkennen. Außerdem wird beim C64 über die Speicherzelle $1 der RAM konfiguriert. Der Programmierer kann somit festlegen, welche Bereiche eingeblendet oder ausgeblendet sein sollen. Das BHP-Virus wird in den I/O-Bereich kopiert und dann ausgeblendet und somit zusätzlich getarnt.
Damit war BHP das erste bekannte dateiinfizierende Stealth-Virus. Stealth-Techniken gab es zuvor nur bei Bootsektorviren. Mehrere Quellen bezeichnen fälschlicherweise das erst im Oktober 1989 entdeckte MS-DOS-Virus Frodo, das sowohl COM- als auch EXE-Dateien befallen kann, als erstes Dateivirus mit Tarnfunktionen.
Der verhältnismäßig kurze Ladevorgang zum Aufrufen des Directory mit dem Standardbefehl LOAD"$",8 dauert im Falle einer Erstinfektion auffällig lang, da u. a. 9 Blocks auf die Diskette geschrieben werden müssen. Wird aber eine größere Datei mit deutlich längerem Ladevorgang gelesen oder geschrieben, fällt der Unterschied bei weitem nicht so deutlich auf.
Schadprogramme, die sich durch variable Selbstverschlüsselung tarnen (Polymorphe Viren), bzw. installierte Antivirusprogramme manipulieren (Retroviren), zählen nicht zu den Stealth-Viren und kamen erst einige Jahre später auf. Sie können aber zusätzlich mit Stealth-Techniken kombiniert werden.

## Erkennung und Entfernung

Infizierte Programme zeigen beim Auflisten mit dem BASIC-Befehl LIST folgende BASIC-Zeile an:
1986 SYS PEEK(43) + PEEK(44)*256 + 48:VIRUS
In Ausgabe 2/1988 der Fachzeitschrift 64’er wurde ein kurzes BASIC-Programm namens BHP-Virus-Killer vorgestellt, mit dem man infizierte Dateien und Disketten bereinigen konnte. Es wurde als Listing zum Abtippen abgedruckt und verwendete trotz seiner Kürze Checksummer. Antivirenprogramme wurden bis Anfang der 1990er Jahre üblicherweise als „Viruskiller“ bezeichnet. Der Markt&Technik-Verlag hatte dem BHP-Virus, seiner Hintergrundgeschichte und seinen Auswirkungen bereits in der Ausgabe 7/1987 einen ausführlichen Artikel in der 64’er gewidmet. Da sich die Journalisten nicht darüber bewusst waren, dass BHP sich nicht nur beim Speichern, sondern auch über den Ladebefehl sowie beim programmgesteuerten Laden verbreitet, hatte man versehentlich einige Disketten in der Redaktion infiziert. Einige Monate später veröffentlichte der Redakteur Thomas Röder in der Zeitschrift Happy Computer ein verbessertes Programm namens 64'er-Serum.
Schreibgeschützte Disketten kann das BHP-Virus nicht infizieren.
Anfällige Systeme werden mittlerweile nur noch in der Retrocomputing- und Retrogaming-Szene betrieben.

## Die Autoren

Der Urheber des Virus verwendete die Pseudonyme Dr.Dr.Strobe und Papa Hacker. Die Signatur wurde häufig falsch interpretiert. Sie erweckt den Eindruck, dass es handle sich um zwei Pseudonyme von zwei verschiedenen Programmierern. Es handelt sich aber um eine Person.
Bei seiner Arbeit wurde der BHP-Autor von einem weiteren Mitglied der Hackerpost-Gruppe unterstützt, das sich Garfield nannte. Er war überwiegend für Beratung und Rücksprachen zuständig und schrieb keine relevanten Teile des Codes. Solche Handles sind in der Hackerszene bis heute üblich. Zudem wollte der Autor mit Blick auf seine beruflichen Zukunft vermeiden, dass sein Realname mit Malware in Verbindung gebracht wird.

## Situation im Jahr 1986

Als erste bekannte Malware, die in Umlauf geriet, gilt der Netzwerkwurm Creeper aus dem Jahr 1971, der oft fälschlich als Virus bezeichnet wird. Das erste richtige Virus, das sich unkontrolliert verbreitete, folgte 12 Jahre später. Der damals 15 Jahre alte Schüler Rich Skrenta hatte 1982 das Bootsektorvirus Elk Cloner für Apple-II-Computer geschrieben. Die Folgen unterschätzte Skrenta im Vorfeld, er hatte lediglich ein Scherzprogramm im Sinn. Ab 1986 verbreitete sich erstmals ein MS-DOS-Virus. Es infizierte die Bootsektoren von 5,25"-Disketten und hatte den Namen Brain. Brain war eigentlich als Nachweis für Raubkopien konzipiert worden und war auch das erste Virus mit Stealth-Techniken. Für das Z80-Betriebssystem CP/M gab es Mitte der 1980er Jahre vereinzelt ebenfalls Computerviren.
Der Commodore 64 hatte seine ganze Ära über allgemein den Ruf, relativ sicher vor Malware zu sein. BHP war 1986 das erste Virus überhaupt für dieses System. In Lauf der nächsten fünf Jahre folgte noch etwa ein Dutzend weiterer Viren für den C64, die aber allesamt eher unbekannt blieben. Namentlich bekannt sind beispielsweise die Viren HIV, BU\A, MD, Starfire, FROG, Coder und Bit Addict. Für die grafische Benutzeroberfläche GEOS wurde das Shadow Virus entwickelt. Nennenswerte Verbreitung erreichte aber keines dieser Schadprogramme. In der Praxis spielte Malware für C64-Besitzer zu keiner Zeit eine relevante Rolle.
Einige Monate später, im Jahr 1987 stellte das IT-Unternehmen G Data Software dann das vermutlich erste kommerzielle Virenschutzprogramm vor. Es war für den Atari ST entwickelt worden. Gegen Ende dieses Jahres wurde auch das erste Virus für den Commodore Amiga namens SCA von einer gleichnamigen Crackergruppe aus der Schweiz veröffentlicht.