Skip to content
← Todas las publicaciones
· Delta1 Labs Guía.NETWPFOfuscación

Cómo ofuscar una aplicación WPF sin romper el enlace de datos de XAML

Una guía paso a paso para proteger una aplicación de escritorio WPF con Nebula.NET — y mantener funcionando los enlaces, comandos y convertidores.

Las aplicaciones WPF son un objetivo común de ofuscación — se distribuyen a las máquinas de los usuarios finales, así que el IL está ahí mismo para decompilar. Lo único que hay que hacer bien es que XAML se enlaza a tus modelos de vista por nombre en tiempo de ejecución, así que esos nombres tienen que sobrevivir. Aquí tienes todo el proceso.

Por qué WPF necesita un poco de cuidado

Cuando escribes {Binding CustomerName} o Command="{Binding SaveCommand}", WPF resuelve CustomerName y SaveCommand por nombre en tiempo de ejecución mediante reflexión. Si la ofuscación renombra esas propiedades a a y b, el enlace falla en silencio — obtienes un campo en blanco o un botón muerto, con un error de enlace en la salida de depuración.

Todo lo demás — tu lógica de negocio, algoritmos, servicios — no tiene esa restricción y puede renombrarse, aplanarse y cifrarse por completo.

Paso 1 — preserva lo que XAML enlaza

El ajuste más simple y seguro para una aplicación WPF es preservar la API pública, porque los miembros enlazados del modelo de vista suelen ser públicos:

{
  "inputs": ["bin/Release/net8.0/MyApp.dll"],
  "outputDirectory": "protected",
  "preservePublicApi": true,
  "controlFlowObfuscation": true,
  "encryptStrings": true
}

Si un miembro enlazado no es público, excluye el modelo de vista explícitamente en lugar de dejar los nombres expuestos por todas partes:

{ "exclude": ["MyApp.ViewModels.MainViewModel"] }

Nebula también detecta automáticamente la mayoría del uso de reflexión y serialización, así que los convertidores y los tipos referenciados con {x:Type} se preservan por ti en general. Consulta Mantener tu aplicación funcionando.

Paso 2 — ofusca los internos a fondo

Tu superficie pública de modelo de vista se mantiene con nombres, pero el código que hay detrás es donde está el valor — así que apóyate ahí en el flujo de control y el cifrado de cadenas. Con preservePublicApi activado, los miembros privados e internos se siguen renombrando, y el aplanado del flujo de control se aplica en todas partes.

Paso 3 — ejecútala y navega por ella

Esta es la prueba de verdad. Ofusca, lanza la compilación protegida y recorre las pantallas — especialmente cualquier cosa con enlace de datos. Si un campo está en blanco o un comando está muerto, revisa la salida de depuración en busca de un error de enlace que nombre el miembro, y luego añade ese miembro (o su modelo de vista) a exclude.

Paso 4 — fírmala para su distribución

Los usuarios de escritorio se encontrarán con un aviso de “Windows protegió su PC / Editor desconocido” en un instalador sin firmar. Firma la salida protegida con tu certificado Authenticode (Nebula puede aplicarlo como parte de la ejecución) o distribuye a través de la Microsoft Store. Consulta Proteger distintos tipos de proyecto.

Resumen

  • Mantén preservePublicApi activado para que los miembros enlazados sobrevivan.
  • Excluye cualquier modelo de vista no público al que XAML se enlace.
  • Deja que el flujo de control + el cifrado de cadenas protejan los internos.
  • Ejecuta la aplicación y navega por las pantallas enlazadas como prueba de aceptación.
  • Firma el resultado antes de distribuirlo.

¿Listo para probarlo? Descarga Nebula.NET gratis y protege tu primera compilación de WPF en unos minutos.

Prueba Nebula.NET

Endurece tu código .NET en minutos — empieza con la edición gratuita.