.net wpf .net-4.0 obfuscation baml

.net - Obfuscator que admite WPF correctamente



.net-4.0 obfuscation (5)

¿Qué opciones existen para una buena herramienta ofuscadora para .NET que sea compatible con WPF en .NET 4.0?

En particular, ¿qué herramientas de ofuscación manejan la reescritura de BAML dentro de ensamblajes WPF y manejan referencias de ensamblaje cruzado dentro de BAML?

Si bien la mayoría de los ofuscadores incluyen compatibilidad con "WPF" y ".NET 3.5" o ".NET 4", en la práctica no pueden reescribir las referencias BAML incorporadas, lo que hace que las llamadas de ensamblaje cruzado que utilizan WPF se manejen de forma incorrecta. Esto evita su uso en aplicaciones WPF a gran escala.


Bueno, WPF depende en gran medida de la Reflexión y el cambio de los nombres de sus propiedades puede no funcionar correctamente ya que el enlace no funcionará correctamente. Las herramientas de Obfuscater no detectarán las referencias de cadenas en el código que pueden estar allí dentro de su ViewModel, y así sucesivamente. Y lo que sea que hagas. Herramientas como Blend pueden, de todos modos, crear copias de plantillas y estilos de BAML y esa es la razón por la que se introdujo BAML en lugar de crear código ejecutable desde xaml.

Y como es BAML es solo una representación gráfica, en tiempo de ejecución las personas también pueden usar las herramientas de Snoop para identificar su vista de los controles en tiempo de ejecución.

Sin embargo, hay una herramienta gratuita que genera el código WPF detrás del archivo como una representación gráfica de objetos CLR pura en lugar de BAML, http://xamlgenerator.codeplex.com/ (Descargo de responsabilidad: este xamlgenerator es una herramienta gratuita creada por mi empresa)


Descargo de responsabilidad: trabajo para PreEmptive Solutions (los creadores de Dotfuscator).

Si probaste Dotfuscator hace un tiempo, probablemente deberías volver a intentarlo. Estamos mejorando constantemente nuestras capacidades de análisis y reescritura XAML / BAML. Debería poder obtener una nueva versión de evaluación gratuita fácilmente desde el sitio web de PreEmptive (o contactando ventas).

La mayoría de nuestros clientes pueden ofuscar la mayoría de sus aplicaciones WPF / Silverlight / WP7 sin exclusiones significativas. Incluso si la ofuscación BAML rompe algo en su aplicación, debe poder excluir de manera selectiva solo aquellos elementos que no deben renombrarse.

Si tiene un escenario específico de algo que rompemos durante la ofuscación, por favor continúe y envíelo, siempre estamos buscando mejorar nuestro producto.

En este momento, el único otro offuscador de .NET (que yo sepa) que afirma ser capaz de modificar XAML o BAML es CodeFort. Obviamente estoy predispuesto, así que te dejaré investigar los productos y hacer tu propio juicio :)


En nuestra empresa, utilizamos Agile.NET Obfuscator , es compatible con la aplicación WPF y puede proteger / encriptar los recursos administrados, incluidos los archivos BAML.

Descompilando usando ILSpy:

Antes (con solo cifrado de código)

Después (con cifrado de recursos)


Probé CodeFort en una aplicación de ensamblaje múltiple Silverlight 4 con éxito parcial. La aleatorización de referencia y el cifrado de cadenas funcionan de maravilla y aportan cierto grado de protección.

Renombrar la función en CodeFort es un gran desastre. Permitir el cambio de nombre (con soporte XAML) en todos mis ensamblajes rompió la aplicación. Intenté entonces excluir todos los tipos (incluidos todos los miembros) del cambio de nombre, lo que consumió mucho tiempo debido al mal UX. Eso no dio vida a la aplicación.

La depuración y la solución de problemas tampoco funcionan bien. CodeFort no respeta los archivos PDB. La única forma de solucionar el problema era permitir que el depurador se rompa con todas las excepciones lanzadas. Ahora veo el analizador XAML quejándose de app.xaml, que se ve bien.

Por ahora, me limito a hacer referencia al encriptado y al encriptado de cadenas.


Eazfuscator.NET realiza un correcto cambio de nombre WPF desde la versión 3.5. Pusimos grandes esfuerzos de I + D para crear una solución que simplemente funcione. El cambio de nombre XAML está impulsado por un analizador perfecto que tiene en cuenta los enlaces, comandos y todos los demás aspectos de XAML para ofrecer resultados precisos. Puedes darle una oportunidad.