Skip to Content
Nouvelle version 12 disponible 🎉

Algorithmes de flux de contrôle

Babel Obfuscator propose plusieurs algorithmes de flux de contrôle que vous activez individuellement. La plupart produisent de l’IL vérifiable et s’exécutent sur tous les runtimes pris en charge ; deux d’entre eux (token et underflow) font exception et sont traités à la fin de cette page.

Algorithmes vérifiables

AlgorithmeEffet
gotoInsère des branchements sans effet, ce qui rend le flux de contrôle plus long et moins linéaire.
ifRéécrit les instructions if sous des formes plus complexes en introduisant des conditions supplémentaires.
switchReconstruit une méthode autour d’un ou de plusieurs répartiteurs switch, de sorte que ses blocs ne s’exécutent plus dans l’ordre du code source (c’est ce qu’on appelle l’aplatissement).
caseMasque les valeurs constantes qui pilotent le répartiteur switch : elles n’apparaissent plus comme de simples nombres dans le code.
callAjoute des variables qui déterminent le saut suivant dans le corps du switch et qui sont produites par des appels à d’autres méthodes.
valueProtège davantage les sélecteurs du switch à l’aide de la fonctionnalité de chiffrement des valeurs.
chainÉtat chaîné : un algorithme d’aplatissement avancé, renforcé contre la désobfuscation automatisée. Disponible à partir de l’édition Ultimate. Voir État chaîné.

goto et if sont peu coûteux et peuvent être appliqués largement. La famille switch (switch, case, call, value) et chain aplatissent une méthode et sont les transformations les plus fortes, pour un coût à l’exécution plus élevé : voir Performances et réglages.

État chaîné Ultimate

chain est un algorithme d’aplatissement, comme switch, mais il est conçu spécifiquement pour résister aux outils automatisés capables de reconstruire une méthode aplatie ordinaire. Il produit de l’IL vérifiable et s’exécute sur tous les runtimes pris en charge. Activez-le avec --controlflow chain=on. Une page lui est consacrée : État chaîné.

Options non vérifiables

L’algorithme token insère des jetons de métadonnées non valides dans le flux de contrôle, et l’algorithme underflow ajoute au corps de la méthode des points où la pile managée peut subir un dépassement négatif. Tous deux rendent l’IL non vérifiable.

Les algorithmes token et underflow ne sont pas compatibles avec le caractère vérifiable des assemblies .NET et .NET Core et peuvent provoquer des erreurs à l’exécution. Babel Obfuscator les désactive automatiquement lorsque la cible est un assembly .NET ou .NET Core.

Codes d’opération non valides

L’option Emit Invalid Opcodes ajoute des instructions MSIL non valides à côté des instructions insérées par chaque algorithme, ce qui peut compliquer la reconstruction du code d’origine par les décompilateurs. Son activation rend l’assembly non vérifiable et force le CLR à exécuter l’application comme un processus 32 bits.

N’activez pas Emit Invalid Opcodes si l’application doit s’exécuter comme un processus 64 bits, ou si elle cible .NET Core ou .NET Framework et que l’assembly doit être vérifiable en IL pour s’exécuter. Dans ces cas, laissez cette option désactivée.

Last updated on