- Ein Fallbeispiel, bei dem ein Parallelport-Dongle, den ein RPG-II-Compiler für die Buchhaltung aus den 1990er-Jahren verlangte, analysiert und sein Verhalten nachgebildet wurde
- Die Originalsoftware läuft in einer DOS-Konsole unter Windows 98 und funktioniert ohne den Dongle nicht
- Nach der Übertragung des Disk-Images in einen Emulator zeigte die Analyse, dass in ausführbaren Dateien wie RPGC.EXE und SEU.EXE dieselbe Kopierschutz-Routine eingebettet ist
- Durch Assembler-Analyse wurde bestätigt, dass die Routine immer denselben Konstantenwert (7606h) zurückgibt; mit einem 4-Byte-Patch ließ sich die Dongle-Prüfung umgehen
- Dadurch kann der RPG-II-Compiler von Software West auch ohne Dongle ausgeführt werden – ein bedeutender Erfolg im Hinblick auf die Bewahrung klassischer Software
Uralte Buchhaltungssoftware und die Entdeckung des Dongles
- Eine 40 Jahre lang genutzte RPG-basierte Buchhaltungssoftware war noch immer auf einem Windows-98-PC im Einsatz
- RPG ist eine Sprache für Midrange-Computer wie IBM System/3, System/32 und AS/400 und wurde später auf MS-DOS portiert
- Das Programm verlangte beim Start einen Hardware-Dongle als Kopierschutz am Parallelport
- Auf dem Dongle waren noch schwach „Stamford, CT“ und das Logo von „Software Security Inc.“ zu erkennen
- Das Wort „RUNTIME“ war aufgedruckt; seine Bedeutung wurde erst später in der Analyse klar
Analyse des Disk-Images und Aufbau des RPG-Compilers
- Das Disk-Image des Windows-98-Systems wurde extrahiert und in einem Emulator ausgeführt
- Es wurden zwei Versionen des RPG-II-Compilers (von Software West Inc.) sowie der vollständige RPG-Quellcode der Buchhaltungssoftware gefunden
- Das System bestand aus mehreren RPG-Modulen und einem menübasierten System aus DOS-Batch-Dateien
- Der Compiler selbst führte die Dongle-Prüfung durch und fügte dieselbe Schutzroutine auch in die erzeugten ausführbaren Dateien ein
Reverse Engineering der Parallelport-Kommunikationsroutine
- SEU.EXE wurde mit dem Reko-Disassembler analysiert
- Zunächst waren keine
in-/out-Befehle zu sehen, sie wurden jedoch in einem anderen Segment (0800h) gefunden
- Die betreffende Routine liest die Parallelport-Adresse aus dem BIOS-Datenbereich und sendet bzw. empfängt Daten über den LPT1-Port
- Das Ergebnis wird im Register
BX gespeichert; es gibt keinen Eingabewert, und die Routine liefert immer dasselbe Ergebnis zurück
Herleitung des Konstantenwerts und Patch
- Am Ende der Routine wurde bestätigt, dass der Wert von
BH fest auf 76h gesetzt ist
- Nur der Wert von
BL blieb unbekannt; der Bereich 0–255 wurde per Brute Force durchsucht
- Die richtige Kombination war
BL=06h, also BX=7606h
- Die ersten 4 Bytes der Routine wurden durch
MOV BX,7606h und RETF ersetzt, um die Dongle-Prüfung zu umgehen
- Danach startete das Programm sofort, und dieselbe Änderung konnte auch auf andere ausführbare Dateien mit derselben Routine angewendet werden
Ergebnis und Bedeutung
- In allen Komponenten des RPG-II-Compilers wurde derselbe Kopierschutz-Code gefunden, sodass eine einheitliche Anpassung möglich war
- Der Dongle war so aufgebaut, dass er lediglich einen Konstantenwert zurückgibt und sich daher mit nur einem 4-Byte-Patch deaktivieren ließ
- Der modifizierte Compiler funktioniert auch ohne Dongle einwandfrei; nach Entfernung personenbezogener Daten soll er künftig als historisches Software-Archiv veröffentlicht werden
- Da zu Software West Inc. online kaum noch Materialien existieren, hofft der Autor auf weiteren Kontakt mit dem ursprünglichen Hersteller
Noch keine Kommentare.