Produktschlüssel?
Übersicht

CO2ehemals "SirMO"Betreff: Produktschlüssel? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Ich wollte mal rein aus interesse fragen, wie man einen Produktschlüssel für ein Programm macht. Er müsste sich ja bei jedem programm unterscheiden und er darf nicht extern im Spiel(unter)Ordner gespeichert werden. Außerdem müsste mindestens ich wissen wie er für die jeweilige exe lautet. mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Solche Schlüssel sind nicht Programm oder Datei spezifisch - die werden über einen Algorithmus generiert und man kann rückwärts testen, ob ein Schlüssel dazu passt. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mir würde da einfallen, dass man sich eine möglichst bei jedem Computer unterschiedliche Zahl sucht. Ich weiß nicht, was es da gibt, aber man könnte ja mal den Benutzernamen in eine Zahl umgewandelt nehmen. Jetzt muss es eine Rechnung geben, die diese Zahl umrechnet. Das Ergebnis ist dann der Produktschlüssel. Der Programmierer muss natürlich ein Programm haben, dass jede beliebige Zahl, die er vom Anwender bekommt, in einen Produktschlüssel umwandelt.
Dieses System müsste aber auch mit einer von Programm erstellten Zufallszahl gehen. Diese muss jedoch beim ersten Start festgelegt werden |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, ich verstehe was du meinst. Aber dann bräuchte man immernoch ne lib, die rausfindet, welcher User das Spiel benutzt/installiert.
mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke, dass es wie oben erwähnt, auch mit einer Zufallszahl funktionieren müsste. Nur muss diese nach der Programminstallation 1 mal festgelegt werden und dem Anwender natürlich angezeigt werden. | ||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab mal versucht das umzusetzen:
BlitzBasic: [AUSKLAPPEN] Function CreateKey$(anz_zeichen) So bringt der Key aber nicht viel, weil ihn nur der Nutzer sehen kann. Also wenn man mal spasseshalber davon ausgehen mag, das ich ein Programm verkaufen möchte, kann ich mit der Funktion nicht viel anfangen. mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Könnte über RSA funktionieren, indem in die programme der Public Key eingebaut wird, und zur lizenz-vergabe der Name des Benutzer (z.B. "Peter Müller") mit dem Private Key Verschlüsselt wird.
Zur Produkt-Aktivierung muss der nutzer nun seinen Namen, und den Aktivierungs-Code eingeben, welcher dem Verschlüsselten Namen entspricht. Wenn nun sein Name mit dem im Key verschlüsselten übereinstimmt, aktiviert sich die Software. Da kann man dann beliebig viele weitere Nutzerbezogene Daten einbauen, um es mehr "abzusichern". |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ja, aber dann fehlt ja immernoch die lib, die rausfindet, welche namen verschlüsselt werden müssen. | ||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Benutzer gibt ihn ein? | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe gerade mal so eine Funktion gebastelt:
Code: [AUSKLAPPEN] If ersterStart=0 Then
ersterStart=1 keyn=Rand(1000,9000) s=WriteFile "ich_bin_eine_nichtssagendes_Modell.b3d" WriteLine s,keyn CloseFile s Print "Diese Nummer bei der Registrierung angeben: "+keyn WaitKey() EndIf If keyeingabe=1 Then n=Input("Schlüssel eingeben: ") s=ReadFile("ich_bin_eine_nichtssagendes_Modell.b3d") keyn=ReadLine(s) CloseFile s If keyn*2=n Then ;;;Da müsste ein guter Verschlüsselungs Algorithmus hin Print "Registriert." Else Print "Falsch." EndIf WaitKey() EndIf Wobei die erste Funktion auch durch die Eigabe/das Herausfinden des Benutzernamens,... ersetzt werden kann. Der Code ist sicherlich noch ausbaufähig, er soll nur als Veranschaulichung dienen. |
||
Sterbendes Lüftlein |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Text entfernt | ||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich kann mich wage daran erinnern das ich irgenwo mal, ich glabe es war im code archiv, genau das gesehen habe was ihr sucht. Leider finde ich es nicht mehr...
aber du kannst dir mal das anschauen, hier werden daten mit md5 verschlüsselt, bzw. unter bb ein Fake md5?? realisiert. Das müsste wohl ziemlich allen sicherheitsstandars standhalten ![]() https://www.blitzforum.de/foru...hlight=md5 Siehe d2006 sein post.. Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Totensturm: Ich kann mich nicht erinnern, sowas geschrieben zu haben.
@CO2: Ich hätte es so in der Art umgesetzt: BlitzBasic: [AUSKLAPPEN] SeedRnd(MilliSecs()) Mit beliebigen Regeln und Schlüssellängen lässt sich die Wahrscheinlichkeit des erratens minimieren. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, danke | ||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
Sterbendes Lüftlein |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Text entfernt | ||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde das so machen. (Dabei müsstest du einen Server betreiben)
Beim Kauf deiner Software muss der Kunde seinen Namen angeben. Nun wird ein Schlüssel generiert und mit der Software dem Kunden übergeben. Der Name und der Schlüssel wird auf deinem Server abgelegt. Der Kunde installiert die Applikation, der Kunde gibt im Installer seinen Namen und den Lizenzschlüssel ein. Der Installer meldet sich beim Server und überträgt (selbstverständlich verschlüsselt!) die eingebenen Daten und Nun schaut der Server nach ob diese Daten gültig sind *. Wenn ja dann wird der eigentliche Installationsprozess ausgeführt. (Die Daten für den Installer sind natürlich alle sicher und unlesbar abgelegt) * Wenn du jetzt nur eine einmalige Installation willst, ist es ein einfaches beim Server auf dem eben angeschauten Datensatz ein Flag zu setzen, welches beim nächsten Abrufen die Lizenzierung verhindert Um zu verhindern das man nach der Installation die fertige Applikation einfach kopiert wird, könnte beim Lizenzierungsvorgang auf dem Server, der Server ein lizenz file anlegen, und eine kopie an den client versenden. Dieses lizenz file ist PC spezifisch (bestehen auf diversen parametern) und wird bei jedem start von dem programm überprüft. mfg |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Jo0oker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hatte mal so ein System entwicklet, was wie folgt funktionierte:
Jedes Symbol hatte einen bestimmten Wert: A = 90 B = 20 1 = 21 2 = 0,09 usw... Jetzt musste der Entwickler nur noch die Form der Rechnung festlegen, zum Beispiel: 1101-0100-1010 Diese "Regel" beudetet folgendes: 11 bedeutet, addier die beiden ersten Zahlen 10 bedeutet, subtrahier die beiden ersten Zahlen 01 bedeutet, multiplizier die beiden ersten zahlen 00 bedeutet, dividier die beiden ersten Zahlen Dieser Teil gilt IMMER für die ersten beiden Zahlen eines Blockes. Wenn man nun aber einfach bei einer Addition die zwei Zahlen umdrehen kann, dann würde das ganze ja garkein Sinn machen, außerdem muss noch das Ergebnis der Rechnung überprüft werden. Also nun zu dem Sinn der letzten beiden Zahlen eines Blockes: Wenn die letzte Zahl 0 ist, dann ist gemeint: Die Zahl *-1 soll das Ergbenis der ersten Rechnung sein. Wenn die Zahl 1 ist, dann wird einfach *1 genommen. Die vorletzte Zahl eines Blockes wird jeweils mit den verschiedenen Operatoren der einzelnen Blöcke zusammengerechnet und muss dann der Summe der addierten Ergbenisse des ersten Blockes entsprechen. Allerdings hat sich diese Methode nicht sonderlich bewehrt, zumal ich meine eigenen keys durch die Brute-Force-Methode ermittelt habe ![]() P.S.: Ich hoffe es ist verständlich... lg Jo0oker |
||
Tehadon, das kostenlose 3D RPG
www.tehadon.de http://www.blitzforum.de/worklogs/14/ Das Abenteuer wird beginnen! |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
ozzi789 hat Folgendes geschrieben: Der Kunde installiert die Applikation, der Kunde gibt im Installer seinen Namen und den Lizenzschlüssel ein.
Der Installer meldet sich beim Server und überträgt (selbstverständlich verschlüsselt!) die eingebenen Daten und Nun schaut der Server nach ob diese Daten gültig sind *. Wenn ja dann wird der eigentliche Installationsprozess ausgeführt. (Die Daten für den Installer sind natürlich alle sicher und unlesbar abgelegt Genau dieses Prinzip ließe sich auch mittels RSA Public/Private keys ohne einen Server und ohne nötige internet-verbindung realisieren. Hersteller verschlüsselt name+paar andere persönliche daten mit dem Private Key, Install Programm entschlüsselt mit dem Public Key, und guckt, ob das mit den im Installer eingegebenen Daten übereinstimmt. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group