Wie kann ich einen Produktschlüssel für meine C # -Anwendung erstellen?
Ich muss einen Produkt- (oder Lizenz-) Schlüssel erstellen, den ich jährlich aktualisiere. Zusätzlich muss ich eine für Testversionen erstellen.
Verbunden:
Wie kann ich einen Produktschlüssel für meine C # -Anwendung erstellen?
Ich muss einen Produkt- (oder Lizenz-) Schlüssel erstellen, den ich jährlich aktualisiere. Zusätzlich muss ich eine für Testversionen erstellen.
Verbunden:
Antworten:
Sie können beispielsweise einen Datensatz erstellen, der die Daten enthält, die Sie bei der Anwendung authentifizieren möchten. Dies kann alles umfassen, was Sie möchten - z. B. zu aktivierende Programmfunktionen, Ablaufdatum, Name des Benutzers (wenn Sie ihn an einen Benutzer binden möchten). Verschlüsseln Sie das dann mit einem Krypto-Algorithmus mit einem festen Schlüssel oder einem Hash. Dann überprüfen Sie es einfach in Ihrem Programm. Eine Möglichkeit, die Lizenzdatei (unter Windows) zu verteilen, besteht darin, sie als Datei bereitzustellen, die die Registrierung aktualisiert (ohne dass der Benutzer sie eingeben muss).
Achten Sie jedoch auf ein falsches Sicherheitsgefühl - früher oder später wird jemand einfach Ihr Programm patchen, um diese Prüfung zu überspringen und die gepatchte Version zu verteilen. Oder sie erarbeiten einen Schlüssel, der alle Prüfungen besteht und diese verteilt oder die Uhr zurückdatiert usw. Es spielt keine Rolle, wie kompliziert Sie Ihr Schema erstellen, alles, was Sie dafür tun, wird letztendlich Sicherheit durch Dunkelheit sein, und sie werden es immer tun dazu in der Lage sein. Auch wenn sie nicht können, wird und wird jemand die gehackte Version verbreiten. Gleiches gilt auch dann, wenn Sie einen Dongle liefern - wenn jemand möchte, kann er den Scheck auch dafür ausbessern. Das digitale Signieren Ihres Codes hilft nicht, sie können diese Signatur entfernen oder zurücktreten.
Sie können die Sache etwas komplizieren, indem Sie Techniken verwenden, um zu verhindern, dass das Programm in einem Debugger usw. ausgeführt wird, aber selbst dies ist nicht kugelsicher. Sie sollten es also nur so schwierig machen, dass ein ehrlicher Benutzer nicht vergisst, zu zahlen. Achten Sie auch darauf, dass Ihr System nicht für zahlende Benutzer aufdringlich wird. Es ist besser, einige Kopien abzureißen, als dass Ihre zahlenden Kunden nicht in der Lage sind, das zu verwenden, wofür sie bezahlt haben.
Eine weitere Option ist eine Online-Überprüfung. Geben Sie dem Benutzer einfach eine eindeutige ID, überprüfen Sie online, welche Funktionen diese ID haben sollte, und speichern Sie sie für einen bestimmten Zeitraum zwischen. Trotzdem gelten die gleichen Einschränkungen - Menschen können so etwas umgehen.
Berücksichtigen Sie auch die Supportkosten für Benutzer, die ihren Schlüssel vergessen haben usw.
edit: Ich möchte nur hinzufügen, investiere nicht zu viel Zeit in dieses oder denke, dass dein verschlungenes Schema irgendwie anders und unknackbar sein wird. Es wird nicht und kann nicht sein, solange die Leute die Hardware und das Betriebssystem steuern, auf dem Ihr Programm läuft. Entwickler haben versucht, immer komplexere Schemata dafür zu entwickeln, und dachten, wenn sie ihr eigenes System dafür entwickeln, wird es nur ihnen bekannt und daher "sicherer" sein. Aber es ist wirklich das Programmieräquivalent zum Versuch, eine Perpetual-Motion-Maschine zu bauen. :-)
Wem vertraust Du?
Ich habe diesen Bereich immer als zu kritisch angesehen, um einem Dritten zu vertrauen, der die Laufzeitsicherheit Ihrer Anwendung verwaltet. Sobald diese Komponente für eine Anwendung geknackt ist, wird sie für alle Anwendungen geknackt. Es passierte Discreet in fünf Minuten, als sie vor Jahren eine Drittanbieter- Lizenzlösung für 3ds Max entwickelten ... Gute Zeiten!
Im Ernst, erwägen Sie, Ihre eigenen zu rollen, um die vollständige Kontrolle über Ihren Algorithmus zu haben. Wenn Sie dies tun, sollten Sie Komponenten in Ihrem Schlüssel wie folgt verwenden:
Dann prüfe sie verdammt noch mal und füge die gewünschte (umkehrbare) Verschlüsselung hinzu, um das Knacken zu erschweren.
Um einen Testlizenzschlüssel zu erstellen, müssen Sie lediglich Werte für die oben genannten Werte festlegen, die als "Testmodus" übersetzt werden.
Und da dies jetzt wahrscheinlich der wichtigste Code in Ihrer Anwendung / Firma ist, sollten Sie zusätzlich zu / anstelle der Verschleierung die Entschlüsselungsroutinen in eine native DLL-Datei einfügen und diese einfach per P / Invoke aufrufen .
Mehrere Unternehmen, für die ich gearbeitet habe, haben mit großem Erfolg allgemeine Ansätze gewählt. Oder vielleicht waren die Produkte es nicht wert, geknackt zu werden;)
Wenn Sie nach den Schlüsseln fragen, die Sie eingeben können, z. B. Windows-Produktschlüssel, basieren diese auf einigen Überprüfungen. Wenn Sie über die Schlüssel sprechen, die Sie kopieren und einfügen müssen, basieren sie auf einer digitalen Signatur (private Schlüsselverschlüsselung).
Eine einfache Produktschlüssellogik könnte darin bestehen, zunächst zu sagen, dass der Produktschlüssel aus vier 5-stelligen Gruppen besteht abcde-fghij-kljmo-pqrst
, und dann interne Beziehungen anzugeben, wie f + k + p gleich a sein sollte, was die ersten Ziffern der 2 bedeutet , 3 und 4 Gruppe sollte insgesamt a. Dies bedeutet, dass 8xxxx-2xxxx-4xxxx-2xxxx gültig ist, ebenso 8xxxx-1xxxx-0xxxx-7xxxx. Natürlich würde es auch andere Beziehungen geben, einschließlich komplexer Beziehungen. Wenn die zweite Ziffer der ersten Gruppe ungerade ist, sollte auch die letzte Ziffer der letzten Gruppe ungerade sein. Auf diese Weise würde es Generatoren für Produktschlüssel geben, und die Überprüfung der Produktschlüssel würde einfach prüfen, ob sie allen Regeln entsprechen.
Verschlüsselung ist normalerweise die Informationsfolge über die Lizenz, die mit einem privaten Schlüssel (== digital signiert) verschlüsselt und in Base64 konvertiert wurde . Der öffentliche Schlüssel wird mit der Anwendung verteilt. Wenn die Base64-Zeichenfolge eintrifft, wird sie vom öffentlichen Schlüssel überprüft (== entschlüsselt), und wenn sie als gültig befunden wird, wird das Produkt aktiviert.
Ob es trivial oder schwer zu knacken ist, ich bin mir nicht sicher, ob es wirklich einen großen Unterschied macht.
Die Wahrscheinlichkeit, dass Ihre App geknackt wird, ist weitaus proportionaler zu ihrer Nützlichkeit als zur Stärke der Handhabung der Produktschlüssel.
Persönlich denke ich, dass es zwei Klassen von Benutzern gibt. Diejenigen, die bezahlen. Diejenigen, die es nicht tun. Diejenigen, die dies tun, werden dies wahrscheinlich selbst mit dem trivialsten Schutz tun. Diejenigen, die nicht auf einen Riss warten oder woanders suchen. In jedem Fall bringt es Ihnen kein Geld mehr.
Ich muss zugeben, dass ich etwas ziemlich Verrücktes tun würde.
Wenn sie den LicenseCheck finden und entfernen, wird der Spaß folgen, wenn die DLL mit Segmentierungsfehlern beginnt .
Es gibt auch die Option Microsoft Software Licensing and Protection (SLP) -Dienste. Nachdem ich darüber gelesen habe, wünschte ich mir wirklich, ich könnte es benutzen.
Ich mag die Idee wirklich, Teile des Codes basierend auf der Lizenz zu blockieren. Heißes Zeug und das sicherste für .NET. Interessante Lektüre, auch wenn Sie es nicht benutzen!
Microsoft® Software Licensing and Protection (SLP) Services ist ein Softwareaktivierungsdienst, mit dem unabhängige Softwareanbieter (ISVs) flexible Lizenzbedingungen für ihre Kunden festlegen können. Microsoft SLP Services verwendet eine einzigartige Schutzmethode, mit der Sie Ihre Anwendungs- und Lizenzinformationen schützen und schneller auf den Markt kommen und gleichzeitig die Kunden-Compliance verbessern können.
Hinweis: Nur so kann ich ein Produkt mit vertraulichem Code (z. B. einem wertvollen Algorithmus) veröffentlichen.
Wenn Sie eine einfache Lösung zum Erstellen und Überprüfen von Seriennummern suchen, versuchen Sie es mit Ellipter . Es verwendet Kryptografie mit elliptischen Kurven und verfügt über die Funktion "Ablaufdatum", mit der Sie Testversionen oder zeitlich begrenzte Registrierungsschlüssel erstellen können.
Ein weiteres gutes, kostengünstiges Tool für Produktschlüssel und Aktivierungen ist das Produkt InstallKey. Schauen Sie sich www.lomacons.com an
Eine einfache Methode ist die Verwendung einer GUID ( Globally Unique Identifier ). GUIDs werden normalerweise als 128-Bit-Werte gespeichert und üblicherweise als 32 hexadezimale Ziffern mit durch Bindestriche getrennten Gruppen angezeigt, z {21EC2020-3AEA-4069-A2DD-08002B30309D}
.
Verwenden Sie den folgenden Code in C # by System.Guid.NewGuid()
.
getKey = System.Guid.NewGuid().ToString().Substring(0, 8).ToUpper(); //Will generate a random 8 digit hexadecimal string.
_key = Convert.ToString(Regex.Replace(getKey, ".{4}", "$0/")); // And use this to separate every four digits with a "/".
Ich hoffe, es hilft.
Der Trick besteht darin, einen Algorithmus zu haben, den nur Sie kennen (so dass er am anderen Ende dekodiert werden kann).
Es gibt einfache Dinge wie: "Wähle eine Primzahl und füge eine magische Zahl hinzu"
Umfassendere Optionen wie die Verwendung einer asymmetrischen Verschlüsselung eines Satzes von Binärdaten (die eine eindeutige Kennung, Versionsnummern usw. enthalten können) und die Verteilung der verschlüsselten Daten als Schlüssel.
Könnte auch wert sein , die Antworten auf das Lesen dieser Frage als auch
Dafür stehen einige Tools und APIs zur Verfügung. Ich glaube jedoch nicht, dass Sie eine kostenlos finden werden;)
Es gibt zum Beispiel die OLicense-Suite: http://www.olicense.de/index.php?lang=de
Sie können LicenseSpot überprüfen . Es bietet:
Ich werde ein wenig auf die großartige Antwort von @ frankodwyer zurückgreifen und mich ein wenig eingehender mit der online-basierten Lizenzierung befassen. Ich bin der Gründer von Keygen , einer Lizenzierungs-REST-API, die für Entwickler entwickelt wurde.
Da Sie erwähnt haben, dass Sie zwei "Arten" von Lizenzen für Ihre Anwendung wünschen, dh eine "Vollversion" und eine "Testversion", können wir dies vereinfachen und ein Funktionslizenzmodell verwenden, in dem Sie bestimmte Funktionen Ihrer Anwendung lizenzieren (in diesem Fall: Es gibt einen "vollständigen" Funktionsumfang und einen "Test" -Featuresatz.
Um beginnen, wir 2 schaffen könnten Lizenztypen ( so genannte Richtlinien in Keygen) und immer dann , wenn ein Benutzer ein Konto registriert können Sie eine „trial“ Lizenz generieren für sie beginnen (die „Studie“ Lizenz implementiert unsere „trial“ -Feature Politik) , mit dem Sie verschiedene Überprüfungen innerhalb der App durchführen können, z. B. können Benutzer Trial-Feature-A und Trial-Feature-B verwenden .
Darauf aufbauend können Sie bei jedem Kauf Ihrer App durch einen Benutzer (unabhängig davon, ob Sie PayPal, Stripe usw. verwenden) eine Lizenz generieren, die die Richtlinie für "vollständige" Funktionen implementiert, und diese dem Benutzerkonto zuordnen . Jetzt können Sie in Ihrer App überprüfen, ob der Benutzer über eine "vollständige" Lizenz verfügt, die Pro-Feature-X und Pro-Feature-Y ausführen kann (indem Sie so etwas tun user.HasLicenseFor(FEATURE_POLICY_ID)
).
Ich erwähnte , so dass die Benutzer erstellen Benutzerkonten -Was ich damit meine ich? Ich habe in einigen anderen Antworten ausführlich darauf eingegangen , aber einen kurzen Überblick darüber, warum ich denke, dass dies eine hervorragende Möglichkeit ist, Ihre Benutzer zu authentifizieren und zu identifizieren:
Natürlich, wenn Sie nicht wollen , Benutzerkonten zu handhaben und Sie möchten Ihre Benutzer zur Eingabe von Lizenzschlüsseln, die (und Keygen völlig in Ordnung unterstützt das auch tun ). Ich biete nur einen anderen Weg an, um diesen Aspekt der Lizenzierung zu behandeln und Ihren Kunden hoffentlich eine nette UX bereitzustellen.
Da Sie auch erwähnt haben, dass Sie diese Lizenzen jährlich aktualisieren möchten, können Sie eine Dauer für Ihre Richtlinien festlegen , sodass "vollständige" Lizenzen nach einem Jahr ablaufen und "Test" -Lizenzen beispielsweise 2 Wochen dauern und Ihre Benutzer eine neue erwerben müssen Lizenz nach Ablauf.
Ich könnte mich mehr mit der Zuordnung von Maschinen zu Benutzern und ähnlichen Dingen befassen, aber ich dachte, ich würde versuchen, diese Antwort kurz zu halten und mich darauf zu konzentrieren, Funktionen einfach an Ihre Benutzer zu lizenzieren.
Bitte überprüfen Sie diese Antwort: https://stackoverflow.com/a/38598174/1275924
Die Idee ist, Cryptolens als Lizenzserver zu verwenden. Hier ist ein schrittweises Beispiel (in C # und VB.NET). Ich habe auch ein Code-Snippet zur Schlüsselüberprüfung angehängt (in C #):
var licenseKey = "GEBNC-WZZJD-VJIHG-GCMVD";
var RSAPubKey = "{enter the RSA Public key here}";
var auth = "{access token with permission to access the activate method}";
var result = Key.Activate(token: auth, parameters: new ActivateModel()
{
Key = licenseKey,
ProductId = 3349,
Sign = true,
MachineCode = Helpers.GetMachineCode()
});
if (result == null || result.Result == ResultType.Error ||
!result.LicenseKey.HasValidSignature(RSAPubKey).IsValid())
{
// an error occurred or the key is invalid or it cannot be activated
// (eg. the limit of activated devices was achieved)
Console.WriteLine("The license does not work.");
}
else
{
// everything went fine if we are here!
Console.WriteLine("The license is valid!");
}
Console.ReadLine();