none
Ofuscar dll de aplicación .Net RRS feed

  • Pregunta

  • Hola a todos:

    En la empresa estamos desarrollando un producto que se va a distribuir comercialmente, pero debemos proteger la propiedad intelectual del producto, por lo que estamos analizando herramientas de ofucación como dotFuscator Professional y .Net Reactor.

    Quisiera saber si alguien tiene experiencia con la ofucación de aplicaciones, ya que no hemos logrado determinar si este proceso hace que las aplicaciones funcionen más lento.

    miércoles, 16 de septiembre de 2009 13:42

Todas las respuestas

  • Hola Claudio,

    la ofuscación de código en ningún momento afecta el rendimiento de la misma. En definitva lo que la ofuscación hace es renombrar todas las funciones, variables, clases y todos los miembros de las mismas, asignandoles nombres que no sean representativos de las mismas. Hay muchos métodos diferentes de ofuscación. El más básico podria consistir en, dada la siguiente clase:

    public class Persona
    {
           private string nombre;
           private string apellidos;
           private int edad;

           public string Nombre
           {
                 get
                 {
                      return nombre;
                 }
                 set
                 {
                     nombre=value;
                 }
           }
    }

    se ofuscaría, por ejemplo de esta forma:

    public class A
    {
           private string a;
           private string b;
           private int c;

           public string Aa
           {
                 get
                 {
                      return a;
                 }
                 set
                 {
                     a=value;
                 }
           }
    }

    por lo tanto, una clase que consumiera esa clase tal que así:

    Persona persona=new Persona();
    persona.Nombre="yo";
    persona.Apellidos="mismo";
    persona.Edad=12;

    se ofuscaría tal que así:

    A p=new A();
    a.Aa="yo";
    a.Ab="mismo";
    a.Ac=12;

    Como ves, se hace más complicado seguir el código. hay métodos de encriptación más complejos, en los que se utilizan códigos hexadecimales para renombrar los miembros o incluso mediante encriptaciones.

    Pero piensa que lo que estás ofuscando es el código fuente. Una vez compilado, da igual el nombre que le hayas dado a las propiedades o a los atributos de clase.



    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    miércoles, 16 de septiembre de 2009 14:14
  • hola

    La verdad no tengo mucha experiencia ofuscando codigo, pero puedo comentarte algunos tips que podrias implementar.

    En principio no creo que a nivel de rendimiento afecte demasiado, seguro temas de codificacion no tan performante, o el acceso a al red o a la db sean temas mas preocupeantes a nivel de performance que el que pueda agregar la ofuscacion

    igualmente podrias crearte algunso test para medirla, mas que nada test de carga, en donde se simila la interaccion de usaurio concurrentes a la aplciacion y se mide la performance.

    puedes crear dos deploy uno ofuscado y otro sin ofuscar y ver las diferencias de respuesta

    Monitoring and Analyzing a Load Test Result

    es la mejor prueba que puedes hacer ademas luego publicar en tu aplicacion el rendimiento que esta tiene a los cliente con las graficas esto pega mucho a nivel de ventas

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 16 de septiembre de 2009 14:17
  • Hola Claudio,

    Yo he ofuscado aplicaciones y dlls con el Dotfuscator Community Edition que viene en visual studio y no he notado problemas de rendimiento en ningún caso.

    Eso si, como bien dice Javier, lo más básico es esos cambios de nombre. Si tu tienes una aplicación ofuscada, la cual llama a una dll ofuscada puedes tener algún problema, ya que si la aplicación llama al método persona de una clase de la dll llamada persona la cual ha sido renombrada por A durante el proceso de ofuscación, la aplicación no sabrá que se llama A.

    Esto no supone un gran problema ya que se pueden crear restricciones, reglas, etc... donde por ejemplo puedas decir que la clase persona se quede con ese nombre (porque va ha ser llamada desde fuera, mientras que las demás puedan cambiar de nombre).

    Espero que te sea de ayuda.

    Saludos,

    Eduardo López
    martes, 6 de octubre de 2009 14:00