Keine Beleidigung beabsichtigt, aber diskutieren wir nicht, dass Lizenzsysteme geknackt werden können (ich weiß das) und dass der Rückgriff auf das Gesetz normalerweise eine bessere Abschreckung ist (vielleicht in Ihrem Land, aber überhaupt nicht).
Nicht meine Wahl - Mir wurde gesagt, dass ich Lizenzen einführen sollte, gerade gut genug, um Gelegenheits-Hacker fernzuhalten.
Was das etwas anders macht, ist, dass die PCs, auf denen die Software ausgeführt wird, nicht immer Internetzugriffsprivilegien haben werden.
Wenn jemand das Produkt kauft, kann ich Lizenzinformationen darin bauen & amp; Liefern Sie eine Installations-CD. Aber was passiert, wenn sie mehr Lizenzen kaufen wollen? Ich möchte nicht vor Ort sein, um die Lizenzdaten zu aktualisieren, aber sie sind möglicherweise nicht in der Lage, auf meinen Server zuzugreifen, auch nicht auf ihre.
Ich dachte daran, Lizenzen in externen (verschlüsselten) Dateien zu haben, die jeweils eine Anzahl von Lizenzen und ein Ablaufdatum enthalten. Wenn der Benutzer mehr Lizenzen kauft, kann ich eine zusätzliche Datei per E-Mail versenden. Ihre Sicherheit wird geklärt IT-Leute können es auf CD oder USB-Stick brennen und dann in das Anwendungsdatenverzeichnis kopieren.
Scheint das in Ordnung? Kannst du dir etwas besseres vorstellen? Kannst du Probleme sehen? Ich habe nicht viel Zeit, dies umzusetzen.
Das wäre in Ordnung, wenn die Lizenz viele Informationen enthält. In der Regel sind sie nicht so können sie mit einigen Schutzfunktionen in 30 bis 50 Zeichen oder so verschlüsselt werden. Diese können dann per E-Mail versendet, ausgeschnitten und eingefügt oder sogar getippt werden.
Was die Schutzschemata betrifft, ist PKV oder Partial Key Verification populär. Es gibt hier eine Reihe von Fragen zu SO, und eine Google-Suche wird eine Reihe verschiedener Sprachimplementierungen bereitstellen.
Wenn Ihnen Crackversuche nicht besonders wichtig sind:
Erzeuge eine bestimmte Anzahl von völlig zufälligen Schlüsseln (ich weiß nicht ... sage 10.000 wegen dieses Beispiels). Hash jeden dieser Schlüssel mit SHA-1.
Fügen Sie in Ihrem Programm ein Array ein, das die SHA-1-Hashwerte enthält, z. B .:
%Vor%Wenn der Benutzer eine neue Lizenz (oder ein Paket von Lizenzen) kauft, geben Sie ihm die entsprechende Anzahl an Schlüsseln, scratchen Sie die Schlüssel aus der Liste, und das ist das.
Wenn ein Benutzer einen Schlüssel in die App eingibt, hash es und iteriere die Liste. Wenn Sie den Hash finden, sind Sie gut zu gehen. Wenn Sie dies nicht tun, ist der Schlüssel falsch / nicht autorisiert.
Vorteile:
Nachteile:
Das Schema kann auf viele verschiedene Arten verbessert werden. Aber es ist ein Ausgangspunkt für dich.
Ich verwende asymmetrische Kryptographie mit elliptischen Kurven. Um einen neuen Lizenzschlüssel zu erzeugen, den Hash-Benutzernamen (oder eine E-Mail, eventuell mit angehängter App-ID), signiere den Hash mit deinem privaten Schlüssel und kodiere mit base-32, um einen schönen Schlüssel wie HQYRV-OZFNZ-M3L7B-WA644-CXLG4-D7IRD-QZ6FY-GJGTO-MEXEG
zu bekommen.
Um die Lizenz zu validieren, hashen Sie den Benutzernamen wie oben und überprüfen Sie die Signatur des Hashs mit Ihrem öffentlichen Schlüssel.
Dies hat zahlreiche Vorteile: Der Schlüssel ist relativ kurz (dank der Verwendung von EC anstelle von RSA / DSA), der Schlüssel ist "zufällig", da jedes Mal ein anderer für den gleichen Benutzernamen generiert wird, und, im entscheidenden Fall, Es gibt keinen keygen-Code in der Anwendung und ein Cracker kann kein keygen schreiben, ohne den privaten Schlüssel zu erhalten.
Ich habe eine Bibliothek dafür auf GitHub: Ссылка (es ist eine Abzweigung des jetzt toten Objective-C-Projekts, ich portable C API hinzugefügt und einige andere Verbesserungen vorgenommen.)
Tags und Links licensing