Obfuscation du flux de contrôle
L’obfuscation du flux de contrôle rend une méthode difficile à suivre en réécrivant la manière dont ses instructions se branchent, sans changer ce que la méthode calcule. Babel peut rendre les instructions if plus difficiles à lire, insérer des branchements qui n’influent jamais sur le résultat et reconstruire une méthode autour d’un répartiteur de sorte que ses blocs ne s’exécutent plus dans l’ordre du code source. L’objectif est d’augmenter le coût de la décompilation et de la compréhension du code, pour le rendre plus difficile à soumettre à la rétro-ingénierie ou à falsifier.
Babel regroupe son travail sur le flux de contrôle en un ensemble d’algorithmes que vous activez individuellement. Ils se répartissent en deux familles :
- Transformations légères (
ifetgoto) : elles ajoutent des branchements et des conditions supplémentaires pour un coût à l’exécution presque nul. - Transformations d’aplatissement (
switch,case,call,valueet l’algorithme d’état chaîné de l’édition Ultimate) : elles reconstruisent une méthode autour d’un répartiteur. Elles sont beaucoup plus fortes, pour un coût à l’exécution plus élevé.
Deux autres options, token et underflow, produisent délibérément de l’IL non vérifiable et sont désactivées automatiquement lorsque la cible est .NET ou .NET Core. Voir Algorithmes pour le catalogue complet.
Configurer l’obfuscation du flux de contrôle
L’obfuscation du flux de contrôle peut être configurée depuis la ligne de commande, la tâche MSBuild Babel ou Babel Desktop. Avec des règles XML, vous pouvez régler les algorithmes pour des ensembles de méthodes précis, par exemple pour modifier le nombre d’itérations ou pour activer ou désactiver certains algorithmes méthode par méthode.
Ligne de commande
babel myapp.exe --controlflow goto=on --controlflow if=on --controlflow switch=on --controlflow case=on --iterations 3L’option --controlflow active les algorithmes spécifiés (ici goto, if, switch et case) et --iterations définit le nombre de fois où chaque algorithme est appliqué à une méthode.
Tâche MSBuild Babel
<PropertyGroup>
<ControlFlowObfuscation>goto=true;if=true;switch=true;case=false;call=true;
value=false;token=false;underflow=false;true</ControlFlowObfuscation>
<ILIterations>5</ILIterations>
</PropertyGroup>
<Babel ControlFlowObfuscation="$(ControlFlowObfuscation)"
ILIterations="$(ILIterations)" />La propriété ILIterations définit le nombre d’itérations des algorithmes de flux de contrôle.
Babel Desktop
- Ouvrez le projet dans Babel Desktop et sélectionnez l’assembly sur le canevas du projet.
- Dans le groupe Flux de contrôle du panneau des propriétés, activez
ControlFlowObfuscationet sélectionnez les algorithmes à utiliser. - Réglez
ILIterationssur le nombre d’itérations que chaque algorithme doit effectuer. - Cliquez sur Exécuter pour lancer l’obfuscation.
À la fin de l’obfuscation, la vue Résultats affiche les statistiques du flux de contrôle : les méthodes transformées et les itérations effectuées par chaque algorithme et, lorsque les statistiques complètes sont collectées, la complexité cyclomatique avant et après la transformation.
Dans cette section
- Algorithmes : chaque algorithme de flux de contrôle, son effet et les cas où l’utiliser.
- État chaîné Ultimate : un algorithme d’aplatissement avancé, renforcé contre la désobfuscation automatisée du flux de contrôle.
- Performances et réglages : l’effet de chaque algorithme sur l’exécution, une comparaison côte à côte, les itérations et la manière de préserver la rapidité des méthodes critiques pour les performances.