Skip to Content
Nueva versión 12 disponible 🎉

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

AlgoritmoQué hace
gotoInserta bifurcaciones irrelevantes, que hacen el flujo de control más largo y menos lineal.
ifReescribe las instrucciones if en formas más complejas mediante la introducción de condiciones adicionales.
switchReconstruye 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).
caseOculta los valores constantes que dirigen el despachador switch, de modo que dejan de ser números a la vista en el código.
callAñade variables que determinan el siguiente salto dentro del cuerpo del switch y que se obtienen de llamadas a otros métodos.
valueProtege aún más los selectores del switch con la función de cifrado de valores.
chainChained 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.

Last updated on