Serial Key - Prüfung ob Software gekauft

beta20

Top Contributor
Hallo zusammen,

ich suche einen Weg meine Software zu schützen, sodass gewährleistet wird, dass die Software gekauft wurde. Also ob es
a) ein gültiger Lizenzschlüssel ist
b) der Lizenzschlüssel noch gültig ist

Hier ein paar Details zur Software:
- Meine Software wird direkt auf dem PC installiert.
- Die Software enthält eine Datenbank

Mein Lösungsansatz wäre folgender:
1. Kunde kauft Software im Internet
2. Kunde erhält eine Email mit einem automatisch und eindeutigen Serial Key. Der Serial Key wird in einer DB auf dem Webserver gespeichert.
Ebenfalls wird das createDate gespeichert (sodass man ev. später prüfen kann, ob die Lizenz noch gültig ist, z.B. nach einem Jahr)
3. Kunde gibt bei der Installation der Software auf seinem PC diesen Serial Key ein
4. Bei der Installation bzw. Prüfung ob Key stimmt, ist zwingend eine Internetverbindung erforderlich (sollte in der heutigen Zeit kein Problem mehr sein)
5. Der Serial Key wird nun geprüft. Hierzu wird eine Methode (Webservice) auf dem Webserver auf der auch das Programm vom Generieren des Keys aufgerufen und prüft nun ob es den Serial Key gibt.

Nun bin ich mir nicht sicher wie es weiter gehen soll, hier jedoch ein Ansatz:
6. Der Kunde erhält wiederum einen Code zurück, den er entweder bei sich nochmals eingeben muss oder direkt in die DB auf der Desktop Software gespeichert wird.
Dieser Code wird so erzeugt:
a) Auf dem Server gibt es einen privaten Key (den natürlich nur ich selbst weiß). Der Serial Key wird gehast mit dem privaten Key.
=> Vorteil von diesem zweiten Code ist, dass es schwieriger ist die Software zu hacken. Ich könnte eigentlich auch in der DB einfach true oder false setzen.

Der Nachteil ist aber natürlich:
Die Software wird mit samt Benutzername und Passwort für die DB ausgeliefert.
Hat nun jemand auch den zweiten Code, kann er natürlich in die DB gehen und in die entsprechende Tabelle diesen Code eintragen.

Allerdings:
Wie prüfe ich in der Software an sich selbst nochmal, ob der Code valide ist? Hier brauche ich ja dann in der nochmals eine Methode, die in der Desktop Software implementiert ist?
Also was ist, wenn jemand in der Tabelle in der DB, in der der zweite Code gespeichert wird, einen ausgedachten Code eingibt?
Denn im Mom prüfe ich ja dann nur, ob hier überhaupt ein Code drin steht.
Andernfalls müsste ich jedes Mal beim Starten des Programms via Internet abfragen, ob der Code valide ist (was ich nicht will)

Vielen Dank für jede Hilfe
 
Also Deine ganze Bemühungen sind gut und schön, aber es wird Dir sehr schwer fallen etwas zu schreiben, das eben nicht geknackt werden kann. Daher halte ich diese ganzen Mühen für relativ fruchtlos zumal Du damit ggf. zahlende Kunden vergraulst.

Wenn Du etwas mit Serial Key machen willst, der offline verifiziert werden kann, dann würde ich die empfehlen, Dir einmal die asynchrone Verschlüsselung anzusehen. Dann kannst Du mit einem private Key irgendwelche Daten vom Zielrechner nehmen und zusammen mit einem Usernamen verschlüsseln. Zur Kontrolle reicht dann der public key.
ABER:
- Woher nimmst du Werte, die den Rechner einwandfrei identifizieren?
- Wie willst Du verhindern, dass eine einmal freigeschaltete Version auf einer VM läuft, die dann problemlos kopiert werden könnte?
- Wie willst Du sicher stellen, dass Nutzer nicht schlicht von diesen Kontrollen zu genervt sind, dass sie nicht zu einem Konkurenzprodukt greifen? (Da Du hier schon fragst nach Möglichkeiten wird da bestimmt nichts professionelles wie z.B. bei Microsoft rauskommen mit kostenlosen Hotlines in sehr vielen Ländern ...)

Dann evtl. lieber die "immer Online" Methode - dann musst du "nur" einen Server bereit stellen, der dann von der Software kontaktiert wurde. Kann immer noch alles gehackt werden und so, aber da hättest Du dann mehr Kontrolle. Aber was willst Du wie erlauben? Wie oft darf ich als Kunde meinen Rechner neu aufbauen um dann das Produkt erneut zu registrieren?

Ein wichtiger Punkt ist dann noch, dass Java Compilate relativ gut decompilierbar sind. Damit ein cracken Deiner Software auch nicht zu schwer.

Sorry, selbst Software wie AutoCAD, die wirklich viel Gehirnschmalz reinstecken und Dongles (also eine physikalische Kontrolle) verwenden, wird ständig geknackt. Das sei mir bitte wirklich die Frage erlaubt, was Du hier erwartest, schreiben zu können, das sich wirklich lohnt ...

Wenn Du sowas brauchst, dann kannst Du aber auch erst einmal ansehen, was andere da bisher so gebaut haben. Da gibt es auch fertige Produkte. License4J habe ich z.B. direkt einmal gefunden. Aber wie an meiner Antwort leicht zu erkennen ist: Ich halte davon nicht ganz so viel.

Konrad
 

Zurück
Oben