Skip to Content
Nouvelle version 12 disponible 🎉

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âcheDescription
Base typesEmpêche le renommage des types dérivés d’un type de base donné
Code analysisEmpêche le renommage des types réservés à l’analyse du code
Dynamic languageEmpêche le renommage des symboles utilisés par le runtime de langage dynamique
Exposed attributesEmpêche le renommage des symboles qui exposent des attributs donnés
Razor webappGère l’obfuscation des applications web Razor
Reflected enumsEmpêche le renommage des types enum utilisés par réflexion
Reflected stringsEmpêche l’obfuscation des chaînes utilisées par réflexion
Reflected typesEmpêche le renommage des types utilisés par réflexion
Serializable typesEmpêche le renommage des types sérialisables
WinRT typesEmpê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.

Last updated on