Skip to Content
Nouvelle version 12 disponible 🎉
ObfuscatorChiffrement du codeCode protégé par mot de passe

Code protégé par mot de passe

Dans certains cas, il peut être préférable de conserver le code chiffré dans l’assembly obfusqué plutôt que de le stocker dans des fichiers externes. L’accès au code chiffré est alors protégé par un mot de passe, ce qui réduit considérablement la quantité d’informations nécessaires pour reconstruire la méthode tout en conservant le même niveau de sécurité. Sans le mot de passe, la machine virtuelle Babel (BVM) ne peut pas reconstruire la méthode d’origine, et le code chiffré est inutilisable. Cette approche concilie sécurité et performances, car le code chiffré est stocké dans l’assembly et accessible rapidement en cas de besoin.

Pour définir le code à chiffrer avec un mot de passe, il faut une règle XML qui indique la méthode ou le type à chiffrer, le nom de la source et le mot de passe utilisé. Voici un exemple d’une telle règle :

<Rule name="encrypt algorithms" feature="msil encryption" exclude="false"> <Target>Methods</Target> <Pattern>ACME.Algorithms::*</Pattern> <Properties> <Source>algorithms</Source> <Password>mySecretPassword</Password> <Internal>true</Internal> </Properties> <Description>Encrypt code in the Algorithms class using a password.</Description> </Rule>

Notez que la règle contient la propriété Internal définie sur true, qui indique à Babel de stocker le code chiffré dans l’assembly obfusqué plutôt que dans un fichier externe.

Comme le code chiffré est stocké dans l’assembly obfusqué, il n’est pas nécessaire de définir la méthode GetSourceStream pour récupérer le flux chiffré. Il faut en revanche déclarer une autre méthode, que la BVM appellera pour obtenir le mot de passe nécessaire au déchiffrement et à l’exécution de la méthode.

[Obfuscation(Feature="msil encryption get password")] internal static string GetSourcePassword(string source)

À l’exécution, la BVM appelle GetSourcePassword avec le nom de la source de données chiffrée associée aux méthodes chiffrées (ici, « algorithms »). La méthode GetSourcePassword doit renvoyer le mot de passe qui déchiffre le bytecode de la source de données demandée. La BVM peut alors exécuter la méthode demandée.

Au lieu de renvoyer un mot de passe fixe, le hook peut renvoyer une valeur lue dans la licence du client, de sorte qu’une fonctionnalité protégée ne se déverrouille que pour les utilisateurs sous licence. Voir Chiffrement du code lié à la licence.

Last updated on