Skip to Content
Nuova versione 12 disponibile 🎉
LicensingLicenze basate sulle funzionalità

Licenze basate sulle funzionalità

Babel Obfuscator include una funzionalità di gestione delle licenze che ti permette di generare licenze basate sulle funzionalità per il tuo codice offuscato. Puoi cioè creare licenze che sbloccano funzionalità specifiche della tua applicazione in base alla chiave di licenza fornita.

Un modo per realizzarlo è usare la cifratura del codice insieme a Babel Licensing. Puoi usare Babel Obfuscator per cifrare il codice e poi generare una chiave di licenza che sblocca sezioni cifrate specifiche del codice. In questo modo puoi offrire livelli di licenza o insiemi di funzionalità diversi in base alle esigenze dell’utente.

Per esempio, supponi di avere un’applicazione con tre livelli di funzionalità: Standard, Professional ed Enterprise. Puoi usare Babel Obfuscator per cifrare le funzionalità Enterprise dell’applicazione e poi generare una chiave di licenza che le sblocca. Puoi quindi fornire agli utenti chiavi di licenza diverse in base al loro livello di abbonamento, ciascuna delle quali sblocca l’insieme di funzionalità corrispondente.

Per realizzarlo, usa Babel Licensing per generare le chiavi di licenza e verificarle in fase di esecuzione. Quando l’utente inserisce una chiave di licenza, la tua applicazione usa Babel Licensing per convalidare la chiave e stabilire quali funzionalità sbloccare. Le sezioni cifrate del codice vengono quindi decifrate e rese disponibili all’utente.

Il codice sorgente dell’esempio che mostra le licenze basate sulle funzionalità con la cifratura del codice è disponibile su GitHub

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

L’esempio fa riferimento al pacchetto NuGet di Babel Licensing per usarne le funzionalità. Il codice dell’esempio include un’implementazione della classe LicenseManager, che fornisce i metodi per controllare la validità di una licenza e la presenza di funzionalità specifiche.

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; }

L’esempio include anche il codice per generare un file di licenza XML che specifica le informazioni della licenza, come la data di scadenza, le funzionalità concesse in licenza e le informazioni sul prodotto.

Tieni presente che il codice fornito nell’esempio per generare la licenza ha solo scopo dimostrativo e non deve essere incluso in produzione.

La cifratura del codice può proteggere il codice che costituisce le funzionalità di un’applicazione software, impedendone l’uso senza il file di licenza corretto. Puoi ottenerlo cifrando il codice che implementa una determinata funzionalità e richiedendo una password per decifrarlo ed eseguirlo.

[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; }

La password può essere ricavata da un file di licenza generato in base alle funzionalità che l’utente ha in licenza.

Babel Obfuscator usa l’attributo Obfuscation per contrassegnare il codice che costituisce la funzionalità da proteggere e indica il metodo da chiamare in fase di esecuzione per recuperare la password necessaria a decifrare ed eseguire il codice protetto. Di solito questo metodo è una piccola funzione che recupera la password da un file di licenza o da un server delle licenze. Babel Obfuscator usa poi la password per decifrare il codice protetto in fase di esecuzione, garantendo che solo gli utenti con licenza possano accedere alla funzionalità.

[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); }

Una volta compilato l’esempio, esegui il progetto di offuscamento Obfuscate.babel in Babel Desktop oppure dalla riga di comando con babel --project Obfuscate.babel per proteggere le funzionalità dell’applicazione con la cifratura del codice.

Le statistiche di offuscamento riportano i metodi cifrati per ogni origine di funzionalità, come feature1. In Babel Desktop, le statistiche della cifratura del codice elencano ogni metodo cifrato con la sua origine.

Puoi avviare l’applicazione protetta e generare una licenza per le tre edizioni dell’applicazione previste: Standard, Professional ed Enterprise. Ogni edizione sblocca un numero crescente di funzionalità: più alta è l’edizione che prendi in licenza, più funzionalità potrai usare nell’applicazione. Generare una licenza per l’edizione Enterprise sblocca quindi tutte le funzionalità, mentre generare una licenza per l’edizione Standard ne sblocca solo una parte.

Funzionalità concesse in licenza

La classe LicenseManager controlla che ci sia una licenza valida e che le funzionalità richieste siano presenti. Se la licenza è valida e le funzionalità sono abilitate, l’applicazione permette all’utente di accedervi.

Nel complesso, la cifratura del codice usata con Babel Licensing offre un modo efficace per creare applicazioni flessibili e ricche di funzionalità, proteggendo al tempo stesso il codice dal reverse engineering e dalla pirateria.

Last updated on