Skip to Content
Nuova versione 12 disponibile 🎉
ObfuscatorCifratura del codiceCifratura legata alla licenza

Cifratura del codice legata alla licenza

Questo esempio fa dipendere una funzionalità protetta, a livello crittografico, da una licenza valida combinando due tecnologie Babel: la cifratura del codice MSIL cifra il corpo di un metodo sensibile, e Babel Licensing conserva la password di decifratura, a sua volta cifrata, in una licenza firmata e vincolata al computer. La Babel Virtual Machine chiede la password all’applicazione attraverso un hook get password, che la restituisce solo dopo la convalida della licenza. Rimuovere o aggirare il controllo della licenza non basta: senza una licenza valida non c’è password, e senza la password il codice cifrato non può essere eseguito.

Per usare questo esempio ti servono una licenza per sede di Babel Obfuscator (edizioni Ultimate, Server o Data Center) e Babel Licensing. Il codice sorgente è disponibile su GitHub:

git clone https://github.com/babelfornet/license-bound-encryption-console-example.git

Il metodo sensibile è contrassegnato in modo che Babel mantenga il corpo cifrato all’interno dell’assembly e ne chieda la password in fase di esecuzione:

[Obfuscation(Feature = "msil encryption:internal=true;source=core;password=...")] public static int Compute(int a, int b) { /* protected body */ } [Obfuscation(Feature = "msil encryption get password")] internal static string GetSourcePassword(string source) { // Validate the license and return the password only when it is valid. }

La password del codice non compare mai in chiaro nel file binario distribuito. Viene scritta (cifrata con un segreto del produttore) in un campo della licenza e recuperata in fase di esecuzione solo da una licenza con firma valida vincolata al computer corrente. Un progetto complementare, LicenseGenerator, emette la licenza.

Valid license -> Compute(7, 5) = 147 (the encrypted method runs) Missing / tampered -> Protected computation blocked (the BVM cannot decrypt the method)

È lo stesso schema con cui Babel abilita le proprie funzionalità; vedi Cifratura del codice legata alla licenza nel manuale della cifratura del codice per la spiegazione completa, e Licenze basate sulle funzionalità per una variante con più funzionalità.

Last updated on