Optimisations des métadonnées
Dans Babel Obfuscator, les optimisations des métadonnées regroupent des techniques qui agissent sur les métadonnées du code obfusqué, lesquelles contiennent des informations sur les types, les membres, les attributs et d’autres aspects essentiels de la base de code. Elles visent à améliorer la sécurité du code, à en réduire la taille et à le rendre plus résistant aux tentatives de rétro-ingénierie.
Scellement automatique des classes
Le scellement automatique des classes est une technique d’optimisation de Babel Obfuscator qui améliore les performances d’exécution du code en scellant les classes qui ne servent pas de classes de base dans une chaîne d’héritage. Lorsqu’une classe est scellée, le compilateur JIT (Just-In-Time) peut générer un code plus efficace en appelant les méthodes virtuelles de manière non virtuelle, ce qui supprime le surcoût lié à la résolution des méthodes virtuelles.
Ligne de commande
Vous pouvez activer le scellement automatique des classes en ligne de commande avec l’option --seal, qui applique l’optimisation à tous les types non publics de l’assembly cible. Par exemple, la commande suivante scelle les classes de l’assembly « myapp.exe » :
babel myapp.exe --sealSi vous devez toutefois exclure certains types du scellement automatique des classes, vous pouvez définir une règle XML. Un motif d’expression régulière permet d’exclure des types précis du scellement. Dans l’exemple de règle XML ci-dessous, les classes de l’espace de noms « Utilities » ne sont pas scellées automatiquement :
<Rule name="seal classes" feature="optimizations" exclude="false">
<Pattern>Utilities.*</Pattern>
<Properties>
<ClassSealing>false</ClassSealing>
</Properties>
</Rule>Notez que, dans cet exemple, l’attribut « exclude » est défini sur « false » pour ne pas désactiver toutes les optimisations. En appliquant le scellement automatique des classes de manière sélective, vous ajustez l’optimisation à vos besoins et trouvez un équilibre entre le gain de performances et la préservation du comportement de certaines classes.
Tâche MSBuild Babel
Pour activer le scellement automatique des classes avec la tâche MSBuild Babel, définissez la propriété <SealClasses> dans un élément <PropertyGroup> :
<PropertyGroup>
<SealClasses>true</SealClasses>
</PropertyGroup>
<Babel SealClasses="$(SealClasses)" />Dans cet exemple, la propriété <SealClasses> est définie sur true, ce qui active le scellement automatique des classes pendant l’obfuscation.
Suppression des attributs indésirables
Dans Babel Obfuscator, l’optimisation de suppression des attributs retire les attributs inutiles du code généré par le compilateur. Ce code comporte souvent des attributs qui n’ont aucun effet sur le comportement de l’application à l’exécution. Babel sait repérer et supprimer ces attributs appliqués aux symboles définis, ce qui donne une base de code obfusquée plus concise et plus efficace.
Par exemple, des attributs comme CompilerGeneratedAttribute ou DebuggerDisplayAttribute, qui ne sont pas indispensables à l’application elle-même, peuvent être supprimés sans risque. En éliminant ces attributs indésirables, Babel réduit la taille de la cible obfusquée et efface toute distinction entre le code généré par le compilateur et le code de l’utilisateur.
Ligne de commande
Pour activer l’optimisation « suppression des attributs indésirables », utilisez l’option --cleanattrs sur la ligne de commande lorsque vous exécutez Babel.
babel myapp.exe --cleanattrsLa liste des attributs à supprimer se trouve dans le fichier babel.exe.config. Pour afficher les attributs configurés pour la suppression, utilisez la commande suivante :
babel --help cleanattrsLa sortie affiche les attributs indésirables avec leurs noms de type complets.
Babel permet aussi d’indiquer une expression régulière correspondant aux noms de type complets des attributs indésirables. Par exemple :
babel myapp.exe --cleanattrs System.Diagnostics.*AttributeCette commande supprime tous les types d’attributs personnalisés définis dans l’espace de noms System.Diagnostics.
La section de configuration de babel.exe.config contient une liste prédéfinie d’attributs indésirables, stockée sous l’élément « UnwantedAttributes ». Chaque élément de la collection représente un nom qualifié de type d’attribut.
Tâche MSBuild Babel
Pour activer la suppression des attributs indésirables avec la tâche MSBuild Babel, définissez la propriété <CleanAttributes> dans un élément <PropertyGroup> :
<PropertyGroup>
<CleanAttributes>System.Diagnostics.*Attribute;true</CleanAttributes>
</PropertyGroup>
<Babel CleanAttributes="$(CleanAttributes)" />Dans cet exemple, la propriété <CleanAttributes> indique la liste des expressions régulières correspondant aux noms de type complets des attributs indésirables à supprimer. La valeur true placée à la fin active globalement cette fonctionnalité.
Règles XML
Une propriété de règle XML nommée « UnwantedAttributes » permet de configurer finement la suppression des attributs pour tous les membres correspondant à une expression régulière donnée. En définissant des règles, vous pouvez exclure certaines parties du code de la suppression des attributs indésirables.
Voici un exemple de règle XML qui exclut l’espace de noms « Utilities » de la suppression des attributs :
<Rule name="unwanted attributes" feature="optimizations" exclude="false">
<Pattern>Utilities.*</Pattern>
<Properties>
<UnwantedAttributes>false</UnwantedAttributes>
</Properties>
</Rule>Avec l’optimisation « suppression des attributs indésirables », Babel Obfuscator optimise le code obfusqué : il élimine les attributs inutiles, réduit la taille du code et ne conserve dans l’assembly obfusqué que les informations pertinentes et essentielles.
Suppression des types System.Enum
La suppression des types System.Enum est une optimisation de Babel Obfuscator qui retire de l’assembly cible les types System.Enum qui y sont définis. Elle remplace les champs de ces types d’énumération par les valeurs correspondantes, ce qui donne une base de code plus compacte et un code désassemblé plus difficile à comprendre, puisque des valeurs constantes remplacent les noms de champs.
Ligne de commande
Pour activer la suppression des types d’énumération, utilisez l’option --enumremoval sur la ligne de commande lorsque vous exécutez Babel. Par exemple :
babel myapp.exe --enumremovalCette commande active l’optimisation qui supprime les types System.Enum de l’assembly obfusqué.
Tâche MSBuild Babel
Pour activer la suppression des types System.Enum avec la tâche MSBuild Babel, réglez la propriété <EnumRemoval> sur true dans un élément <PropertyGroup> :
<PropertyGroup>
<EnumRemoval>true</EnumRemoval>
</PropertyGroup>
<Babel EnumRemoval="$(EnumRemoval)" />Règles XML
Dans les règles XML, Babel fournit la propriété de règle EnumRemoval, qui permet d’inclure ou d’exclure des types d’énumération précis. Il suffit de définir des règles XML qui indiquent le comportement voulu pour certains motifs ou espaces de noms. Voici un exemple de règle XML qui exclut l’espace de noms « Utilities » de la suppression des types d’énumération :
<Rule name="enum removal" feature="optimizations" exclude="false">
<Pattern>Utilities.*</Pattern>
<Properties>
<EnumRemoval>false</EnumRemoval>
</Properties>
</Rule>Avec cette règle, les types d’énumération de l’espace de noms « Utilities » ne sont pas supprimés pendant l’optimisation.
La suppression des types System.Enum présente plusieurs avantages. D’abord, elle économise de l’espace disque en réduisant la taille de l’assembly obfusqué. Ensuite, en remplaçant les champs d’énumération par les valeurs correspondantes, elle ajoute au code désassemblé une couche d’obfuscation et de complexité, de sorte qu’un adversaire a plus de mal à comprendre la logique et le comportement sous-jacents.
Avec la suppression des types System.Enum de Babel Obfuscator, vous renforcez la sécurité de votre base de code et en protégez l’intégrité, tout en optimisant la taille et la lisibilité de l’assembly obfusqué.
Désagrégation des propriétés et des événements (Disgregate Removal)
La désagrégation des propriétés et des événements est une optimisation de Babel Obfuscator qui retire les informations des propriétés et des événements de leurs tables de métadonnées respectives. Elle convertit en méthodes ordinaires les méthodes get_ et set_ des propriétés, ainsi que les méthodes add_ et remove_ des événements. La suppression de ces métadonnées et la conversion des méthodes réduisent la taille des métadonnées et, associées au renommage, renforcent l’obfuscation : il devient plus difficile de reconstituer la propriété ou l’événement d’origine.
Ligne de commande
Pour activer la suppression des métadonnées des propriétés et des événements, utilisez l’option --disgregateremoval sur la ligne de commande lorsque vous exécutez Babel. Par exemple :
babel.exe myapp.exe --disgregateremovalCette commande active l’optimisation qui supprime les métadonnées des propriétés et des événements de l’assembly obfusqué.
Tâche MSBuild Babel
Pour activer la désagrégation des propriétés et des événements avec la tâche MSBuild Babel, réglez la propriété <DisgregateRemoval> sur true dans un élément <PropertyGroup> :
<PropertyGroup>
<DisgregateRemoval>true</DisgregateRemoval>
</PropertyGroup>
<Babel DisgregateRemoval="$(DisgregateRemoval)" />Règles XML
Babel permet aussi d’activer ou de désactiver de manière sélective la désagrégation des propriétés et des événements au moyen de règles XML. Ces règles indiquent le comportement voulu pour des motifs ou des espaces de noms précis. Voici un exemple de règle XML qui désactive la désagrégation pour l’espace de noms « Utilities » :
<Rule name="disgregate removal" feature="optimizations" exclude="false">
<Pattern>Utilities.*</Pattern>
<Properties>
<DisgregateRemoval>false</DisgregateRemoval>
</Properties>
</Rule>Avec cette règle, les propriétés et les événements de l’espace de noms « Utilities » ne sont pas soumis à la désagrégation pendant l’obfuscation.
La désagrégation des propriétés et des événements présente plusieurs avantages. D’abord, elle réduit la taille des tables de métadonnées et donne donc un assembly obfusqué plus compact. Ensuite, associée au renommage, elle améliore l’obfuscation de l’ensemble de la base de code : les attaquants ont plus de mal à comprendre et à reconstituer les propriétés et les événements d’origine.
Avec la désagrégation des propriétés et des événements de Babel Obfuscator, vous renforcez la sécurité et la protection de votre code, vous optimisez la taille de l’assembly obfusqué et vous ajoutez une couche de complexité à la structure du code, ce qui rend la rétro-ingénierie plus difficile.