Nebula.NET
Proteger apps de .NET MAUI y Xamarin
Ofusca una app de .NET MAUI (o Xamarin) con Nebula.NET — protege los ensamblados de tu app manteniendo intacto el enlace de datos de XAML, en Android, iOS, Windows y Mac Catalyst.
Las apps de .NET MAUI (y las de Xamarin heredadas) distribuyen tu lógica como ensamblados gestionados de .NET en cada plataforma — Android, iOS, Windows y Mac Catalyst. Nebula los protege igual que protege cualquier ensamblado gestionado: trabaja a nivel de IL, así que un ensamblado de app de MAUI se ofusca, se virtualiza y se endurece exactamente igual que una app de WPF o de consola — solo tienes que mantener intactos los miembros a los que enlaza tu XAML.
Qué proteger y qué conservar
MAUI usa enlace de datos de XAML, que resuelve los nombres de los miembros como cadenas en tiempo de ejecución. Así que la regla refleja la de WPF:
- Mantén con nombre los miembros enlazados. Las páginas, los modelos de vista, sus propiedades públicas enlazadas y comandos, los convertidores de valores, y cualquier tipo referenciado por nombre en XAML deben conservar sus nombres.
preservePublicApi: truecubre el caso habitual (los miembros enlazados son públicos); Nebula también autodetecta la mayoría de los patrones de enlace. Para cualquier cosa enlazada pero no pública, añádela a tu lista de preservación. - Ofusca los internos. Tu lógica de negocio, algoritmos, reglas de precios, comprobaciones de licencia y métodos auxiliares no tienen ninguna dependencia de XAML — renómbralos, aplana su flujo de control, cifra sus cadenas y (Enterprise) virtualiza los más sensibles.
- Los nombres de
[DllImport]/ de servicios de plataforma se preservan automáticamente.
{
"preservePublicApi": true,
"controlFlowObfuscation": true,
"encryptStrings": true,
"virtualizeMethods": true,
"virtualizeInclude": [ "MyApp.Licensing.LicenseCheck.Validate" ]
}
Dónde encaja en la compilación
Ofusca los ensamblados gestionados después de la compilación normal, antes del empaquetado/AOT:
- Android / Windows / Mac Catalyst: ofusca el ensamblado de app compilado y luego empaqueta como de costumbre.
- iOS: iOS usa AOT, y el enlazador/AOT se ejecutan sobre tus ensamblados — ofusca el IL gestionado antes del paso de AOT/publicación, y asegúrate de que todo lo referenciado por reflexión o por XAML se preserve para que el enlazador lo mantenga.
Como Nebula transforma la salida compilada y no necesita cambios en el código fuente ni en el proyecto, se integra en una canalización CI de MAUI como cualquier otro paso posterior a la compilación (consulta MSBuild y CI).
Runtime multiplataforma
La virtualización de código de Enterprise distribuye un pequeño Nebula.Runtime junto con la app; apunta a .NET Standard 2.0, por lo que se carga en todas las plataformas de MAUI (Android, iOS, Windows, Mac Catalyst).
Verificado
Construimos una app de MAUI, compilamos su plataforma de Windows y ofuscamos el ensamblado de app resultante con la canalización completa de Enterprise — renombrado, flujo de control agresivo, cifrado de cadenas, enmascarado de constantes y virtualización. El resultado se verifica como estructuralmente válido, con el modelo de vista enlazado por XAML y sus propiedades enlazadas preservados mientras la lógica de cómputo interna se virtualiza; y el mismo patrón de modelo de vista, ofuscado de forma idéntica y ejecutado, devuelve resultados idénticos byte a byte (incluida la propiedad enlazada).
Nota: una app de MAUI en ejecución es inherentemente accesible en el dispositivo, y las interacciones del AOT/enlazador de iOS varían según el proyecto. La ofuscación eleva sustancialmente el coste de aplicar ingeniería inversa a tu código de MAUI; como siempre, la lógica y los secretos genuinamente secretos pertenecen a un servidor. Prueba tus plataformas específicas (especialmente iOS) tras activar la protección.