1 Punkte von GN⁺ 2026-02-02 | Noch keine Kommentare. | Auf WhatsApp teilen
  • 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.

Noch keine Kommentare.