Erschienen in 64'er Magazin, Ausgabe Sonderheft 05/1986 · Originaldatei: PRG_LOCK.TXT
Hinweis: Dies ist das an die Redaktion eingereichte Manuskript, nicht der gedruckte Endtext. Layout, Bildunterschriften, Korrekturen und Kürzungen der Redaktion können in der veröffentlichten Fassung abweichen.
Gut versteckt!
Der »Program-Coder« wandelt fertige Basicprogramme so um, daß nach dem Laden nur eine Zeile mit einem SYS-Befehl sichtbar ist. Das Programm kann dennoch normal wie gewohnt geladen, gestartet, gespeichert und bedient werden. Ein Listen ist jedoch nicht möglich. Gleichzeitig ist ein Schutz eingebaut, der das Programm nach einem Abbruch automatisch sofort neu startet. Auch für Experten nur schwer zu knacken!
Nikolaus M. Heusler
War es auch schon einmal Ihr Wunsch, Ihr fertiges Basicprogramm vor fremden Blicken zu schützen? Es muß ja nicht jeder sehen, mit welchen Techniken Sie bei der Programmierung gearbeitet haben. Das Programm sollte auf eine einzige Zeile schrumpfen, die nur einen SYS-Befehl enthält. Dieser könnte dann das eigentliche Programm starten. Auf diese Weise codierte Basicprogramm wirken außerdem auch viel professioneller, der unbedarfte Anwender denkt gar, Sie hätten hier in Maschinensprache programmiert. Das Programm kann dennoch normal wie gewohnt geladen, gestartet, gespeichert, kopiert und bedient werden. Ein Listen ist jedoch nicht möglich. Gleichzeitig ist ein Schutz eingebaut, der das Programm nach einem Abbruch automatisch sofort neu startet. Dadurch ist auch der Abbruch mit der STOP-Taste oder RUN/STOP-RESTORE unterbunden. Auch für Experten ist diese Sicherheitsmaßnahme nur sehr schwer zu knacken!
Der »Program-Coder« ist ein kurzes Basicprogramm, das auf sehr komfortable Weise fertige Basicprogramme direkt auf Diskette so wandelt, daß sie danach scheinbar nur noch aus einem SYS-Befehl bestehen. Bedingung ist allerdings, daß das zu wandelnde Programm fertig ausgetestet und fehlerfrei ist: Änderungen an der codierten Version sind nicht mehr möglich. Da außerdem am Programmende (oder beim END bzw. STOP-Befehl) sowie beim Erscheinen von Basic-Fehlermeldungen (zum Beispiel ?SYNTAX ERROR) das Programm sofort neu gestartet wird, sollten Sie dafür sorgen, daß es kein Programmende gibt. Starten Sie »von sich aus« zum Beispiel nach einem Tastendruck neu.
Geben Sie ein:
LOAD "PRG-CODER",8
RUN
Auf dem Bildschirm erscheint eine kurze Anleitung. Darunter steht die Frage nach dem alten Programmnamen. Legen Sie die Diskette ein, auf der sich das zu codierende Basicprogramm befindet, und geben Sie den Dateinamen ein. Hier dürfen die üblichen Abkürzungen »?« und »*« verwendet werden. Die Eingabe wird mit RETURN abgeschlossen. Dann soll der Name eingegeben werden, unter dem der C 64 das codierte Programm wieder auf diese Diskette speichern soll (achten Sie darauf, daß noch genügend Platz auf der Diskette frei ist). Geben Sie den Namen der Zieldatei ein. Abkürzungen sind nicht erlaubt. Die beiden eingegebenen Namen müssen sich unterscheiden.
Nach dieser Eingabe liest das Programm das Programm bzw. gibt eine Fehlermeldung aus, falls die Datei zum Beispiel nicht auf dieser Diskette existiert. Automatisch wird die neue Version angelegt. Dieser Vorgang kann je nach Programmlänge schon einige Zeit in Anspruch nehmen. Rechnen Sie etwa mit 6 Sekunden pro Diskettenblock.
Am Schluß kann durch Tastendruck neu gestartet werden.
Die Anwendung des codierten Programms (die Original-Version bleibt unverändert erhalten) erfolgt wie gewohnt. Das Generatorprogramm ist nach der Codierung nicht mehr erforderlich. Sie laden die neue Version mit dem Befehl
LOAD "NAME",8
Geben Sie jetzt LIST ein, bekommen Sie nur die Zeile
1993 SYS2061
zu Gesicht, mehr ist scheinbar vom Programm nicht übrig geblieben. Aber keine Panik: Der Start mit RUN startet Ihr Programm, das jetzt allerdings nicht mehr beendet werden kann.
Wie bereits erwähnt können Sie solche manipulierten Programme ganz normal kopieren und speichern. Dennoch bestehen einige Einschränkungen. Es ist möglich, daß bestimmte Programm nach der Codierung nicht mehr funktionsfähig sind. Das sind generell alle Basicprogramme, die auf eine bestimmte Position im Speicher angewiesen sind. Benutzen Sie Basicprogramme mit integrierten Maschinenprogrammen, beispielsweise solche Programme, die ebenfalls schon in der Originalversion nur aus einem SYS-Befehl bestehen, sollten Sie diese nicht mit dem Coder behandeln. Auch Basicprogramme, die sich selbst verändern (Selbstmodifikationen) werden Probleme bereiten. Die breite Masse der Standard-Basic-Programme, die ohne besondere Tricks auskommen, wird sich jedoch ohne weiteres einwandfrei codieren lassen. Im Zweifelsfall lassen Sie es eben auf einen Versuch ankommen.
Zur internen Funktionsweise wollen wir nicht allzu viele Worte verlieren, denn ein solcher Schutz verliert seine Wirkung, wenn er genau dokumentiert wird. Das Generatorprogramm kopiert vor das eigentliche Basicprogramm, welches unverändert übernommen wird, lediglich ein kurzes Maschinenprogramm und die Zeile 1993 mit dem SYS-Befehl. Dieser Befehl startet das Maschinenprogramm. Darin wird der Beginn des Basic-Speichers so weit nach oben gesetzt, daß der C 64 sein Programm wiederfindet. Gleichzeit verbiegen wir den Zeiger für den Direktmodus-Einsprung in eine eigene Routine, welche die Zeichen »{CLR}R{SHIFT U,RETURN}« in den Tastaturpuffer kopiert. Im Direktmodus »denkt« das System jetzt, der Anwender hätte via Tastatur den Befehl »RUN« eingegeben, und startet das Programm neu. Während der Initialisierung durch das Assemblerprogramm werden noch die Linkpointer des verschobenen Programms korrigiert, danach kehrt der C 64 in den Direktmodus zurück, findet dort den RUN-Befehl und startet das Programm.