Skip to Content
Nueva versión 12 disponible 🎉
ObfuscatorOfuscación del flujo de control

Ofuscación del flujo de control

La ofuscación del flujo de control hace que un método sea difícil de seguir al reescribir la forma en que se bifurcan sus instrucciones, sin cambiar lo que el método calcula. Babel puede hacer que las instrucciones if sean más difíciles de leer, insertar bifurcaciones que nunca afectan al resultado y reconstruir un método en torno a un despachador para que sus bloques dejen de ejecutarse en el orden del código fuente. El objetivo es aumentar el coste de descompilar y comprender el código, de modo que resulte más difícil aplicarle ingeniería inversa o manipularlo.

Babel agrupa su trabajo sobre el flujo de control en un conjunto de algoritmos que se activan de forma individual. Se dividen en dos familias:

  • Transformaciones ligeras (if y goto): añaden bifurcaciones y condiciones adicionales casi sin coste en tiempo de ejecución.
  • Transformaciones de aplanamiento (switch, case, call, value y el algoritmo Chained State de la edición Ultimate): reconstruyen un método en torno a un despachador. Son mucho más fuertes, con un coste mayor en tiempo de ejecución.

Otras dos opciones, token y underflow, producen deliberadamente IL no verificable y se desactivan automáticamente cuando el destino es .NET o .NET Core. Consulte Algoritmos para ver el catálogo completo.

Configuración de la ofuscación del flujo de control

La ofuscación del flujo de control se puede configurar desde la línea de comandos, la tarea Babel de MSBuild o Babel Desktop. Con las reglas XML puede afinar los algoritmos para conjuntos concretos de métodos, por ejemplo para cambiar el número de iteraciones o para activar o desactivar algoritmos individuales por método.

Línea de comandos

babel myapp.exe --controlflow goto=on --controlflow if=on --controlflow switch=on --controlflow case=on --iterations 3

La opción --controlflow activa los algoritmos especificados (aquí, goto, if, switch y case) y --iterations establece cuántas veces se aplica cada algoritmo a un método.

Tarea Babel de MSBuild

<PropertyGroup> <ControlFlowObfuscation>goto=true;if=true;switch=true;case=false;call=true; value=false;token=false;underflow=false;true</ControlFlowObfuscation> <ILIterations>5</ILIterations> </PropertyGroup> <Babel ControlFlowObfuscation="$(ControlFlowObfuscation)" ILIterations="$(ILIterations)" />

La propiedad ILIterations establece el número de iteraciones de los algoritmos de flujo de control.

Babel Desktop

  1. Abra el proyecto en Babel Desktop y seleccione el ensamblado en el diagrama del proyecto.
  2. En el grupo Flujo de control del panel de propiedades, active ControlFlowObfuscation y seleccione los algoritmos que desea usar.
  3. Establezca ILIterations en el número de iteraciones que debe realizar cada algoritmo.
  4. Haga clic en Ejecutar proyecto para iniciar la ofuscación.

Cuando la ofuscación termina, la vista Resultados de ejecución muestra las estadísticas del flujo de control: los métodos transformados y las iteraciones realizadas por cada algoritmo y, cuando se recopilan las estadísticas completas, la complejidad ciclomática antes y después de la transformación.

En esta sección

  • Algoritmos: todos los algoritmos de flujo de control, qué hace cada uno y cuándo usarlo.
  • Chained State Ultimate: un algoritmo de aplanamiento avanzado, reforzado contra la desofuscación automática del flujo de control.
  • Rendimiento y ajuste fino: cómo afecta cada algoritmo al tiempo de ejecución, una comparación directa, las iteraciones y cómo mantener rápidos los métodos de uso intensivo.
Last updated on