Skip to Content
Nueva versión 12 disponible 🎉
ObfuscatorOptimizacionesOptimizaciones de metadatos

Optimizaciones de metadatos

Las optimizaciones de metadatos de Babel Obfuscator son una serie de técnicas que actúan sobre los metadatos del código ofuscado, que contienen información sobre los tipos, los miembros, los atributos y otros aspectos esenciales del código. Estas optimizaciones buscan mejorar la seguridad del código, reducir su tamaño y hacerlo más resistente a los intentos de ingeniería inversa.

Sellado automático de clases

El sellado automático de clases es una técnica de optimización de Babel Obfuscator que busca mejorar el rendimiento de la ejecución del código sellando las clases que no se usan como clases base en una cadena de herencia. Cuando una clase está sellada, el compilador Just-In-Time (JIT) puede generar código más eficiente llamando a los métodos virtuales de forma no virtual, con lo que se elimina el coste adicional de la resolución de métodos virtuales.

Línea de comandos

El sellado automático de clases se activa en la línea de comandos con la opción --seal, que aplica la optimización a todos los tipos no públicos del ensamblado de destino. Por ejemplo, el comando siguiente sella las clases del ensamblado «myapp.exe»:

babel myapp.exe --seal

No obstante, si hace falta excluir de forma selectiva determinados tipos del sellado automático de clases, se puede definir una regla XML. Con un patrón de expresión regular es posible impedir que se sellen tipos concretos. En la regla XML de ejemplo siguiente, las clases del espacio de nombres «Utilities» no se sellan automáticamente:

<Rule name="seal classes" feature="optimizations" exclude="false"> <Pattern>Utilities.*</Pattern> <Properties> <ClassSealing>false</ClassSealing> </Properties> </Rule>

Es importante tener en cuenta que, en este ejemplo, el atributo «exclude» tiene el valor «false» para no desactivar todas las optimizaciones. Al usar el sellado automático de clases de forma selectiva, el desarrollador puede ajustar con precisión el proceso de optimización a sus requisitos y encontrar un equilibrio entre la mejora del rendimiento y la conservación de determinados comportamientos de las clases.

Tarea Babel de MSBuild

Para activar el sellado automático de clases con la tarea Babel de MSBuild, puede establecer la propiedad <SealClasses> dentro de un elemento <PropertyGroup>:

<PropertyGroup> <SealClasses>true</SealClasses> </PropertyGroup> <Babel SealClasses="$(SealClasses)" />

En este ejemplo, la propiedad <SealClasses> tiene el valor true, lo que indica que el sellado automático de clases debe activarse durante el proceso de ofuscación.

Eliminación de atributos no deseados

La optimización de eliminación de atributos de Babel Obfuscator se centra en quitar los atributos innecesarios del código generado por el compilador. A menudo, el código que genera el compilador incluye atributos que no afectan al comportamiento de la aplicación durante la ejecución. Babel puede identificar y eliminar estos atributos aplicados a los símbolos definidos, con lo que el código ofuscado resulta más conciso y eficiente.

Por ejemplo, atributos como CompilerGeneratedAttribute o DebuggerDisplayAttribute, que no son esenciales para la aplicación, se pueden eliminar sin riesgo. Al eliminar estos atributos no deseados, Babel reduce el tamaño del destino ofuscado y borra toda distinción entre el código generado por el compilador y el código del usuario.

Línea de comandos

Para activar la optimización de eliminación de atributos no deseados, se puede usar la opción --cleanattrs en la línea de comandos al ejecutar Babel.

babel myapp.exe --cleanattrs

La lista de atributos que se eliminan se encuentra en el archivo babel.exe.config. Para ver los atributos configurados para su eliminación, se puede usar el comando siguiente:

babel --help cleanattrs

La salida muestra los atributos no deseados junto con sus nombres de tipo completos.

Babel también permite indicar una expresión regular que coincida con los nombres de tipo completos de los atributos no deseados. Por ejemplo:

babel myapp.exe --cleanattrs System.Diagnostics.*Attribute

Este comando elimina todos los tipos de atributos personalizados definidos en el espacio de nombres System.Diagnostics.

La sección de configuración de babel.exe.config incluye una lista predefinida de atributos no deseados, almacenada en el elemento «UnwantedAttributes». Cada elemento de la colección representa un nombre calificado de tipo de atributo.

Tarea Babel de MSBuild

Para activar la eliminación de atributos no deseados con la tarea Babel de MSBuild, puede establecer la propiedad <CleanAttributes> dentro de un elemento <PropertyGroup>:

<PropertyGroup> <CleanAttributes>System.Diagnostics.*Attribute;true</CleanAttributes> </PropertyGroup> <Babel CleanAttributes="$(CleanAttributes)" />

En este ejemplo, la propiedad <CleanAttributes> especifica la lista de expresiones regulares que coinciden con el nombre de tipo completo de los atributos no deseados que se van a eliminar. El valor true del final activa esta función de forma global.

Reglas XML

Hay una propiedad de regla XML llamada «UnwantedAttributes» que permite configurar con detalle la eliminación de atributos para todos los miembros que coinciden con una expresión regular determinada. Con estas reglas, el desarrollador puede excluir partes concretas del código de la eliminación de atributos no deseados.

Este es un ejemplo de regla XML que excluye el espacio de nombres «Utilities» de la eliminación de atributos:

<Rule name="unwanted attributes" feature="optimizations" exclude="false"> <Pattern>Utilities.*</Pattern> <Properties> <UnwantedAttributes>false</UnwantedAttributes> </Properties> </Rule>

Con la optimización de eliminación de atributos no deseados, Babel Obfuscator ayuda a optimizar el código ofuscado: elimina los atributos innecesarios, reduce el tamaño del código y deja en el ensamblado ofuscado solo la información pertinente y esencial.

Eliminación de tipos de enumeración System.Enum

La eliminación de tipos de enumeración es una optimización de Babel Obfuscator que elimina los tipos System.Enum definidos en el ensamblado de destino. Esta técnica sustituye los campos de estos tipos de enumeración por sus valores, con lo que el código resulta más compacto y el código desensamblado es más difícil de entender, ya que se usan valores constantes en lugar de nombres de campos.

Línea de comandos

La eliminación de tipos de enumeración se activa con la opción --enumremoval en la línea de comandos al ejecutar Babel. Por ejemplo:

babel myapp.exe --enumremoval

Este comando activa la optimización que elimina los tipos System.Enum del ensamblado ofuscado.

Tarea Babel de MSBuild

Para activar la eliminación de tipos de enumeración con la tarea Babel de MSBuild, puede establecer la propiedad <EnumRemoval> en true dentro de un elemento <PropertyGroup>:

<PropertyGroup> <EnumRemoval>true</EnumRemoval> </PropertyGroup> <Babel EnumRemoval="$(EnumRemoval)" />

Reglas XML

Babel proporciona en las reglas XML la propiedad de regla EnumRemoval, que permite incluir o excluir de forma selectiva tipos de enumeración concretos. Para ello se definen reglas XML que especifican el comportamiento deseado para determinados patrones o espacios de nombres. Este es un ejemplo de regla XML que excluye el espacio de nombres «Utilities» de la eliminación de tipos de enumeración:

<Rule name="enum removal" feature="optimizations" exclude="false"> <Pattern>Utilities.*</Pattern> <Properties> <EnumRemoval>false</EnumRemoval> </Properties> </Rule>

Con esta regla, los tipos de enumeración del espacio de nombres «Utilities» no se eliminan durante el proceso de optimización.

La optimización de eliminación de tipos System.Enum ofrece varias ventajas. En primer lugar, ahorra espacio en disco al reducir el tamaño del ensamblado ofuscado. En segundo lugar, al sustituir los campos de enumeración por sus valores, añade una capa más de ofuscación y complejidad al código desensamblado, lo que hace más difícil que un posible atacante entienda la lógica y el comportamiento subyacentes.

Con la optimización de eliminación de tipos System.Enum de Babel Obfuscator, el desarrollador puede mejorar la seguridad y proteger la integridad de su código, y a la vez optimizar el tamaño y la legibilidad del ensamblado ofuscado.

Disgregate Removal

Disgregate Removal (eliminación de los metadatos de propiedades y eventos) es una optimización de Babel Obfuscator que elimina la información de propiedades y eventos de las tablas de metadatos correspondientes. Esta técnica convierte en métodos normales los métodos get_ y set_ de las propiedades, así como los métodos add_ y remove_ de los eventos. Al eliminar estos metadatos y convertir los métodos, se reduce el tamaño de los metadatos y, en combinación con el renombrado, se refuerza la ofuscación, ya que resulta más difícil reconstruir la propiedad o el evento originales.

Línea de comandos

Para activar la eliminación de los metadatos de propiedades y eventos, se puede usar la opción --disgregateremoval en la línea de comandos al ejecutar Babel. Por ejemplo:

babel.exe myapp.exe --disgregateremoval

Este comando activa la optimización que elimina los metadatos de propiedades y eventos del ensamblado ofuscado.

Tarea Babel de MSBuild

Para activar Disgregate Removal con la tarea Babel de MSBuild, puede establecer la propiedad <DisgregateRemoval> en true dentro de un elemento <PropertyGroup>:

<PropertyGroup> <DisgregateRemoval>true</DisgregateRemoval> </PropertyGroup> <Babel DisgregateRemoval="$(DisgregateRemoval)" />

Reglas XML

Además, Babel permite activar o desactivar de forma selectiva la disgregación de propiedades y eventos mediante reglas XML. Con ellas, el desarrollador puede especificar el comportamiento deseado para patrones o espacios de nombres concretos. Este es un ejemplo de regla XML que desactiva Disgregate Removal para el espacio de nombres «Utilities»:

<Rule name="disgregate removal" feature="optimizations" exclude="false"> <Pattern>Utilities.*</Pattern> <Properties> <DisgregateRemoval>false</DisgregateRemoval> </Properties> </Rule>

Con esta regla, las propiedades y los eventos del espacio de nombres «Utilities» no se someten a la optimización Disgregate Removal durante el proceso de ofuscación.

La optimización Disgregate Removal ofrece varias ventajas. En primer lugar, reduce el tamaño de las tablas de metadatos, con lo que el ensamblado ofuscado es más compacto. En segundo lugar, en combinación con el renombrado, mejora la ofuscación general del código, lo que hace más difícil que un atacante entienda y reconstruya las propiedades y los eventos originales.

Con la optimización Disgregate Removal de Babel Obfuscator, el desarrollador puede mejorar la seguridad y la protección de su código, optimizar el tamaño del ensamblado ofuscado y añadir una capa más de complejidad a la estructura del código, lo que dificulta la ingeniería inversa.

Last updated on