Grado de ofuscación

3

Supongamos que tengo el siguiente código:

namespace MobileApp
{
    public class Storage
    {
        public Storage()
        {

        }

        public bool Save()
        {
            bool success = false;

            try
            {
                var settings = IsolatedStorageSettings.ApplicationSettings;

                if (settings.Contains("AppInformation7563"))
                {
                    settings["AppInformation7563"] = "GG3MDhlxnZDdDx7";
                }
                else
                {
                    settings.Add("AppInformation7563", "GG3MDhlxnZDdDx7");
                }

                settings.Save();
                success = true;
            }
            catch (Exception)
            {
                success = false;
            }
            return success;
        }

        public string Load()
        {
            string app = "false";

            try
            {
                var settings = IsolatedStorageSettings.ApplicationSettings;

                if (settings.Contains("AppInformation7563"))
                {
                    app = settings["AppInformation7563"].ToString();
                }
            }
            catch (Exception)
            {
                app = "false";
            }
            return app;
        }
    }
}

Básicamente, este código almacena una contraseña secreta en el almacenamiento aislado de Windows Phone para que esta contraseña se pase cada vez que se realiza una llamada al servicio web.

Si ofusco el código con DotFuscator, ¿también se confundirán "AppInformation7653" y "GG3MDhlxnZDdDx7"? ¿O seguirán siendo los mismos, solo se cambiarán los nombres de las clases y las variables?

Muchas gracias :)

    
pregunta Matthew 18.07.2013 - 14:58
fuente

2 respuestas

5

DotFuscator "cifrará" los literales de cadena, aunque me estremezco por el uso de la palabra "cifrado" en ese contexto . Sus valores de cadena "AppInformation7653" y "GG3MDhlxnZDdDx7" no aparecerán "como están" en el ensamblaje resultante, pero el código necesariamente contiene todo lo necesario para reconstruir sus valores respectivos en tiempo de ejecución. Así que no crea que tal ofuscación realmente frustrará ingeniería inversa ; puede disuadir a los atacantes menos motivados o competentes, pero los atacantes expertos solo se reirán de sus débiles intentos de ofuscación.

Como de costumbre, la ofuscación de código tiene más que ver con dar a una sensación de seguridad que hacer que las cosas sean más seguras. El verdadero valor de la ofuscación es que demuestra su intención de mantener el código interno algo en secreto, lo que puede ser útil en algunas situaciones legales (un ingeniero inverso no podrá afirmar que "no lo hizo" No sé ", de buena fe, que el código no debía ser examinado de esa manera). Como todas las cosas legales, esto puede o no funcionar en cualquier jurisdicción específica, y no soy competente para dar ningún consejo legal específico de todos modos.

    
respondido por el Thomas Pornin 18.07.2013 - 15:28
fuente
2

Sus nombres públicos de clase y método no cambiarán, ya que son referenciables externamente, no pueden. Dado que los tipos públicos pueden ser utilizados por otras bibliotecas y aplicaciones que el ofuscador no tiene conocimiento, deben conservarse.

En cuanto a los valores de cadena, pueden o no estar ocultos. Por lo general lo son, pero no he usado DotFuscator, así que no sé específicamente cómo funciona. Debe crear una construcción confusa y luego inspeccionarla con una herramienta como Reflector o ILSpy para determinar exactamente lo que ha podido hacer con su ensamblaje.

    
respondido por el Xander 18.07.2013 - 15:21
fuente

Lea otras preguntas en las etiquetas