Skip to Content
Nouvelle version 12 disponible 🎉

État chaîné Ultimate

L’état chaîné (chain) est la transformation de flux de contrôle la plus forte de Babel Obfuscator. Comme l’algorithme switch, il aplatit une méthode, c’est-à-dire qu’il la reconstruit autour d’un répartiteur de sorte que ses blocs ne s’exécutent plus dans l’ordre du code source, mais il est conçu spécifiquement pour résister aux outils automatisés capables d’annuler un aplatissement ordinaire.

Pourquoi l’état chaîné

L’aplatissement ordinaire par switch est efficace face à un lecteur humain, mais une catégorie bien connue de désobfuscateurs automatisés parvient souvent à reconstruire la méthode d’origine : ils analysent statiquement le répartiteur, retrouvent l’ordre dans lequel les blocs devaient s’exécuter et réécrivent la méthode sous une forme proche du code source. Face à ces outils, un aplatissement simple peut être annulé en une seule passe automatisée.

L’état chaîné comble cette lacune. Le répartiteur est construit de telle sorte que l’ordre d’origine ne peut pas être retrouvé par la seule analyse statique : un attaquant doit réellement exécuter la méthode pour en suivre le flux. Lors de tests internes face à un désobfuscateur automatisé standard de flux de contrôle, le code aplati avec switch a été ramené à la méthode d’origine, tandis que le même code aplati avec chain est resté intact. Le résultat est une méthode aplatie qui résiste à la fois à la lecture manuelle et à la récupération automatisée.

L’état chaîné renforce l’aplatissement, il ne le remplace pas. Vous pouvez l’activer seul ou avec les autres algorithmes de flux de contrôle.

Compatibilité

L’état chaîné n’émet que de l’IL ordinaire et vérifiable et n’ajoute ni types auxiliaires, ni réflexion, ni dépendances d’exécution. Il s’exécute donc sans modification sur toute la gamme .NET :

  • .NET Framework 4.x à .NET 10, .NET Core et Mono / Xamarin.
  • Applications découpées (trimming avec ILLink) et NativeAOT : il n’y a aucun code dynamique que la compilation anticipée pourrait casser.
  • .NET MAUI, y compris Android et iOS.

Comme la transformation reste dans les limites de l’IL vérifiable, elle n’impose pas à l’assembly un processus 32 bits et peut être combinée sans risque avec le reste de votre configuration d’obfuscation.

Performances

L’état chaîné entraîne le même type de coût à l’exécution que l’aplatissement switch (une méthode aplatie exécute un répartiteur à chaque appel) et, en pratique, son surcoût par appel reste à quelques pour cent de celui d’un switch ordinaire. Comme pour tout aplatissement, réservez-le aux méthodes qui protègent réellement votre propriété intellectuelle et tenez-le à l’écart des chemins très sollicités, critiques pour les performances. Voir Performances et réglages pour la comparaison complète et la manière de le limiter avec des règles.

Activer l’état chaîné

Ligne de commande

babel myapp.exe --controlflow chain=on

Vous pouvez le combiner avec les autres algorithmes, par exemple :

babel myapp.exe --controlflow switch=on --controlflow case=on --controlflow chain=on

Tâche MSBuild Babel

<PropertyGroup> <ControlFlowObfuscation>chain=true;true</ControlFlowObfuscation> </PropertyGroup> <Babel ControlFlowObfuscation="$(ControlFlowObfuscation)" />

Babel Desktop

Dans le groupe Flux de contrôle du panneau des propriétés, activez l’obfuscation du flux de contrôle (ControlFlowObfuscation) et sélectionnez chain parmi les algorithmes.

L’état chaîné est disponible à partir de l’édition Ultimate (ainsi que Server / Data Center). Avec l’édition Enterprise, le moteur n’applique pas l’algorithme chain.

Last updated on