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.gitIl 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à .