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
| Algorithme | Effet |
|---|---|
goto | Insère des branchements sans effet, ce qui rend le flux de contrôle plus long et moins linéaire. |
if | Réécrit les instructions if sous des formes plus complexes en introduisant des conditions supplémentaires. |
switch | Reconstruit 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). |
case | Masque les valeurs constantes qui pilotent le répartiteur switch : elles n’apparaissent plus comme de simples nombres dans le code. |
call | Ajoute des variables qui déterminent le saut suivant dans le corps du switch et qui sont produites par des appels à d’autres méthodes. |
value | Protè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.