Skip to Content
Nouvelle version 12 disponible 🎉
ObfuscatorOptimisationsOptimisations du code

Optimisations du code

Les optimisations du code regroupent les techniques que Babel Obfuscator emploie pour améliorer l’efficacité et les performances du code pendant l’obfuscation. Elles affinent le code généré pour le rendre plus rapide et plus difficile à comprendre une fois décompilé. Cette section présente les stratégies d’optimisation du code utilisées par Babel et leur effet sur la lisibilité du code et sur la vitesse d’exécution.

Expansion en ligne

L’expansion en ligne est une technique d’optimisation par laquelle Babel Obfuscator remplace les appels de méthode par les instructions contenues dans le corps de la méthode. Elle supprime le surcoût de l’appel de fonction et améliore donc les performances.

Pour activer l’expansion en ligne, vous devez désigner les méthodes à développer en ligne. Il existe deux façons de le faire.

Vous pouvez d’abord appliquer l’attribut System.Reflection.ObfuscationAttribute directement à la méthode à développer en ligne. Cet attribut doit comporter le paramètre Feature = "inline" pour indiquer que la méthode doit faire l’objet d’une expansion en ligne.

[Obfuscation(Feature = "inline", Exclude = false)] public void Info(string message) { // Method body }

Grâce au paramètre d’attribut Feature = "inline", Babel sait que la méthode doit faire l’objet d’une expansion en ligne pendant l’obfuscation.

Vous pouvez aussi définir, dans votre fichier de configuration, une règle d’obfuscation qui inclut la méthode ou le type à développer en ligne :

<Rule name="inline1" feature="optimizations" exclude="false"> <Pattern>AcmeDataMining.Logger::Info(String) : Void</Pattern> <Properties> <Inline>True</Inline> </Properties> </Rule>

Dans cet exemple, la règle indique que la méthode Info du type AcmeDataMining.Logger doit être développée en ligne, comme le précise la propriété <Inline>True</Inline>.

Ensuite, pour lancer l’expansion en ligne, activez InlineExpansion dans le groupe Optimisation de Babel Desktop, ou utilisez l’option --inlineexpansion lorsque vous exécutez Babel en ligne de commande :

babel myapp.exe --inlineexpansion

Tâche MSBuild Babel

Pour activer l’expansion en ligne dans Babel Obfuscator avec la tâche MSBuild Babel, définissez la propriété <InlineExpansion> dans la section <PropertyGroup> de votre fichier de projet MSBuild.

Voici un exemple d’activation de l’expansion en ligne avec la propriété <InlineExpansion> :

<PropertyGroup> <InlineExpansion>true</InlineExpansion> </PropertyGroup> <Babel InlineExpansion="$(InlineExpansion)" />

Dans l’extrait de code ci-dessus, l’élément <PropertyGroup> définit la propriété <InlineExpansion> et lui donne la valeur true. L’expansion en ligne est ainsi activée pour l’obfuscation.

Les statistiques d’optimisation indiquent le nombre de méthodes développées en ligne et le nombre d’expansions effectuées pendant la phase d’optimisation.

Optimization phase, elapsed time 00.270s Inlined methods (expanded): 266 (736)

Lorsque l’expansion en ligne est activée, Babel Obfuscator repère les méthodes marquées et remplace leurs appels par les instructions contenues dans leur corps. Cette optimisation supprime le surcoût lié à l’appel de méthode, ce qui améliore les performances et peut réduire la taille du code.

Suppression des champs constants

Babel Obfuscator emploie une technique d’optimisation du code appelée suppression des champs constants, qui consiste à remplacer directement les références aux déclarations de champs constants par les valeurs correspondantes. Babel élimine ainsi les champs constants du code et retire toute information susceptible de révéler des détails sur l’algorithme ou la logique sous-jacents.

Remplacer les références aux champs constants par leurs valeurs a deux objectifs principaux. D’abord, cela réduit la taille du code en rendant inutiles les déclarations explicites de champs, ce qui améliore l’efficacité et les performances globales de l’application obfusquée.

Ensuite, et surtout, la suppression des champs constants aide à protéger le code contre les tentatives de rétro-ingénierie. En remplaçant les références par les valeurs réelles, Babel efface toute trace des noms de champs d’origine : il devient plus difficile pour une personne malveillante de comprendre la logique ou de déduire des informations sur le fonctionnement de l’application.

Ligne de commande

Pour activer la suppression des champs constants depuis l’interface en ligne de commande (CLI) de Babel Obfuscator, utilisez l’option --constremoval. Lorsque cette option figure dans la commande, Babel effectue l’optimisation qui supprime les champs constants du code.

Voici un exemple d’activation de la suppression des champs constants avec le CLI :

babel myapp.exe --constremoval

Tâche MSBuild Babel

Pour activer la suppression des champs constants dans Babel Obfuscator avec MSBuild, utilisez la propriété <ConstRemoval>. En la définissant sur true, vous demandez à Babel d’effectuer l’optimisation et de supprimer les champs constants du code pendant l’obfuscation.

Voici un exemple d’activation de la suppression des champs constants dans MSBuild :

<PropertyGroup>  <ConstRemoval>true</ConstRemoval>  </PropertyGroup>  <Babel ConstRemoval="$(ConstRemoval)" />

Dans l’extrait de code ci-dessus, l’élément <PropertyGroup> définit la propriété <ConstRemoval> et lui donne la valeur true, ce qui active la suppression des champs constants. La tâche <Babel> est ensuite appelée avec la propriété ConstRemoval en argument, de sorte que Babel effectue l’optimisation de suppression des champs constants.

Règles XML

Pour configurer la suppression des champs constants avec les règles XML de Babel Obfuscator, utilisez l’élément <Rule> et son sous-élément <Properties> pour indiquer la propriété <ConstRemoval>. Vous pouvez ainsi activer ou désactiver la suppression des champs constants pour des types ou des membres précis de votre base de code.

Voici un exemple de configuration XML de la suppression des champs constants :

<Rule name="const removal" feature="optimizations" exclude="false"> <Pattern>Utilities.*</Pattern> <Properties> <ConstRemoval>false</ConstRemoval> </Properties> </Rule>

L’attribut exclude est défini sur false : la règle s’applique donc aux membres désignés par l’expression du motif.

Dans l’élément <Properties>, la propriété <ConstRemoval> est définie sur true, ce qui indique que la suppression des champs constants doit être désactivée pour les types ou les membres correspondant au motif.

Les règles XML vous donnent un contrôle fin sur la suppression des champs constants dans Babel Obfuscator. Vous pouvez définir des règles différentes pour différentes parties de votre base de code et adapter ainsi l’obfuscation à vos besoins et au niveau d’optimisation voulu.

Last updated on