Algoritmos de flujo de control
Babel Obfuscator ofrece varios algoritmos de flujo de control que se activan de forma individual. La mayoría producen IL verificable y funcionan en todos los entornos de ejecución admitidos; dos (token y underflow) no lo hacen y se tratan al final de esta página.
Algoritmos verificables
| Algoritmo | Qué hace |
|---|---|
goto | Inserta bifurcaciones irrelevantes, que hacen el flujo de control más largo y menos lineal. |
if | Reescribe las instrucciones if en formas más complejas mediante la introducción de condiciones adicionales. |
switch | Reconstruye un método en torno a uno o varios despachadores switch, de modo que sus bloques dejan de ejecutarse en el orden del código fuente (es lo que se conoce como aplanamiento). |
case | Oculta los valores constantes que dirigen el despachador switch, de modo que dejan de ser números a la vista en el código. |
call | Añade variables que determinan el siguiente salto dentro del cuerpo del switch y que se obtienen de llamadas a otros métodos. |
value | Protege aún más los selectores del switch con la función de cifrado de valores. |
chain | Chained State: un algoritmo de aplanamiento avanzado, reforzado contra la desofuscación automática. Disponible a partir de la edición Ultimate. Consulte Chained State. |
goto e if son poco costosos y se pueden aplicar de forma generalizada. La familia switch (switch, case, call, value) y chain aplanan un método y son las transformaciones más fuertes, con un coste mayor en tiempo de ejecución; consulte Rendimiento y ajuste fino.
Chained State Ultimate
chain es un algoritmo de aplanamiento, como switch, pero está diseñado específicamente para resistir a las herramientas automáticas capaces de reconstruir un método aplanado corriente. Produce IL verificable y funciona en todos los entornos de ejecución admitidos. Actívelo con --controlflow chain=on. Tiene su propia página: Chained State.
Opciones no verificables
El algoritmo token inserta tokens de metadatos no válidos en el flujo de control, y el algoritmo underflow añade al cuerpo del método puntos en los que la pila administrada puede sufrir un desbordamiento negativo. Ambos hacen que el IL sea no verificable.
Los algoritmos token y underflow no son compatibles con el carácter verificable de los ensamblados de .NET y .NET Core y pueden provocar errores en tiempo de ejecución. Babel Obfuscator los desactiva automáticamente cuando el destino son ensamblados de .NET o .NET Core.
Códigos de operación no válidos
La opción Emit Invalid Opcodes añade instrucciones MSIL no válidas junto a las instrucciones que inserta cada algoritmo, lo que puede dificultar que los descompiladores reconstruyan el código original. Al activarla, el ensamblado deja de ser verificable y se obliga al CLR a ejecutar la aplicación como un proceso de 32 bits.
No active Emit Invalid Opcodes si la aplicación debe ejecutarse como un proceso de 64 bits, o si su destino es .NET Core o .NET Framework y el ensamblado debe ser verificable en IL para ejecutarse. En esos casos, deje esta opción desactivada.