Einen 40 Jahre alten Kopierschutz-Dongle aushebeln
(dmitrybrant.com)- 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
BXgespeichert; es gibt keinen Eingabewert, und die Routine liefert immer dasselbe Ergebnis zurück
- Zunächst waren keine
Herleitung des Konstantenwerts und Patch
- Am Ende der Routine wurde bestätigt, dass der Wert von
BHfest auf 76h gesetzt ist- Nur der Wert von
BLblieb unbekannt; der Bereich 0–255 wurde per Brute Force durchsucht - Die richtige Kombination war
BL=06h, also BX=7606h
- Nur der Wert von
- Die ersten 4 Bytes der Routine wurden durch
MOV BX,7606hundRETFersetzt, 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
1 Kommentare
Hacker-News-Kommentare
Frühere Software-Schutzmechanismen waren wirklich extrem simpel
Ich hatte einmal eine Windows-3.11-Upgrade-Diskette, deren Installer fehlschlug, wenn keine frühere Version installiert war.
Die Lösung war einfach, eine leere Textdatei zu erstellen und sie als
win.comzu speichern. Der Installer scannte die ganze Festplatte und suchte nur nach dieser Datei.Tatsächlich enthielt die Upgrade-Diskette die vollständige Installation. Damals war wirklich alles sehr simpel.
Am Ende besorgten wir uns von einem Freund eine 3.x-Version und installierten damit — ich fand das moralisch vertretbar, weil es nicht der Werbung entsprach.
Ein Foto des Produkts gibt es in diesem eBay-Link.
Ich entwickle Software für das Bauingenieurwesen (mes100.com).
Es gibt noch heute Nutzer, die Hardware-Dongles bevorzugen. Sie fühlen sich wohler, wenn sie ein physisches Gerät in der Hand haben.
Da wir unbefristete Lizenzen verkaufen, ist es problematisch, wenn ein Dongle kaputtgeht und es keine Ersatzteile mehr gibt. Cloud-Lizenzen mögen sie nicht, aber sie ermöglichen umsatz auf Abonnementbasis.
Trotzdem kursieren gecrackte Versionen online, egal wie sehr man sich bemüht. Uns fehlen die Mittel für rechtliche Schritte, daher ist Schutz unverzichtbar.
Andere mögen einfach die Autonomie, nicht von Servern Dritter abhängig zu sein.
Deshalb ist das SaaS-Modell für Nutzer fast ein Desaster. Ich mag Raubkopien nicht, aber SaaS mag ich genauso wenig.
Früher waren Cracks viel einfacher.
Oft reichte es, einfach JE oder JNE in JMP zu ändern, um den Schutz zu umgehen.
Der entscheidende Punkt war, herauszufinden, wo der Schutzcode sitzt und wie er funktioniert.
Erstens arbeiten Entwickler viel länger mit dem Code als wir, daher machen zu komplexe Schutzmechanismen Bugfixes schwieriger.
Zweitens muss ein Hacker nur ein paar Tricks kennen, während der Entwickler alle diese Tricks abwehren muss.
Drittens ist Schutzfunktionalität eine undankbare Aufgabe, die keinen Ruhm bringt, daher fehlt oft die Motivation.
Ich gab ihn ein und die Software wurde sofort aktiviert. Später habe ich sie dann regulär gekauft.
Die Diskette wurde per Laser signiert, aber selbst ein Teenager, der Assembler lesen konnte, konnte das leicht umgehen.
Man konnte sie sogar kopieren, indem man die Diskette einfach mit einer Nadel ankratzte. Am Ende war das ein Fall, in dem Marketing der Technik voraus war.
In den 80ern schrieb ich RPG-II-Code und half in den 90ern bei der Migration in eine S/36-Emulationsumgebung.
Wir nutzten ein Produkt der Firma California Software Products, und es funktionierte ziemlich gut, sodass das Unternehmen bis zur Rente des Gründers weiterbestand.
Zur Aussage „Ist dieser Kopierschutz nicht viel zu simpel?“: Ich denke, für die damalige Zeit war das angemessenes Engineering.
Mit Emulatoren und Decompilern ließ sich das vielleicht in ein paar Tagen lösen, aber damals gab es oft nicht einmal solche Werkzeuge.
90 % der Software aus dieser Zeit waren wirklich so simpel. Es ist nicht so, dass man etwas Komplexeres übersehen hätte.
Als Kind habe ich einmal ein Ultima-Spiel gecrackt.
Ich wollte nicht ständig wieder die Floppy einlegen müssen. Der Code entschlüsselte sich selbst und las die Startadresse aus einem bestimmten Sektor der Diskette.
Dieser Sektor ließ sich mit normalen Kopiertools nicht duplizieren, aber ich löste das Problem, indem ich den Header der ausführbaren Datei änderte.
Anfang der 90er wartete ich ein selbst entwickeltes Lizenzverlängerungssystem der Zentrale einer Franchise-Kette.
Es musste jeden Monat per Floppy erneuert werden, und die Zentrale sperrte mitunter nach Belieben Filialen, die ihr nicht gefielen.
Schließlich schlossen sich mehrere Filialen zusammen und klagten, und ich erstellte einen DOS-basierten Lizenzgenerator, damit jede Filiale telefonisch einen Code bekommen und ihre Lizenz verlängern konnte.
Nach Ende des Prozesses verteilte ich einen Patch, der die Lizenzprüfung vollständig entfernte. Irgendwann möchte ich das in DOSBox noch einmal laufen lassen.
Es war interessant zu lesen, dass Windows 95 noch immer produktiv eingesetzt wird.
Anders als bei den schillernden AI-Trends verläuft technologischer Wandel in den langweiligen Bereichen der Industrie nur langsam.
Es gibt sogar noch Systeme, die in einem PDP-11-Emulator laufen.
Beeindruckend ist, dass diese Software und Hardware in manchen Unternehmen noch immer im Einsatz sind.
Deshalb könnte die Veröffentlichung einer gecrackten Version ein rechtliches Risiko darstellen.
Unternehmen zahlen viel Geld, um alte Systeme am Laufen zu halten, und so bleibt diese Vendor-Lock-in-Situation bestehen.
Falls Patente oder geistige Eigentumsrechte noch gültig sind, sollte man das vor einer Veröffentlichung unbedingt prüfen.
Ein Hardware-Dongle, der einfach nur eine feste Zahl zurückgibt — das ist wirklich ein sehr einfacher Schutzmechanismus.
Aber damals reichte das eben aus. Selbst heutige Unternehmenssoftware nutzt oft kaum mehr als Lizenzschlüssel.
Im Grunde war das die 80er-Jahre-Version des Konzepts: „Wenn es signalisiert, dass eine Rechnung existiert, wird schon bezahlt.“