Frage

Ich bin zur Zeit in der Entwicklung eines Produkts (entwickelt in C #) beteiligt das wird kostenlos zum Download und zur Installation verfügbar sein, aber in einer sehr begrenzten Version. Um den Zugriff auf alle Funktionen der Benutzer zu erhalten hat, um eine Lizenzgebühr zahlen und einen Schlüssel zu erhalten. Dieser Schlüssel wird dann in die Anwendung eingegeben werden, um die Vollversion zu „entsperren“.

ein Lizenzschlüssel so wie mit ist eine Art üblich Ich frage mich:

  1. Wie ist das in der Regel gelöst?
  2. Wie kann ich generiere die Schlüssel und wie kann es durch die Anwendung validiert werden?
  3. Wie kann ich vermeiden, auch ein Schlüssel mit von anderen im Internet und verwendet veröffentlicht zu werden, die nicht die Lizenz bezahlt hat (einen Schlüssel, der im Grunde nicht „ihre“).

Ich glaube, ich auch den Schlüssel für die Version der Anwendung binden sollte irgendwie so es möglich sein, wird für neue Schlüssel in Feature-Versionen zu laden.

Alles, was ich über in diesem Szenario denken soll?

War es hilfreich?

Lösung

Caveat: Sie können Benutzer nicht von Produktpiraterie verhindern, aber es nur einfacher für ehrliche Nutzer, das Richtige zu tun

.

Angenommen, Sie wollen nicht eine spezielle Build für jeden Benutzer zu tun, dann:

  • Erstellen Sie sich einen geheimen Schlüssel für das Produkt
  • Nehmen Sie den Namen des Benutzers
  • Concatentate der Benutzer Name und der geheime Schlüssel und Hash mit (zum Beispiel) SHA1
  • Packen Sie den SHA1-Hash als alphanumerische Zeichenfolge. Dies ist der einzelne Benutzer „Product Key“
  • Im Rahmen des Programms, das gleiche tun Hash, und vergleichen Sie mit dem Produktschlüssel. Wenn gleich, OK.

Aber ich wiederhole: das wird nicht verhindern, dass die Piraterie


Ich habe vor kurzem, dass dieser Ansatz nicht kryptografisch sehr gesund ist. Aber diese Lösung ist bereits schwach ( wie die Software selbst hat irgendwo den geheimen Schlüssel schließen ), so dass ich glaube nicht, diese Entdeckung die Lösung entkräftet, so weit wie es geht.

dachte nur wirklich, ich sollte dies erwähnen, obwohl; wenn Sie planen, etwas anderes daraus abzuleiten, passen.

Andere Tipps

Es gibt viele Möglichkeiten, Lizenzschlüssel zu generieren, aber nur wenige dieser Möglichkeiten sind wirklich sicher. Und es ist schade, denn für Unternehmen, Lizenzschlüssel haben fast den gleichen Wert wie echtes Geld.

Im Idealfall würden Sie Ihre Lizenzschlüssel wollen die folgenden Eigenschaften haben:

  1. Nur Ihr Unternehmen sollte, selbst wenn jemand völlig Reverse Ingenieure Ihre Produkte der Lage sein, die Lizenzschlüssel für Ihre Produkte zu erzeugen (was geschehen wird, ich spreche aus Erfahrung). Verschleiern des Algorithmus oder einen Verschlüsselungsschlüssel versteckt innerhalb der Software wirklich indiskutabel ist, wenn Sie über die Lizenzierung Kontrolle ernst meinen. Wenn Ihr Produkt erfolgreich ist, wird jemand einen Schlüsselgenerator in wenigen Tagen ab Veröffentlichung machen.

  2. Ein Lizenzschlüssel sollte nur auf einen Computer nutzbar sein (oder zumindest sollten Sie in der Lage sein, dies zu steuern, sehr eng)

  3. Ein Lizenzschlüssel sollte kurz und einfach sein, zu schreiben oder über das Telefon zu diktieren. Sie wollen nicht jeden Kunden den technischen Support zu erhalten, weil sie nicht verstehen, wenn der Schlüssel zu einem „l“ oder „1“ enthält. Ihre Support-Abteilung würde es Ihnen danken, und Sie werden niedrigere Kosten haben in diesem Bereich.

So wie Sie diese Herausforderungen lösen?

  1. Die Antwort ist einfach, aber technisch anspruchsvoll: digitale Signaturen Public-Key-Kryptographie. Ihre Lizenzschlüssel sollte in der Tat unterzeichnet „Dokumente“ sein, einige nützliche Daten enthalten, unterzeichnet mit Ihrem Unternehmen die privaten Schlüssel. Die Unterschriften sollten Teil des Lizenzschlüssels sein. Das Produkt sollte den Lizenzschlüssel mit dem entsprechenden öffentlichen Schlüssel validieren. Auf diese Weise, selbst wenn jemand vollen Zugriff auf Ihr Produkt Logik hat, können sie nicht die Lizenzschlüssel generieren, weil sie nicht den privaten Schlüssel haben. Ein Lizenzschlüssel würde wie folgt aussehen: Base32 (CONCAT (DATA, PRIVATE_KEY_ENCRYPTED (HASH (DATA)))) Die größte Herausforderung dabei ist, dass die klassischen Public-Key-Algorithmen große Signatur Größen haben. RSA512 hat eine 1024-Bit-Signatur. Sie wollen nicht Ihre Lizenzschlüssel Hunderte von Charakteren haben. Eines der leistungsfähigsten Ansätze ist Elliptische-Kurven-Kryptographie zu verwenden (bei sorgfältigen Implementierungen, die bestehenden Patente zu vermeiden). ECC-Schlüssel sind wie 6-mal kürzer als RSA-Schlüssel, für die gleiche Stärke. Sie können ferner die Signaturgrößen unter Verwendung von Algorithmen wie die Schnorr digitale Signaturalgorithmus reduzieren (zum Patent im Jahr 2008 abgelaufen - gut :))

  2. Dies ist erreichbar durch die Produktaktivierung (Windows ist ein gutes Beispiel). Grundsätzlich für einen Kunden mit einem gültigen Lizenzschlüssel, benötigen Sie eine „Aktivierungsdaten“ zu erzeugen, die eine signierte Nachricht die Hardware des Computers ID als die signierten Daten einzubetten. Dies wird in der Regel über das Internet erfolgen, aber nur einmal: das Produkt sendet den Lizenzschlüssel und die Computer-Hardware-ID an den Aktivierungsserver, und der Aktivierungsserver sendet die signierte Nachricht zurück (die auch kurz gemacht werden kann und leicht über die diktieren Telefon). Von diesem Moment an ist das Produkt den Lizenzschlüssel beim Start nicht überprüfen, aber die Aktivierungsdaten, die den Computer das gleiche, um sein muss zu validieren (sonst würden die Daten anders sein und die digitale Signatur würde validieren nicht). Beachten Sie, dass die Aktivierung Datenprüfung erfordert keine Überprüfung über das Internet. Es ausreichend ist, um die digitale Signatur der Aktivierungsdaten mit dem öffentlichen Schlüssel bereits eingebettet in dem Produkt zu überprüfen

  3. Nun, nur beseitigen redundante Zeichen wie "1", "l", "0", "o" aus dem Schlüssel. Teilen Sie die Lizenzschlüssel-Zeichenfolge in Gruppen von Zeichen.

Einfache Antwort -. Egal, welches Schema, das Sie verwenden es geknackt werden kann

Bestrafen Sie nicht ehrliche Kunden mit einem System Hacker verhindern gemeint, wie Hacker wird es knacken unabhängig.

Ein einfacher Hash-Code an ihre E-Mail oder ein ähnliches gebunden ist wahrscheinlich gut genug. Hardware-basierte IDs immer ein Problem werden, wenn die Leute Hardware müssen neu installieren oder zu aktualisieren.

Good Thread zu diesem Thema: http://discuss.joelonsoftware.com/default.asp?biz.5.82298.34

Wenn Sie den Schlüssel zu erzeugen, nicht zu vergessen die Version zu verketten und Build-Nummer an die Zeichenfolge, die Sie den Hash auf berechnen. Auf diese Weise wird es nicht ein einziger Schlüssel sein, den alle alles entriegelt Sie jemals veröffentlicht.

Nachdem Sie in floating einige Schlüssel oder Patches finden astalavista.box.sk Sie wissen, dass Sie es gelungen, macht etwas populär genug, dass jemand zu knacken gestört. Freuen Sie sich!

Neben dem, was bereits gesagt wurde ....

Jede Verwendung von .NET-Anwendungen sind von Natur aus, weil die Zwischensprachprobleme zerbrechlich. Eine einfache Demontage des .NET-Code wird Ihr Produkt zu jedermann geöffnet. Sie können leicht Ihren Lizenzcode an diesem Punkt umgehen.

Sie können nicht einmal Hardwarewerte verwenden, um mehr einen Schlüssel zu erstellen. Virtuelle Maschinen erlauben nun jemand ein Bild einer ‚lizenzierten‘ Maschine zu erstellen und führen Sie es auf jeder Plattform sie wählen.

Wenn es teure Software gibt es andere Lösungen. Wenn es nicht, machen sie nur schwer genug, um es für den gelegentlichen Hacker. Und die Tatsache akzeptiert, dass es aus nicht lizenzierten Kopien wird es schließlich.

Wenn Ihr Produkt ist kompliziert, die inhärente Unterstützung Fragen wird einen gewissen Schutz für Sie erstellen.

Die C # / .NET-Engine wir für Lizenzschlüssel Generation verwenden nun als Open Source aufrecht erhalten wird:

https://github.com/appsoftware/.NET-Licence-Key- Generator .

Es basiert auf einem „Partial Key Verification“ System, das nur eine Teilmenge des Schlüssels bedeutet, dass Sie den Schlüssel zu generieren verwenden, um ist in Ihren ausschüttbaren kompiliert werden. Sie legen die Schlüssel, um sich selbst, so dass die Lizenz Implementierung der Software eindeutig ist.

Wie bereits erwähnt, wenn Ihr Code dekompiliert werden kann, ist es relativ einfach, die meisten Lizenzsysteme zu umgehen.

Ich habe verwendet Crypkey in der Vergangenheit. Es ist eine von vielen zur Verfügung.

Sie kann nur Software-Schutz bei jedem Genehmigungssystem zu einem gewissen Punkt.

Ich weiß nicht, wie aufwendig Sie erhalten möchten

, aber ich glaube, dass .net die Festplatte Seriennummer zugreifen kann.

könnten Sie das Programm senden Sie feststellen, dass und etwas eles (wie Benutzernamen und MAC-Adresse des nic)

Sie berechnen einen Code basiert weg, dass und eine E-Mail ihnen den Schlüssel zurück.

Sie werden sie davon abhalten, Schaltgeräte, nachdem sie den Schlüssel hat.

Ich bin einer der Entwickler hinter dem Cryptolens Software-Lizenzierung Plattform und sind seit Jahren auf Lizenzsystemen gearbeitet von 14. In dieser Antwort habe ich einige Tipps enthalten Erfahrung basierend auf im Laufe der Jahre erworben hat.

Der beste Weg, dies zu lösen, ist durch einen Lizenzschlüssel-Server einrichten, dass jede Instanz der Anwendung aufrufen, um einen Lizenzschlüssel zu überprüfen.

Die Vorteile eines Lizenzschlüssel-Server

Die Vorteile mit einem Lizenzschlüssel-Server ist, dass:

  1. Sie können immer aktualisieren oder einen Lizenzschlüssel mit sofortiger Wirkung sperren.
  2. jeder Lizenzschlüssel kann auf bestimmte Anzahl von Maschinen gesperrt werden (dies hilft den Benutzern zu verhindern, dass der Lizenzschlüssel Online-Veröffentlichung für andere verwenden).

Überlegungen

Obwohl Lizenzen Online gibt Ihnen mehr Kontrolle über jede Instanz der Anwendung zu überprüfen, Internetverbindung ist nicht immer vorhanden ist (vor allem, wenn Sie größere Unternehmen Ziel), so müssen wir einen anderen Weg, um die Lizenzschlüssel Überprüfung durchzuführen.

Die Lösung ist immer den Lizenzschlüssel Antwort vom Server anmelden mit einem Public-Key-Kryptosystem wie RSA oder ECC (möglicherweise besser, wenn Sie planen, auf Embedded-Systeme laufen). Ihre Anwendung sollte nur über die öffentlichen Schlüssel , um den Lizenzschlüssel Antwort zu überprüfen.

Also, falls es keine Internetverbindung, können Sie die vorherigen Lizenzschlüssel Antwort stattdessen verwenden. Darauf achten, dass die Datum speichern und Gerätekennung in der Antwort und prüfen, ob es nicht zu alt ist (zB. Sie Benutzern erlauben, offline zu sein, höchstens 30 Tage, etc und) dass der Lizenzschlüssel Antwort gehört zum richtigen Gerät.

  

Hinweis Sie sollten immer überprüfen, das Zertifikat des Lizenzschlüssel Antwort, auch wenn Sie mit dem Internet verbunden ist), um sicherzustellen, dass es nicht geändert wurde, da es den Server verlassen (dies noch getan werden muss, auch wenn Ihre API zum Lizenzschlüssel-Server verwendet https)

Schutz geheime Algorithmen

Die meisten .NET-Anwendungen können Reverse ganz leicht konstruiert werden (es gibt sowohl ein diassembler von Microsoft bereitgestellt, um die IL-Code und einige kommerzielle Produkte erhalten können sogar den Quellcode in zB abrufen. C #). Natürlich können Sie immer den Code verschleiern, aber es ist nie 100% sicher.

mir die meisten Fälle ist der Zweck jeder Software-Lizenzierung Lösung ehrlich Leute ehrlich (das heißt, dass ehrliche Nutzer, die bereit sind, vergessen zu zahlen nicht zu zahlen, nachdem ein Versuch abläuft, etc.) zu helfen.

Sie können jedoch immer noch einen Code haben, die Sie auf keinen Fall an die Öffentlichkeit durchsickern werden soll (z. B. ein Algorithmus Aktienkurse vorherzusagen, etc). In diesem Fall ist der einzige Weg zu gehen, um einen API-Endpunkt , dass Ihre Anwendung jedes Mal rufen erstellen das Verfahren ausgeführt werden soll. Es erfordert Internet-Verbindung, aber es stellt sicher, dass Ihr Geheimcode nie von dem Client-Rechner ausgeführt wird.

Implementierung

Wenn Sie alles nicht selbst umsetzen wollen, würde ich empfehlen, einen Blick auf dies zu nehmen Tutorial (Teil Cryptolens )

Die einzige Möglichkeit, alles, was Sie gebeten, zu tun für ist ein Internet-Zugang und die Überprüfung mit einem Server zu verlangen. Die Anwendung muss auf den Server mit dem Schlüssel anmelden, und dann müssen Sie die Session-Informationen speichern, wie die IP-Adresse. Dadurch wird der Schlüssel verhindern, dass auf verschiedenen Maschinen verwendet wird. Dies ist in der Regel nicht sehr beliebt bei den Nutzern der Anwendung, und es sei denn, dies eine sehr teure und komplizierte Anwendung ist es nicht wert.

könnten Sie müssen nur einen Lizenzschlüssel für die Anwendung und dann Client-Seite überprüfen, ob der Schlüssel gut ist, aber es ist einfach, diesen Schlüssel zu anderen Benutzern zu verteilen und mit einem Decompiler neuen Schlüssel erzeugt werden können.

Ich habe Internet-basierte Einmal implementiert Aktivierung auf meiner Firma Software (C # .net), die einen Lizenzschlüssel benötigt, die in der Datenbank des Servers gespeichert auf eine Lizenz bezieht. Die Software geht an den Server mit dem Schlüssel und Lizenzinformationen gegeben, die dann lokal verschlüsselt ist ein RSA-Schlüssel von einigen Variablen erzeugt werden (eine Kombination von CPUID und anderen Sachen, die nicht oft ändern) auf dem Client-Computer und speichern sie dann in die Registrierung.

Es erfordert einige serverseitige Codierung, aber es hat sich für uns wirklich gut funktioniert und ich konnte das gleiche System verwenden, wenn wir zu Browser-basierten Software erweitert. Es gibt auch Ihre Vertriebsmitarbeiter große Informationen über die, wo und wann die Software verwendet wird. Alles Lizenzsystem, das nur lokal behandelt wird, ist völlig anfällig für Ausbeutung, vor allem mit Reflektion in .NET . Aber, wie jeder andere auch gesagt hat, ist kein System vollständig sicher.

Meiner Meinung nach, wenn Sie nicht web-basierte Lizenzierung verwenden, gibt es keinen wirklichen Punkt die Software überhaupt zu schützen. Mit Kopfschmerzen, dass DRM verursachen kann, ist es nicht fair für die Nutzer, die tatsächlich bezahlt haben für sie zu leiden.

Ich glaube fest daran, dass nur mit öffentlichem Schlüssel basiertes Lizenzierungssystem der richtige Ansatz ist hier, weil Sie für die Lizenz Generation in ihren Quelltext benötigen keine wesentlichen Informationen enthalten müssen.

In der Vergangenheit habe ich Treek Licensing Bibliothek viele Male, weil es erfullt diese Anforderungen und bietet wirklich guten Preis. Er verwendet den gleichen Lizenzschutz für den Endverbraucher und selbst und niemand geknackt, dass bis jetzt. Sie können auch gute Tipps auf der Website Piraterie zu vermeiden und Rissbildung.

Wie einig anderes erwähnt, ich bin ein großer Gegner von von default-etwas zu Kunden feindlich, dass die Lizenzbranche für berüchtigt ist. Also werde ich auf eine gute Lösung für Ihr Problem erweitern, dass bietet auch einen guten Kunden UX .

Um zu beginnen, Sie erwähnten, dass Sie eine „begrenzte“ Version Ihrer Software haben, die Sie verwenden Kunden zu versuchen und zu konvertieren für zusätzliche Funktionen auf „Upgrade“. Also, was Sie suchen sind Feature-Lizenzen für Ihr Produkt z.B. kann ein Kunde eine Lizenz für Feature-X oder Feature-Y kaufen.

Ich baute Keygen mit dieser Art der Lizenzierung im Auge behalten. Keygen ist ein API Lizenzierung REST, die Sie Benutzerkonten verwalten können, Lizenzen und auch Maschinennutzung / Verbände verfolgen.

Was würde ich tun, eingerichtet ist 2 Lizenztypen (a Politik in Keygen), wo man eine Basisrichtlinie für die begrenzte kostenlose Version ist, und das andere ist ein Politik für die kostenpflichtige Version.

Ich bin mir nicht sicher, was Sie für Zahlungen verwenden, aber lassen Sie uns annehmen, dass Sie so etwas wie Streifen verwenden (ziemlich Standard heutzutage), die Angebote webhooks . Keygen hat auch webhooks (ob Sie es oder nicht, all dies ist noch vorhanden). Sie können Keygen integrieren mit Ihrem Zahlungsanbieter mit webhooks von beiden Seiten zu reden. (Man denkt: customer.created-> create Basislizenz für Kunden, license.created-> Ladung Kunde für die neue Lizenz)

So webhooks durch Nutzung können wir Lizenzerstellung für neue Kunden automatisieren. Also, was über die Lizenzvalidierung innerhalb der Anwendung selbst? Dies kann in einer Vielzahl von Arten erfolgen, aber der beliebteste Weg ist von Ihrem Kunden erfordern einen langen Lizenzschlüssel in ein Eingabefeld eingeben, die Sie dann bestätigen können; Ich denke, dies ist ein schrecklich Weg Lizenzprüfung in Ihrer Anwendung zu behandeln.

Warum denke ich, dass? Nun zunächst einmal, Sie benötigen Ihre Kunden zur Eingabe eines ermüdend langen Lizenzschlüssel, der für Maschinenverbrauch gemeint ist, und die zweite Ihre benötigen Sie und Ihre Kunden den Überblick zu behalten, sagte ermüdend langen Lizenzschlüssel .

Okay, so etwas ist eine Alternative? Ich denke, die beste Alternative etwas tut alle Ihren Kunden verwendet werden: so dass sie ein Konto für Ihr Produkt erstellen ein E-Mail / Passwort mit . Sie können dann alle ihre Lizenzen assoziieren und ihre Maschinen mit diesem Konto. So, jetzt stattdessen einen Lizenzschlüssel eingeben, können sie einfach einloggen, um ihre Anmeldeinformationen an.

Welchen Vorteil hat, dass Sie geben? Zum einen wird es für Sie von der Notwendigkeit befreien und Ihre Kunden den Überblick über Lizenzschlüssel zu halten, , da es alles hinter den Kulissen behandelt innen ihrer Benutzerkonto und vor allem: können Sie nun Ihre Kunden Selbstbedienungs-Lizenz und Maschinen Aktivierung bieten dh da alle ihre Lizenzen und Maschinen mit ihrem Benutzerkonto zugeordnet sind, können Sie! sie auffordern, eine Lizenz zu erwerben, wenn sie Ihre Anwendung auf einer nicht erkannten Maschine anwerfen.

Jetzt auf Lizenzprüfung : wenn Ihr Kunde meldet in Ihre Anwendung mit ihrem E-Mail / Passwort, können Sie ihr Benutzerkonto für die Lizenzen abfragen sie besitzen, um zu bestimmen, ob sie verwenden können Feature- X oder Feature-Y . Und da Ihre Anwendung ist nun Selbstbedienungs , können Sie Ihren Kunden ermöglichen zusätzliche Funktionen aus Ihrer Anwendung direkt zu kaufen!

So wir ein eingeführt haben ton Automatisierungs unser Lizenzsystem, können wir individuelle Lizenz Eigenschaften (dh eine begrenzte vs. Vollversion), haben wir angeboten ein super UX für unsere Kunden und wir haben gelindert auch einer der größten Gründe für Support-Anfragen. Lizenzschlüssel Recovery

Wie auch immer, diese bekam lange, aber hoffentlich hilft es jemand!

Es ist nicht möglich, Software-Piraterie vollständig zu verhindern. Sie können lässig Piraterie verhindern und das ist, was all Lizenz Lösungen aus ihrer do.

Node (Maschine) gesperrt Lizenzierung ist am besten, wenn Sie die Wiederverwendung von Lizenzschlüsseln verhindern wollen. Ich habe mit Cryptlex für etwa ein Jahr jetzt meine Software. Es hat einen frei Plan auch, wenn Sie also nicht zu viele Kunden erwarten, dass Sie es kostenlos nutzen können.

Sie können eine kostenlose Drittanbieter-Lösung verwenden, um dies für Sie zu behandeln wie Quantum-Key.Net Es ist kostenlos und Griffe Zahlungen via Paypal über eine Web-Verkaufsseite, die für Sie, Schlüsselausgabe per E-Mail erstellt und Schlösser Schlüssel verwenden, um ein spezifische Computer-Piraterie zu verhindern.

Sie sollte auch darauf achten, um Ihren Code zu verschleiern / verschlüsseln oder es leicht Reverse Engineering-Software wie De4dot und .NetReflector verwendet werden kann. Ein guter freier Code obfuscator ist ConfuserEx wich ist schnell und einfach zu bedienen und effektiver als teure Alternativen.

Sie sollten Ihre fertige Software durch De4Dot und .NetReflector führen Sie es zum Reverse-Engineering und sehen, was ein Cracker sehen würde, wenn sie die gleiche Sache tun und um sicherzustellen, dass Sie keinen wichtigen Code verlassen haben, ausgesetzt oder unverhüllt.

Ihre Software wird noch zu knacken sein, aber für den gelegentlichen Cracker kann es gut genug sein, um sie beiseite zu legen und diese einfachen Schritte werden auch Ihren Code verhindern, dass extrahiert und wiederverwendet.

https://quantum-key.net

Wie ConfuserEx benutzen?

https://github.com/0xd4d/de4dot

https://www.red-gate.com / dynamic / products / dotnet-Entwicklung / Reflektor / herunterladen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top