Andreas Pflug: Selbst ein sicheren USB-Lizenzstick machen

Beitrag lesen

Grundsätzlich ist zu sagen, dass man eine Software nie ganz "sicher" bekommt, selbst mit Hardware-Dongles wird es immer einen Workaround geben. Irgenwann stellt sich nur die Frage nach dem Zeitaufwand (sowohl für den Anbieter als auch für den potentiellen Cracker).

Natürlich kann man Dateien auf einem regulären Dateisystem einfach kopieren. Man könnte daher versuchen, eine Seriennummer vom USB-Stick oder dessen Dateisystem zu lesen (siehe z. B. hier); wenn der Anwender das weiß, kann er diese bei einem neuen USB-Stick aber auch selbst einstellen.

Mehr Aufwand wäre es, eine Partition auf dem USB-Stick mit einem "eigenen proprietären Dateisystem" anzulegen, das im Betriebssystem zunächst als fehlerhafte Partition erscheint und mit speziellen Routinen vom Programm aus abgefragt wird. Das ganze ist dann natürlich schon aufwändiger, ich weiß nicht, ob z. B. kommerzielle Dongle-Hersteller das so machen. Alternativ könnte man auch versuchen, die Daten im Dateisystem auf spezielle Weise anzuordnen (Lage der 'inodes', Fragmentierung etc.), da diese Informationen beim Kopieren verlorengehen (es sei denn, der Kunde kennt 'dd'...).

Abfragen im Programm a la "if (md5sum(schluessel)!=ABCDEF) { exit(1); }" nützen wenig, da diese im Disassembler leicht mit einem "Bypass" versehen werden können (es reicht, an entsprechender Stelle das "jne" durch "je" zu ersetzen). Besser ist es, bestimmte intern im Programm benötigte Zahlenwerte (z. B. Befehlscodes, wichtige Konstanten etc.) irgendwie aus dem Schlüssel zu "berechnen". Wenn der Schlüssel falsch ist, werden trotzdem irgendwelche anderen Werte "berechnet", mit denen das Programm dann nicht funktioniert. In diesem Fall muss sich der Anwender zumindest mehr Zeit nehmen und sich mit der internen Funktionsweise des Programms auseinandersetzen, aber auch das lässt sich natürlich letztendlich knacken...

Viele Grüße

Andreas