Frage

Wie kann ich einen Produktschlüssel für meine C # Anwendung erstellen?

Ich brauche ein Produkt (oder Lizenz) Schlüssel zu erstellen, die ich jährlich aktualisieren. Außerdem brauche ich eine für Testversionen erstellen.

  

Siehe auch:

     
War es hilfreich?

Lösung

Sie können etwas tun, erstellen wie eine Aufzeichnung, die die Daten, die Sie an die Anwendung authentifizieren möchten enthält. Dies könnte alles, was Sie aufnehmen möchten - zum Beispiel Programmfunktionen Ablaufdatum, Name des Benutzers (wenn Sie es an einen Benutzer gebunden werden soll) ermöglichen. Dann verschlüsseln, dass einige Krypto-Algorithmus mit einem festen Schlüssel, oder es hash. Dann überprüfen Sie es einfach in Ihrem Programm. Eine Möglichkeit, die Lizenzdatei (unter Windows) zu verteilen, ist es als eine Datei zu schaffen, die die Registrierung aktualisiert (spart den Anwender mit, es geben).

Vorsicht vor falschen Gefühl der Sicherheit, obwohl - früher oder später wird jemand einfach Ihr Programm patchen, dass der Check zu überspringen, und die gepatchte Version verteilen. Oder werden sie einen Schlüssel erarbeiten, die alle Prüfungen besteht und verteilen das, oder die Uhr rückdatieren usw. Es spielt keine Rolle, wie verworren Sie Ihr Schema zu machen, alles, was Sie dafür tun wird letztlich Sicherheit durch Unklarheit sein und sie werden immer der Lage sein, dies. Auch wenn sie es nicht können jemand will, und die gehackte Version verteilen. Gleiches gilt auch, wenn Sie einen Dongle liefern - wenn jemand will, kann sie die Prüfung für das patchen aus. Digital Code Unterzeichnung wird nicht helfen, sie können diese Signatur entfernen oder sie zurücktreten.

Sie können Dinge ein wenig komplizierter durch Techniken unter Verwendung des Programms läuft in einem Debugger usw. zu verhindern, aber auch das ist nicht kugelsicher. So sollten Sie es einfach genug schwierig machen, dass ein ehrlicher Benutzer nicht zu zahlen vergessen. Auch sehr vorsichtig sein, dass Ihr Schema nicht aufdringliche nicht wird für die Nutzer zahlen -. Es ist besser, ein paar abgezockt Kopien zu haben, als für die zahlenden Kunden nicht in der Lage sein zu verwenden, was sie bezahlt haben

Eine weitere Möglichkeit ist es, eine Online-Prüfung zu haben - nur um dem Benutzer eine eindeutige ID zur Verfügung stellen, und schauen Sie sich online, was Fähigkeiten, die ID haben sollte, und cachen es für einen gewissen Zeitraum. Alle die gleichen Einschränkungen gelten aber - Leute um so etwas bekommen

.

Beachten Sie auch die Support-Kosten zu haben mit den Nutzern zu beschäftigen, die ihren Schlüssel vergessen haben, etc.

edit: Ich möchte nur hinzufügen, nicht zu viel Zeit in diese investieren oder denken, dass irgendwie Ihre gewundenen Schema anders und uncrackable sein wird. Es wird nicht und kann nicht sein, solange Menschen die Hardware und OS Ihr Programm läuft steuern auf. Die Entwickler haben versucht, mit immer komplexeren Systemen dafür zu kommen, denken, dass, wenn sie dafür ihr eigenes System zu entwickeln, dann wird es nur, um sie und ‚sicherer‘ deshalb bekannt sein. Aber es ist wirklich die Programmierung äquivalent zu versuchen, ein Perpetuum Mobile zu bauen. : -)

Andere Tipps

Wer vertrauen Sie?

Ich habe immer in diesem Bereich zu kritisch betrachtet einem Dritten zu vertrauen, die Laufzeit Sicherheit Ihrer Anwendung zu verwalten. Sobald diese Komponente für eine Anwendung geknackt wird, ist es für alle Anwendungen geknackt. Es geschah an Diskreter in fünf Minuten, nachdem sie mit einer Dritt Lizenz-Lösung gingen für 3ds Max Jahre ... Gute Zeiten!

Im Ernst, betrachten Sie Ihre eigene für eine lückenlose Kontrolle über Ihren Algorithmus rollen. Wenn Sie das tun, sollten Sie unter Verwendung von Komponenten in Ihrem Schlüssel entlang der Linien von:

  • Lizenzname - der Name des Client (falls vorhanden) Sie Lizenzierung. Nützliche Unternehmen Implementierungen für die Verwaltung -. Machen sie besonders fühlen einen „personalisiert“ Namen in den Lizenzinformationen Sie sie liefern haben
  • Datum vor Ablauf der Lizenz
  • Die Anzahl der Benutzer unter derselben Lizenz laufen. Dies setzt voraus, Sie haben einen Weg über eine Website laufende Instanzen von Tracking, in einer Server-ish Art und Weise
  • Kartiercodes - lassen Sie das gleiche Lizenzierungssystem über mehrere Funktionen zu nutzen, und über mehrere Produkte hinweg. Natürlich, wenn es für alle geknackt es für ein Produkt geknackt.

Dann Prüfsumme die Hölle aus ihnen heraus und fügen Sie was auch immer (umkehrbar) Verschlüsselung Sie wollen, dass es es schwieriger zu knacken.

Um eine Test-Lizenz zu machen, haben einfach die gewünschten Werte für die obigen Werte, die als „Testmodus“.

übersetzen

Und da dies bin jetzt wahrscheinlich der wichtigste Code in Ihrer Anwendung / Firma, auf den / anstelle von Verschleierungs betrachtet in einer nativen DLL-Datei mit den Entschlüsselungs-Routinen setzen und einfach P / Invoke es.

Mehrere Unternehmen, die ich gearbeitet habe haben dafür mit großem Erfolg verallgemeinert Ansätze angenommen. Oder vielleicht waren die Produkte nicht wert Knacken;)

Wenn Sie über die Schlüssel fragen, die Sie eingeben können, wie Windows Produktschlüssel, dann werden sie auf einigen Prüfungen basieren. Wenn Sie über die Tasten sprechen, die Sie Paste kopieren, dann werden sie auf der Grundlage einer digitial Signatur (Private-Key-Verschlüsselung).

Eine einfache Produktschlüssel Logik könnte sagen zu starten sein, dass der Produktschlüssel von vier 5-stelligen Gruppen besteht, wie abcde-fghij-kljmo-pqrst, und dann interne Beziehungen wie f angeben, geht auf + k + p sollte gleich, was bedeutet, die ersten Ziffern der 2, 3 und 4 sollen Gruppe auf insgesamt. Das bedeutet, dass 8xxxx-2xxxx-4xxxx-2xxxx gültig ist, so ist 8xxxx-1xxxx-0xxxx-7xxxx. Natürlich wäre es auch andere Beziehungen, einschließlich der komplexen Beziehungen wie, wenn die zweite Ziffer der ersten Gruppe ungerade ist, dann ist die letzte Ziffer der letzten Gruppe zu ungerade sein sollte. Auf diese Weise würde es Generatoren für Produktschlüssel und die Überprüfung des Produktschlüssels würden einfach überprüfen, ob es alle Regeln entspricht.

Verschlüsselung ist in der Regel die Folge von Informationen über die verschlüsselte Lizenz mit einem privaten Schlüssel (== digital signiert) und konvertierte Base64 . Der öffentliche Schlüssel wird zusammen mit der Anwendung. Wenn der Base64-String kommt, es wird überprüft (== entschlüsselt) durch den öffentlichen Schlüssel und wenn gültig gefunden wird, wird das Produkt aktiviert.

Ob es trivial oder schwer zu knacken, ich bin nicht sicher, dass es wirklich viel Unterschied macht.

Die Wahrscheinlichkeit, dass Ihre App geknackt ist weit mehr proportional zu seiner Nützlichkeit und nicht die Stärke des Produktschlüssels Handhabung.

Ich persönlich denke, es gibt zwei Klassen von Benutzern. Diejenigen, die zahlen. Diejenigen, die dies nicht tun. Diejenigen, die wahrscheinlich tun dies mit noch so trivial Schutz. Diejenigen, die nicht für einen Riss warten oder an anderer Stelle suchen. So oder so, wird es nicht bekommen Sie kein Geld mehr.

Ich muss zugeben, dass ich etwas tun würde eher verrückt.

  1. Finden Sie eine CPU-Engpass und entpacken Sie es in einem P / Invokeable DLL-Datei.
  2. Als Beitrag Build Aktion, verschlüsselt Teil der DLL-Datei mit einem XOR Verschlüsselungsschlüssel.
  3. Wählen Sie ein öffentliches / privates Schlüsselschema, umfasst öffentliche Schlüssel in der DLL-Datei
  4. Anordnen, so dass die Produktschlüssel zu entschlüsseln und eine XOR-Verknüpfung der beiden Hälften zusammen ergibt die Verschlüsselungsschlüssel für die DLL.
  5. In dem DllMain-Code des DLL, deaktivieren Schutzes (PAGE_EXECUTE_READWRITE) und entschlüsseln sie mit dem Schlüssel.
  6. Erstellen Sie eine license () -Methode, die eine Plausibilitätsprüfung der Marken Lizenzschlüssel und Parameter, dann Prüfsummen gesamte DLL-Datei, werfen Lizenzverletzung entweder auf. Oh, und einige andere Initialisierung hier.

Wenn sie finden und entfernen Sie den license, was für ein Spaß werden folgen wenn die DLL beginnt Segmentierung Verwerfungen.

Es gibt die Option Microsoft Software-Lizenzierung und Schutz (SLP) Dienstleistungen. Nachdem darüber zu lesen wirklich wünschte ich, ich könnte es benutzen.

Ich mag die Idee von der Lizenz basiert Teile des Codes zu blockieren. Hot stuff, und die sicherste für .NET. Interessant zu lesen, auch wenn Sie ihn nicht verwenden!

  

Microsoft® Software-Lizenzierung und   Schutz (SLP) Services ist ein   Software-Aktivierungs-Dienst,   ermöglicht unabhängige Softwareanbieter   (ISV) flexible Lizenz zu erlassen   Bedingungen für ihre Kunden. Microsoft   SLP-Dienste setzt eine einzigartige   Schutzverfahren, den Schutz hilft   Ihre Anwendung und Lizenzierung   Informationen so dass Sie erhalten   Markt schneller bei gleichzeitiger Erhöhung   Kunden Compliance.

. Hinweis: Dies ist die einzige Art, wie ich ein Produkt mit sensiblen Code (wie ein wertvollen Algorithmus) freigeben würde

Wenn Sie eine einfache Lösung wollen einfach erstellen und Seriennummern zu überprüfen, versuchen Ellipter . Es verwendet elliptischen Kurven-Kryptographie und hat eine „Expiration Date“ -Funktion so können Sie Test verisons oder zeitlich begrenzte Registrierungsschlüssel erstellen.

Ein weiteres gutes preiswertes Tool für Produktschlüssel und Aktivierungen ist ein Produkt namens Installkey. Schauen Sie sich auf www.lomacons.com

Eine einfache Methode ist die Verwendung einer Globally Unique Identifier (GUID). GUIDs werden in der Regel als 128-Bit-Werte gespeichert und werden allgemein als 32 hexadezimale Ziffern mit Gruppen, die durch Bindestriche, wie {21EC2020-3AEA-4069-A2DD-08002B30309D} getrennt angezeigt.

Verwenden Sie den folgenden Code in C # durch 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 ist, einen Algorithmus zu haben, dass Sie nur wissen (so dass es am anderen Ende decodiert werden kann).

Es gibt einfache Dinge wie: „eine Primzahl-Auswahl und eine magische Zahl, um es hinzuzufügen“

Weitere gewundene Optionen wie die Verwendung von asymmetrischer Verschlüsselung eines Satz von binären Daten (die eine eindeutige Kennung enthalten könnten, Versionsnummern, usw.) und verteilen die verschlüsselten Daten als Schlüssel.

Könnte auch wert sein, um die Antworten zu lesen auch diese Frage

Sie können überprüfen, LicenseSpot . Es sieht vor:

  • Free Lizenzierung Komponente
  • Online-Aktivierung
  • API Ihre Anwendung und Online-Shop integrieren
  • Seriennummer Generation
  • Entziehen Lizenzen
  • Subscription Management

Ich werde ein bisschen huckepack auf @ frankodwyer die große Antwort und graben ein wenig tiefer in online-basierte Lizenzierung. Ich bin der Gründer von Keygen , eine API Lizenzierung REST für Entwickler gebaut.

Da Sie erwähnten wollen 2 „Typen“ von Lizenzen für Ihre Anwendung, dh eine „Vollversion“ und eine „Testversion“, können wir das vereinfachen und verwenden Sie ein Feature-Lizenzmodell , wo Sie lizenzieren Besonderheiten Ihrer Anwendung (in diesem Fall gibt es ein „voll“ Feature-Set und ein „Versuch“ Feature-Set).

Um zu beginnen, könnten wir 2 Lizenztypen erstellen (so genannte Politik in Keygen) und immer dann, wenn ein Benutzer ein Konto registriert können Sie eine „trial“ Lizenz für sie erzeugen zu beginnen (die „Studie“ Lizenz Geräte unsere „trial“ -Funktion Politik), mit dem Sie verschiedene Kontrollen zu tun in der App zum Beispiel verwenden können können Benutzer einen Test Feature-A und Test Feature-B .

Und Gebäude auf, dass, wenn ein Benutzer kauft Ihre App (ob Sie mit PayPal, Streifen, etc.) können Sie eine Lizenz zur Nutzung der „voll“ Feature Umsetzung der Politik generieren und verknüpfen es mit dem Benutzer Konto . Jetzt in Ihrer App können Sie überprüfen, ob der Benutzer eine "voll" Lizenz hat, das tun Pro-Eigenschaft-X und Pro-Eigenschaft-Y (durch so etwas wie user.HasLicenseFor(FEATURE_POLICY_ID) tun ).

Ich erwähnte damit Ihre Benutzer erstellen Benutzerkonten -was meine ich damit? Ich habe in ein paar andere Antworten , aber ein kurzer Überblick darüber, warum ich denke, das eine überlegene Art und Weise ist der Benutzer zu authentifizieren und zu identifizieren:

  1. Benutzerkonten können Sie assoziieren mehrere Lizenzen und mehrere Maschinen a single user , geben Sie einen Einblick in das Verhalten Ihrer Kunden und sie für "in-App-Käufe" aufzufordern dh Ihre "Vollversion" (eine Art, wie mobile Anwendungen) entschieden haben.
  2. Wir sollten nicht unsere Kunden zur Eingabe von langen Lizenzschlüssel erfordern, die zur Eingabe sowohl langwierig sind und schwer zu verfolgen das heißt, sie leicht verloren gehen. (Versuchen Sie "verlorenen Lizenzschlüssel" auf Twitter suchen!)
  3. Die Kunden sind es gewohnt, mit einem E-Mail / Passwort ; Ich denke, wir sollten das tun, was die Menschen so zu tun, verwendet werden, dass sie einen guten User Experience (UX) zur Verfügung stellen können.

Natürlich, wenn Sie dies nicht tun wollen Benutzerkonten zu handhaben und Sie wollen Ihre Benutzer zur Eingabe von Lizenzschlüsseln, das ist völlig in Ordnung (und Keygen unterstützt dabei, dass auch ). Ich bin nur eine andere Art und Weise anbieten zu gehen über diesen Aspekt der Lizenzierung Handhabung und hoffentlich einen schönen UX für Ihre Kunden.

Schließlich, da Sie erwähnen auch, dass Sie diese Lizenzen jährlich aktualisieren mögen, können Sie eine Dauer eingestellt auf Ihren Richtlinien, so dass „voll“ Lizenzen nach einem Jahr verfallen und „trial“ Lizenzen letztes Wort 2 Wochen, zu verlangen, dass die Benutzer eine neue Lizenz nach Ablauf erwerben.

Ich konnte in mehr graben, in immer Maschinen mit den Nutzern und ähnliches assoziieren, aber ich dachte, ich würde versuchen, diese Antwort kurz zu halten und einfach Lizenzierung Funktionen Ihren Benutzer konzentrieren.

Bitte überprüfen Sie diese Antwort: https://stackoverflow.com/a/38598174/1275924

Die Idee ist, zu verwenden, Cryptolens als Lizenzserver. Hier ist ein Schritt-für-Schritt-Beispiel (in C # und VB.NET). Ich habe beigefügt auch einen Code-Snippet für Schlüsselüberprüfung unten (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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top