• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Lizenzschlüsselgenerator

KayHH

Gast
Moin apfeltalker,

ich möchte in ein Programm eine Seriennummernüberprüfung einbauen. Dazu möchte ich eine beliebige Anzahl von Seriennummern (Lizenzschlüsseln) generieren können. Die Software muss dann in der Lage sein selbstständig und offline die Gültigkeit des eingegebenen Schlüssels überprüfen zu können.

Gibt es dafür eine offene Lösung, am besten natürlich in Objectiv-C, oder als Library zum dazulinken?


KayHH
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
Wenn es sowas als offene Bibliothek gäbe, könnte jeder der einen (nicht käuflich erworbenen) Lizenzschlüssel haben möchte, einfach selbst einen generieren… o_O Wohl nicht ganz im Sinne des Erfinders, also in dem Fall Dir.
Grundlegende Algorithmen sollten sich im Netz aber finden lassen. (zB mit einem Salt und einem Hash aus dem Benutzernamen sollte sich sowas machen lassen.)
Gruß Pepi
 

Peter Maurer

Pommerscher Krummstiel
Registriert
16.03.04
Beiträge
3.077
Kagi z.B. hat so einen offenen Mechanismus. Nennt sich Generic ACG und ist nicht besonders sicher, dafuer aber leicht in bestehende Programme einzubauen; und Unhackbarkeit ist in Bezug auf Seriennummern eh ueberbewertet. :D
 

KayHH

Gast
Wenn es sowas als offene Bibliothek gäbe, könnte jeder der einen (nicht käuflich erworbenen) Lizenzschlüssel haben möchte, einfach selbst einen generieren… o_O Wohl nicht ganz im Sinne des Erfinders, also in dem Fall Dir.
Wenn das so wäre, wären OpenSource Kryptoverfahren ja unsicher, was sie aber nicht sind. Es geht ja nur um den Algorithmus. Auf welcher Basis ich dann den Schlüssel generiere ist ja noch mal was ganz anderes.


KayHH
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Wenn es sowas als offene Bibliothek gäbe, könnte jeder der einen (nicht käuflich erworbenen) Lizenzschlüssel haben möchte, einfach selbst einen generieren… o_O Wohl nicht ganz im Sinne des Erfinders, also in dem Fall Dir.
Grundlegende Algorithmen sollten sich im Netz aber finden lassen. (zB mit einem Salt und einem Hash aus dem Benutzernamen sollte sich sowas machen lassen.)
Gruß Pepi
Dass du einen Schlüssel generieren kannst, bedeutet nicht, dass die Software ihn akzeptiert. Das ist der umgekehrte Fall und wenn das Verfahren asymetrisch ist …

Das klassische Bild: Wenn man eine Maschine zur Wohnungsschlüsselherstellung hat, kannst du damit noch lange nicht bei deinem Nachbarn einbrechen.

AquaticPrime wird gerne genommen. McDan, der es ebenfalls verwendet, weist aber darauf hin, dass einen Hack für das öffentliche Framework gibt, so dass man es fest in sein Binary hinein linken sollte.
 

KayHH

Gast
Moin moin,

prima, das (OpenSSL und AquaticPrime) schau ich mir mal an.


KayHH
 

GoaSkin

Gast
Das Prinzip von solchen Verschlüsselungs-Algorithmen ist die Nutzung von Schlüssel-Paaren durch den Einsatz von nicht umkehrbaren mathematischen Funktionen.

Das heisst, daß die Daten mit einer mathematischen Funktion verschlüsselt werden (für die es keine Umkehrfunktion geben darf!!!) aber diese mit Hilfe einer ganz anderen Funktion wieder in den Originalzustand konvertiert werden. Auf diesem Prinzip funktionieren sämtliche Kryptoverfahren.

Der Haken an der Sache ist, daß es sich hier bei um sehr hohe Mathematik handelt, die kaum jemand beherrscht, wenn er nicht gerade Mathematik studiert hat. Eine nicht umkehrbare Funktion zu entdecken ist schon eine schwierige Sache, aber dann noch eine andere, die aus Y wieder X werden lässt...

Eine weitere Problematik ist, daß ja das Programm der CPU Instruktionen gibt, die letzendlich nichts anderes sind, als maschinenfreundliche Befehle, die das bewirken, was die Befehle einer Hochsprache aussagen sollen. Man programmiert letzendlich immer in Assembler. Die ganzen Befehle, die man in Sprachen wie C oder Basic verwendet stammen letzendlich aus Bibliotheken und Headern, die den Assembler-Code für die ganzen Funktionen bereit halten. Da sich sehr viele Lowlevel-Funktionen dafür im Kernel, der Standard-Bibliothek und den Gerätetreibern befinden, wird man im Assembler-Code eines Programmes auch nur die entsprechenden Funktionsaufrufe finden statt Lowlevel-Code, der das lesen eines disassemblierten Codes erschwert. Fast alle Programme lassen sich mit dem otool-Befehl disassemblieren und der daraus erzeugte Text häufig fast so einfach nachvollziehen, wie der Quellcode des Programmes. Sämtliche Verschlüsselungstools erschweren nur das Disassemblieren des Programmes, sind aber grundsätzlich knackbar und müssen dies auch sein. Die CPU kann mit verspulten Bytefolgen nichts anfangen, worum es eine Funktion geben muß, die das Programm interpretierbar macht. Dadurch verrät jedes Programm selbst, wie es zu hacken ist. Für fast alle kommerziellen Kopierschutz-Systeme gibt es Tools, die aus dem verschlüsselten Binary eine unverschlüsselte Variante erzeugen können - früher oder später - die Hacker sind meist nur wenige Wochen hinterher.

Beim Netzwerkverkehr lassen sich die Datenströme deshalb sicher verschlüsseln, weil die Information, wie der Code codiert oder decodiert werden muß nicht durchs Netz wandern muß. Die Daten, die erklären wie verschlüsselt wird befinden sich auf Server und Klient und müssen nicht übertragen werden. Die Kommunikation basiert darauf, daß jedes Gerät dem anderen einen Schlüssel überträgt, mit dem die Daten verschlüsselt werden soll und keines von den Geräten mitbekommt, wie das andere diese wieder entschlüsseln möchte.

Was Software betrifft gibt es nur eine sichere Methode: Hardware-Dongles. Das Prinzip ist, daß durch den Einsatz des Dongles das Programm nicht mehr sich selbst erklären muß, wie sein Code in brauchbare Instruktionen zu konvertieren ist, sondern sich der Schlüssel in einem USB-Stick befindet und für den Rechner nicht abrufbar ist. Die Binärdaten des Programmes werden dabei durch den Stick geschleusst, der einfach andere Daten ausspuckt, die dann die CPU interpretieren kann. Solche Sticks sind ab ca. 50 Euro zu haben, sodaß eine Lizenz eines Programmes dann auch den entsprechenden Preis haben müsste, damit sich dies lohnt. In der Regel wird ein solcher Kopierschutz bei Programmen eingesetzt, die 1000 Euro oder mehr kosten.

Jeder Programmierer sollt sich darüber bewusst sein, daß im Software-Bereich nicht alles zu Geld zu machen ist. Die Bereitschaft eines Anwenders, für Software zu zahlen ist gering. Open Source ist eine gute und legale Alternative zu Raubkopien und die freie Software gewinnt immer mehr an Qualität. Die freie Software lässt qualitativ heutzutage schon so einige kommerzielle Alternativen im Wald stehen. Es wird eine Frage der Zeit sein, bis es nur noch für spezielle Einsatzgebiete einen Bedarf an kommerziellen Applikationen gibt. Maßnahmen zum Schutz von geistigem Eigentum, Verschärfungen des Urheberrechts und ausgeklügelterer Kopierschutz werden diesen Prozess beschleunigen.
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Der Haken an der Sache ist, daß es sich hier bei um sehr hohe Mathematik handelt, die kaum jemand beherrscht, wenn er nicht gerade Mathematik studiert hat. Eine nicht umkehrbare Funktion zu entdecken ist schon eine schwierige Sache, aber dann noch eine andere, die aus Y wieder X werden lässt...
Hmmm, also ich kenne eine einfache "nicht umkehrbare" (wohl gemeint: nicht eindeutig umkehrbare) Funktion:
f(x) = x^2
Die lernt man irgendwann in der siebenten (?) Klasse.

Eine "nicht umkehrbare" Funktion kann auch nie "aus Y wieder X werden" lassen. Dann wäre sie ja umkehrbar. Eine nicht eindeutig umkehrbare (bijektive) Funktion bietet in der Tat nicht die Möglichkeit, y wieder eindeutig auf x abzubilden, sie ist also nicht surjektiv. Aber im obigen Beispiel findet man ziemlich leicht eine Funktion, die y wieder auf x abbildet:
g(x)=sqr(|x|)
 

GoaSkin

Gast
Letzendlich reicht ja die einzelne nicht umkehrbare Funktion nicht aus sondern es ist eine andere Funktion notwendig, die Y wieder zu X macht.

Aber wie dem auch sei... die Dev Tools unter OSX verschlüsseln sowieso keine Binaries. Dazu sind Tools nötig, die das fertige Kompilat so verschlüsseln, das mit keinem Debugger-Porgramm mehr nachvollziehbar ist, sie die Symbole heissen und ebensowenig mit einem Debugger Assembler-Befehle anhand der Binärdatei ausgegeben werden können. Ein Debugger kann dann zwar während dem Ausführen die Anweisungen ausgeben, jedoch lässt sich daran der Aufbau des vollständigen Programmes nicht mehr nachvollziehen.

Was dazu notwendig ist kostet ein Vermögen und sichert die Programme nur für sehr begrenzte Zeit. Früher oder später findet jemand heraus, was die Verschlüsselungs-Tools machen und es kursieren Entschlüsselungsprogramme im Netz. Für populäre Systeme wie Safedisk oder SecuROM gibt es haufenweise Tools. Immer nur die neueste Version des Kopierschutzes ist für begrenzte Zeit sicher.

Vielleicht hat man auch mehr davon, Raubkopierer einfach zu ver**schen, in dem man fehlerhafte Versionen des Programmes in Tauschbörsen stellt und sich zusätzlich falsche Serials ausdenkt, nach deren Eingabe das Programm zerschossen statt freigeschaltet wird. Das muß immer so gemacht sein, daß es für den Kopierer nicht sofort offensichtlich ist und das Programm wieder herunterwirft, weil es nichts taugt.

Als Logic Audio noch von Emagic angeboten wurde, wurde das Programm vor allem deshalb lange nicht gecrackt, weil die Leute glaubten, daß es schon einen Crack gäbe. Was im Netz lag, hatte allerdings zwar keinen Kopierschutz, dafür aber gelegentlich einen Stolpertakt bei der Wiedergabe. Bis dies auffällt, dauert es aber somit ist dennoch sichergestellt, daß das Programm in dieser Version nicht zu gebrauchen ist.