Skip to Content
Neue Version 12 verfügbar 🎉
LicensingFunktionsbasierte Lizenzen

Funktionsbasierte Lizenzen

Babel Obfuscator enthält eine Lizenzierungsfunktion, mit der Sie funktionsbasierte Lizenzen für Ihren verschleierten Code erzeugen können. Sie können also Lizenzen erstellen, die je nach dem angegebenen Lizenzschlüssel bestimmte Funktionen oder Funktionsbereiche Ihrer Anwendung freischalten.

Eine Möglichkeit, dies umzusetzen, ist die Codeverschlüsselung in Verbindung mit Babel Licensing. Sie verschlüsseln Ihren Code mit Babel Obfuscator und erzeugen dann einen Lizenzschlüssel, der bestimmte verschlüsselte Abschnitte des Codes freischaltet. So können Sie je nach Bedarf des Benutzers unterschiedliche Lizenzstufen oder Funktionsumfänge anbieten.

Angenommen, Sie haben eine Anwendung mit drei Funktionsstufen: Standard, Professional und Enterprise. Mit Babel Obfuscator verschlüsseln Sie die Enterprise-Funktionen der Anwendung und erzeugen dann einen Lizenzschlüssel, der diese Funktionen freischaltet. Anschließend geben Sie den Benutzern je nach ihrer Abonnementstufe unterschiedliche Lizenzschlüssel, wobei jeder Schlüssel den passenden Funktionsumfang freischaltet.

Dazu erzeugen Sie die Lizenzschlüssel mit Babel Licensing und prüfen sie zur Laufzeit. Wenn der Benutzer einen Lizenzschlüssel eingibt, validiert Ihre Anwendung den Schlüssel mit Babel Licensing und ermittelt, welche Funktionen freigeschaltet werden. Die verschlüsselten Abschnitte des Codes werden dann entschlüsselt und stehen dem Benutzer zur Verfügung.

Der Quellcode des Beispiels, das die funktionsbasierte Lizenzierung mit Codeverschlüsselung zeigt, ist auf GitHub verfügbar:

git clone https://github.com/babelfornet/license-features-example.git

Das Beispiel referenziert das NuGet-Paket von Babel Licensing, um dessen Funktionen zu verwenden. Der Beispielcode enthält eine Implementierung der Klasse LicenseManager, die Methoden bereitstellt, um die Gültigkeit einer Lizenz und das Vorhandensein bestimmter Funktionen zu prüfen.

public ILicense ValidateLicense() { // To validate the license, only the public key is required. // The private key is only used to sign the license, and in production the private key // should not be distributed with the application. // The public key should be distributed with the application and used to validate the license. // The following signature provider can be used to create and validate the license // as includes both the private key and the public key. var signature = CreateSignature(); // The public key string can be embedded into the application and used to create a signature // provider used only to validate the license. string publicKey = signature.ExportKeys(publicKeyOnly: true); // To create the RSASignature from the public key use the following code var validatingSignature = RSASignature.FromKeys(publicKey); // And assign the validating signature provider to the license manager var licenseManager = new XmlLicenseManager(); licenseManager.SignatureProvider = validatingSignature; license = licenseManager.Validate(File.ReadAllText(LicenseFileName), typeof(LicenseManager), this); return license; }

Das Beispiel enthält außerdem den Code, der eine XML-Lizenzdatei mit den Lizenzinformationen erzeugt, etwa dem Ablaufdatum, den lizenzierten Funktionen und den Produktinformationen.

Beachten Sie, dass der Code, den das Beispiel zum Erzeugen der Lizenz bereitstellt, nur der Demonstration dient und nicht in die Produktion gelangen darf.

Mit der Codeverschlüsselung lässt sich der Code, der die Funktionen einer Softwareanwendung ausmacht, davor schützen, ohne die passende Lizenzdatei verwendet zu werden. Dazu wird der Code verschlüsselt, der eine bestimmte Funktion implementiert, und für die Entschlüsselung und Ausführung des Codes wird ein Passwort verlangt.

[Obfuscation(Feature = "msil encryption:internal=true;source=feature1;cache=false;password=aR&tj4i7u@", Exclude = false)] internal class Feature1 { public Feature1() { } public string DoTask() { return "Feature1: " + Add(7, 8); } public int Add(int a, int b) => a + b; }

Das Passwort kann aus einer Lizenzdatei stammen, die anhand der Funktionen erzeugt wird, die der Benutzer lizenziert hat.

Babel Obfuscator verwendet das Attribut Obfuscation, um den Code zu kennzeichnen, der die zu schützende Funktion ausmacht, und um die Methode anzugeben, die zur Laufzeit aufgerufen wird, um das Passwort für die Entschlüsselung und Ausführung des geschützten Codes abzurufen. Diese Methode ist in der Regel eine kleine Funktion, die das Passwort aus einer Lizenzdatei oder von einem Lizenzserver abruft. Mit dem Passwort entschlüsselt Babel Obfuscator dann zur Laufzeit den geschützten Code, sodass nur lizenzierte Benutzer auf die Funktion zugreifen können.

[Obfuscation(Feature = "msil encryption get password")] internal static string GetSourcePassword(string source) { var lm = LicenseManager.Instance; var feature = lm.License.Features.FirstOrDefault(item => item.Name == source); if (feature == null) throw new ApplicationException(source + " not found"); return Encoding.UTF8.GetString(feature.Data); }

Sobald das Beispiel kompiliert ist, führen Sie das Verschleierungsprojekt Obfuscate.babel in Babel Desktop oder von der Befehlszeile mit babel --project Obfuscate.babel aus, um die Funktionen der Anwendung mit der Codeverschlüsselung zu schützen.

Die Verschleierungsstatistiken melden die Methoden, die für jede Funktionsquelle wie feature1 verschlüsselt wurden. In Babel Desktop führen die Statistiken der Codeverschlüsselung jede verschlüsselte Methode mit ihrer Quelle auf.

Sie können die geschützte Anwendung starten und eine Lizenz für die drei vorgesehenen Editionen der Anwendung erzeugen: Standard, Professional und Enterprise. Jede Edition schaltet eine wachsende Zahl von Funktionen frei: Je höher die lizenzierte Edition, desto mehr Funktionen können Sie in der Anwendung verwenden. Eine Lizenz für die Enterprise-Edition schaltet also alle Funktionen frei, eine Lizenz für die Standard-Edition dagegen nur einen Teil der Funktionen.

Lizenzierte Funktionen

Die Klasse LicenseManager prüft, ob eine gültige Lizenz vorliegt und ob die angeforderten Funktionen vorhanden sind. Ist die Lizenz gültig und sind die Funktionen freigeschaltet, erlaubt die Anwendung dem Benutzer den Zugriff auf diese Funktionen.

Insgesamt ist die Codeverschlüsselung zusammen mit Babel Licensing ein wirksames Mittel, um flexible und funktionsreiche Anwendungen zu erstellen und Ihren Code dabei vor Reverse Engineering und Softwarepiraterie zu schützen.

Last updated on