Produktschlüssel?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: Produktschlüssel?

BeitragMo, Dez 20, 2010 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Xeres

Moderator

BeitragMo, Dez 20, 2010 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Johannes´

BeitragMo, Dez 20, 2010 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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
 

CO2

ehemals "SirMO"

BeitragMo, Dez 20, 2010 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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´

BeitragMo, Dez 20, 2010 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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.
 

CO2

ehemals "SirMO"

BeitragMo, Dez 20, 2010 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mal versucht das umzusetzen:

BlitzBasic: [AUSKLAPPEN]
Function CreateKey$(anz_zeichen)

;Schlüssel wählen
Local key$ = ""

For x = 1 To anz_zeichen
Local auswahl = Rand(0, 1)
If auswahl = 0 Then
Local zahl = Rand(0, 9)
key = key + zahl
Else
Local buchstabe$ = Rand(65, 90)
key = key + Chr(buchstabe)
EndIf
Next
;schlüssel gewählt

;schlüssel aufschreiben (das hier muss noch soweit umgeschrieben werden, das nur ich den Key sehen kann, also das er mir quasi zugesendet wird, ohne das der nutzer was davon mitkriegt)
Local schreiben = WriteFile("Produktschlüssel.txt")

WriteLine schreiben, key

CloseFile schreiben
;schlüssel aufgeschrieben

Return key

End Function

Local produktschuesselfile = OpenFile("data\DoNotDelete.txt")

If produktschuesselfile = 0 Then

Local key$ = CreateKey(10)

Print "Produktschlüssel (enthalten in 'Produktschlüssel.txt')"
Local usereingabekey$ = Input("")

If usereingabekey <> key Then

RuntimeError "Falscher Key!"

Else

Local donotdelete = WriteFile("data\DoNotDelete.txt")
CloseFile donotdelete

EndIf

EndIf

CloseFile produktschuesselfile


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

BeitragMo, Dez 20, 2010 21:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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".
 

CO2

ehemals "SirMO"

BeitragMo, Dez 20, 2010 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Dez 20, 2010 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Benutzer gibt ihn ein?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Johannes´

BeitragMo, Dez 20, 2010 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Dez 20, 2010 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

Dottakopf

BeitragDi, Dez 21, 2010 0:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Cool

https://www.blitzforum.de/foru...hlight=md5

Siehe d2006 sein post..


Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Xeres

Moderator

BeitragDi, Dez 21, 2010 0:57
Antworten mit Zitat
Benutzer-Profile anzeigen
@Totensturm: Ich kann mich nicht erinnern, sowas geschrieben zu haben.

@CO2: Ich hätte es so in der Art umgesetzt:

BlitzBasic: [AUSKLAPPEN]
SeedRnd(MilliSecs())

Print("Mögliche Schlüssel:")
Print(CreateKey$())
Print(CreateKey$())
Print(CreateKey$())

Local t$=Input("Teste einen Schlüssel: >")
TestKey(t)

WaitKey()
End


Function CreateKey$()
Local key$
key = key + Chr(Rand(65, 67)) ;* A,B,C
key = key + Rand(10, 49) ;* Zwei stellen < 50
key = key + "-" ;*** Abschnitt-Ende
key = key + Chr(Rand(73, 75)) ;** I,J,K
key = key + Rand(51, 99) ;* Zwei stellen > 50
Return key
End Function

Function TestKey(key$)
key = Upper(key)
;*** Schlüssel zerschnibbeln:
Local a=Asc(Mid(key, 1, 1))
Local b=Mid(key, 2, 2)
Local c=Asc(Mid(key, 5, 1))
Local d=Mid(key, 6, 2)

;*** Der Key muss den Regeln aus CreateKey gehorchen:
If a=>65 And a =< 67 Then
If b => 10 And b=< 49 Then
If c=>73 And c =< 75 Then
If d => 51 And d=< 99 Then
Print("Key Gültig!")
Return
EndIf
EndIf
EndIf
EndIf
Print("Key ungültig!")

End Function


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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

CO2

ehemals "SirMO"

BeitragDi, Dez 21, 2010 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Dez 21, 2010 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

ozzi789

BeitragMi, Dez 22, 2010 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Dez 22, 2010 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

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

BeitragMi, Dez 22, 2010 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group