Skip to Content
Nueva versión 12 disponible 🎉

Chained State Ultimate

Chained State (chain) es la transformación de flujo de control más fuerte de Babel Obfuscator. Al igual que el algoritmo switch, aplana un método (lo reconstruye en torno a un despachador para que sus bloques dejen de ejecutarse en el orden del código fuente), pero está diseñada específicamente para resistir a las herramientas automáticas capaces de deshacer el aplanamiento corriente.

Por qué Chained State

El aplanamiento corriente con switch es eficaz frente a un lector humano, pero una clase muy conocida de desofuscadores automáticos consigue a menudo reconstruir el método original: analizan estáticamente el despachador, recuperan el orden en el que debían ejecutarse los bloques y reescriben el método hasta dejarlo en algo parecido al código fuente. Frente a estas herramientas, el aplanamiento simple se puede deshacer en una sola pasada automática.

Chained State cierra esa brecha. El despachador se construye de modo que el orden original no se puede recuperar solo con análisis estático: un atacante tiene que ejecutar realmente el método para seguir su flujo. En pruebas internas con un desofuscador automático estándar de flujo de control, el código aplanado con switch se reconstruyó hasta obtener el método original, mientras que el mismo código aplanado con chain quedó intacto. El resultado es un método aplanado que resiste tanto la lectura manual como la recuperación automática.

Chained State es un refuerzo del aplanamiento, no un sustituto. Puede activarlo solo o junto con los demás algoritmos de flujo de control.

Compatibilidad

Chained State solo emite IL corriente y verificable, y no añade tipos auxiliares, reflexión ni dependencias en tiempo de ejecución. Por ello funciona sin cambios en toda la gama de .NET:

  • De .NET Framework 4.x a .NET 10, .NET Core y Mono / Xamarin.
  • Aplicaciones recortadas (ILLink) y NativeAOT: no hay código dinámico que pueda fallar con la compilación AOT.
  • .NET MAUI, incluidos Android e iOS.

Como la transformación se mantiene dentro del IL verificable, no obliga a ejecutar el ensamblado en un proceso de 32 bits y se puede combinar con seguridad con el resto de su configuración de ofuscación.

Rendimiento

Chained State tiene el mismo tipo de coste en tiempo de ejecución que el aplanamiento con switch (un método aplanado ejecuta un despachador en cada llamada) y, en la práctica, su coste adicional por llamada se aparta solo unos pocos puntos porcentuales del de un switch corriente. Como con cualquier aplanamiento, resérvelo para los métodos que realmente protegen su propiedad intelectual y manténgalo fuera de las rutas de uso intensivo y críticas para el rendimiento. Consulte Rendimiento y ajuste fino para ver la comparación completa y cómo limitarlo con reglas.

Activar Chained State

Línea de comandos

babel myapp.exe --controlflow chain=on

Puede combinarlo con los demás algoritmos, por ejemplo:

babel myapp.exe --controlflow switch=on --controlflow case=on --controlflow chain=on

Tarea Babel de MSBuild

<PropertyGroup> <ControlFlowObfuscation>chain=true;true</ControlFlowObfuscation> </PropertyGroup> <Babel ControlFlowObfuscation="$(ControlFlowObfuscation)" />

Babel Desktop

En el grupo Flujo de control del panel de propiedades, active la ofuscación del flujo de control (ControlFlowObfuscation) y seleccione chain entre los algoritmos.

Chained State está disponible a partir de la edición Ultimate (y en Server y Data Center). Con la edición Enterprise, el motor no aplica el algoritmo chain.

Last updated on