Ofuscar .NET MAUI
Babel Obfuscator puede ofuscar una aplicación .NET MAUI (Multi-platform App UI) procesando con su motor de ofuscación el archivo de ensamblado compilado (por ejemplo, un DLL o un EXE). El proceso de ofuscación modifica el ensamblado compilado para que el código sea más difícil de comprender y de someter a ingeniería inversa, sin dejar de conservar la funcionalidad de la aplicación.
Al ofuscar una aplicación .NET MAUI con Babel Obfuscator, se recomienda usar la versión más reciente del ofuscador y seguir las prácticas recomendadas de ofuscación, como ofuscar todo el código y los recursos, mantener intactos los nombres importantes mediante exclusiones y probar la aplicación ofuscada para asegurarse de que sigue funcionando correctamente.
Se usará la aplicación MAUI de ejemplo TwoPaneView, que puede descargarse de GitHub: https://github.com/dotnet/maui-samples .
git clone https://github.com/dotnet/maui-samplesEstas aplicaciones de ejemplo están pensadas para mostrar distintas funciones del framework MAUI y son un buen punto de partida para crear aplicaciones MAUI personalizadas.
Configurar la tarea Babel
Clonar el repositorio de ejemplo
Clone el repositorio del proyecto desde GitHub y guárdelo en su equipo local.
Abrir el proyecto de ejemplo
Vaya a la carpeta 7.0 del repositorio y, dentro de ella, a UserInterface/Views/TwoPaneView. Abra el archivo de solución TwoPaneViewSample.sln que hay en esta carpeta.
Abrir el archivo de proyecto
Una vez abierta la solución en Visual Studio, haga doble clic en el nodo del proyecto TwoPaneViewSample de la solución, que se encuentra en la ventana Solution Explorer (explorador de soluciones). Esto abre el archivo de proyecto en el editor de Visual Studio.
Añadir las instrucciones de MSBuild para Babel
Añada al final del archivo de proyecto las instrucciones de MSBuild necesarias. Indican a Babel Obfuscator cómo ofuscar el código del proyecto.
<UsingTask TaskName="Babel" AssemblyName="Babel.Build, Version=10.0.0.0, Culture=neutral, PublicKeyToken=138d17b5bd621ab7" />
<Target Name="Obfuscate" AfterTargets="Compile">
<ItemGroup>
<_BabelSearchDirectories Include="@(ReferencePathWithRefAssemblies->'%(rootdir)%(directory)')" Condition="'%(Extension)' == '.dll'" />
<BabelSearchDirectories Include="@(_BabelSearchDirectories->Distinct())" />
</ItemGroup>
<Babel InputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" OutputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" SearchDirectories="@(BabelSearchDirectories)" GenerateDebug="true" ObfuscateTypes="true" ObfuscateEvents="true" ObfuscateMethods="true" ObfuscateProperties="true" ObfuscateFields="true" ObfuscateXaml="true" VirtualFunctions="true" UnicodeNormalization="false" FlattenNamespaces="true" StringEncryption="hash" ResourceEncryption="true" ControlFLowObfuscation="if=on;switch=on;case=on;call=on" ControlFLowIterations="3" />
</Target>En el contexto de Babel Obfuscator, el grupo de elementos @BabelSearchDirectories se usa para definir la lista de directorios en los que el proceso de ofuscación busca para resolver las referencias a ensamblados que usa el proyecto.
Esta lista se genera extrayendo los directorios de búsqueda de la lista de ensamblados a los que hace referencia el proyecto. Babel Obfuscator examina los metadatos de los ensamblados a los que se hace referencia para determinar la ubicación de sus dependencias y añade esos directorios a la lista @BabelSearchDirectories. De este modo, el ofuscador encuentra todos los archivos que necesita para ofuscar correctamente el código del proyecto.
Compilar y ejecutar el proyecto
Ahora puede compilar y ejecutar la aplicación .NET MAUI ofuscada.

Aplicación MAUI de ejemplo TwoPaneView
Usar el paquete NuGet
Quienes tienen la edición Ultimate, Server o Data Center pueden usar el paquete NuGet Babel.Obfuscator en Windows, macOS y Linux. Esto hace más sencilla la configuración, ya que basta con añadir los ajustes de ofuscación propios de Babel, sin tener que configurar otros elementos de compilación relacionados. Con el paquete NuGet, los usuarios pueden prescindir de la tarea Babel y simplificar la configuración de sus proyectos.
- Añada Babel.Obfuscator.nupkg al proyecto TwoPaneViewSample.
- Defina las propiedades siguientes en el archivo de proyecto de TwoPaneViewSample:
<PropertyGroup>
<StringEncryption>hash</StringEncryption>
<ResourceEncryption>true</ResourceEncryption>
<ObfuscateXaml>true</ObfuscateXaml>
<ControlFlowObfuscation>if=on;switch=on;case=on;call=on</ControlFlowObfuscation>
<ControlFlowIterations>3</ControlFlowIterations>
</PropertyGroup>El proyecto de ejemplo con las instrucciones de la tarea Babel ya incluidas puede descargarse aquí .
Comportamiento del enlazador en una aplicación .NET MAUI para iOS
Al compilar una aplicación .NET MAUI, se usa un enlazador (ILLink) para reducir al mínimo el tamaño de la aplicación eliminando el código que no se usa. Solo conserva los métodos, propiedades, campos, eventos, estructuras y clases esenciales.
ILLink admite tres modos para las aplicaciones .NET MAUI en iOS y Mac Catalyst:
- Don’t link (no enlazar): se desactivan todas las optimizaciones del enlazador.
- Link SDK assemblies only (enlazar solo los ensamblados del SDK): solo se optimizan los ensamblados del SDK, eliminando los tipos y miembros que no se usan; sus propios ensamblados quedan sin modificar.
- Link all assemblies (enlazar todos los ensamblados): este modo aplica optimizaciones para reducir al mínimo el tamaño de la aplicación modificando el código intermedio.
Un ensamblado ofuscado con Babel Obfuscator contiene código dinámico y estructuras complejas que ILLink no detecta. Por ello, las optimizaciones agresivas como Link all assemblies pueden perjudicar el funcionamiento de la aplicación.
Para evitar posibles problemas con ILLink al usar ensamblados ofuscados, se recomienda configurar el modo de ILLink como «Link SDK assemblies only».