Skip to Content
Nouvelle version 12 disponible 🎉
ObfuscatorChiffrement du codeChiffrement lié à la licence

Chiffrement du code lié à la licence

Cet exemple rend une fonctionnalité protégée dépendante d’une licence valide sur le plan cryptographique, en combinant deux technologies Babel : le chiffrement du code MSIL chiffre le corps d’une méthode sensible, et Babel Licensing stocke le mot de passe de déchiffrement, lui-même chiffré, dans une licence signée et liée à la machine. La machine virtuelle Babel demande le mot de passe à l’application par un hook get password, qui ne le renvoie qu’une fois la licence validée. Supprimer ou contourner le contrôle de licence ne suffit pas : sans licence valide, il n’y a pas de mot de passe, et sans mot de passe, le code chiffré ne peut pas s’exécuter.

Pour utiliser cet exemple, vous avez besoin d’une licence de site pour Babel Obfuscator (édition Ultimate, Server ou Data Center) et de Babel Licensing. Le code source est disponible sur GitHub :

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

La méthode sensible est marquée de façon que Babel conserve le corps chiffré dans l’assembly et demande son mot de passe à l’exécution :

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

Le mot de passe du code n’apparaît jamais en clair dans le binaire livré. Il est écrit (chiffré avec un secret de l’éditeur) dans un champ de la licence, et récupéré à l’exécution uniquement à partir d’une licence dont la signature est valide et qui est liée à la machine actuelle. Un projet associé, LicenseGenerator, émet la licence.

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

C’est le principe sur lequel repose le déverrouillage des fonctionnalités de Babel lui-même ; voir Chiffrement du code lié à la licence dans le manuel du chiffrement du code pour l’explication complète, et Licences basées sur des fonctionnalités pour une variante à plusieurs fonctionnalités.

Last updated on