Agent d’obfuscation
Pendant l’obfuscation, Babel peut effectuer une série de tâches à partir d’un ensemble de règles prédéfinies, appelé agent d’obfuscation.
L’agent est conçu pour éviter les problèmes courants que l’obfuscation peut introduire et qui pourraient rendre l’assembly obtenu inutilisable. Il peut par exemple veiller à ce que certains symboles, comme ceux utilisés par réflexion, ne soient pas obfusqués. En effet, l’obfuscation de ces symboles peut poser des problèmes à l’environnement d’exécution et provoquer des erreurs ou des plantages.
Pour cela, l’agent exécute une série de tâches sur l’assembly cible. Ces tâches sont préconfigurées et de complexité variable : certaines sont simples, comme la vérification des champs des types sérialisables, d’autres font appel à des techniques plus avancées, comme l’analyse statique du code MSIL.
Voici la liste des noms des tâches de l’agent disponibles dans Babel Obfuscator :
| Nom de la tâche | Description |
|---|---|
| Base types | Empêche le renommage des types dérivés d’un type de base donné |
| Code analysis | Empêche le renommage des types réservés à l’analyse du code |
| Dynamic language | Empêche le renommage des symboles utilisés par le runtime de langage dynamique |
| Exposed attributes | Empêche le renommage des symboles qui exposent des attributs donnés |
| Razor webapp | Gère l’obfuscation des applications web Razor |
| Reflected enums | Empêche le renommage des types enum utilisés par réflexion |
| Reflected strings | Empêche l’obfuscation des chaînes utilisées par réflexion |
| Reflected types | Empêche le renommage des types utilisés par réflexion |
| Serializable types | Empêche le renommage des types sérialisables |
| WinRT types | Empêche le renommage des types privés WinRT |
Les tâches de l’agent d’obfuscation sont mises à jour à chaque nouvelle version du produit. Babel reste ainsi à jour avec les dernières règles de conception du CLR et peut déterminer avec précision quels symboles doivent être obfusqués et lesquels ne doivent pas l’être.
En suivant ces règles prédéfinies, Babel Obfuscator garantit que le code obfusqué reste pleinement fonctionnel et exempt de problèmes susceptibles de rendre l’application inutilisable.
L’agent d’obfuscation est donc un composant essentiel de Babel : il contribue à la protection des applications .NET en empêchant que des noms de symboles soient obfusqués en violation des règles de conception du CLR.
Remplacer les règles de l’agent
L’agent d’obfuscation est activé par défaut et doit le rester autant que possible pour que l’obfuscation se déroule correctement. Il est généralement déconseillé de le désactiver, car cela peut poser des problèmes à l’environnement d’exécution et provoquer des erreurs ou des plantages de l’application. Dans certains cas, vous pouvez toutefois vouloir désactiver certaines tâches de l’agent pour obtenir un résultat d’obfuscation précis.
Notez que les tâches de l’agent s’exécutent après la phase de traitement des règles. Toute règle XML personnalisée qui n’est pas imposée à un membre sera donc remplacée par la tâche de l’agent. Évaluez soigneusement l’effet de la désactivation ou de la personnalisation des tâches de l’agent avant de modifier les paramètres par défaut.
Vous pouvez ignorer une tâche donnée de l’agent à l’aide des règles XML. Définissez pour cela une règle d’exclusion visant la fonctionnalité agent et indiquez les noms des tâches à ignorer dans l’élément TaskNameList, enfant de l’élément Properties de la règle. Les tâches indiquées ne seront pas exécutées pendant l’obfuscation.
Par exemple, pour désactiver les tâches Serializable types et Reflected strings, définissez une règle XML comme celle-ci :
<Rule name="rule1" feature="agent" exclude="true">
<Pattern>ACME.Data.*</Pattern>
<Properties>
<TaskNameList>Serializable types;Reflected strings</TaskNameList>
</Properties>
</Rule>Dans cette règle qui vise la fonctionnalité « agent », l’attribut exclude est défini sur « true », ce qui indique à Babel Obfuscator de ne pas exécuter les tâches Serializable types et Reflected strings de l’agent lors du traitement de l’assembly.
Désactiver une tâche n’est pas toujours possible, car cela peut entraîner des problèmes inattendus à l’exécution. Pour obtenir le résultat d’obfuscation voulu sur un symbole donné, vous pouvez alors utiliser une règle XML et l’imposer en réglant l’attribut « locked » sur « true », ce qui empêche l’agent de la remplacer.
<Rule name="rule1" feature="renaming" exclude="false" locked="true">
<Target>Classes</Target>
<Pattern>ACME.Data.*</Pattern>
<Description>Force renaming of all types in ACME.Data namespace,
including serializable ones.
</Description>
</Rule>Cette règle impose le renommage de toutes les classes de l’espace de noms ACME.Data, y compris de tous les types sérialisables.