Reflector - código ofuscado

5

Ejecuto Reflector para descompilar un programa y parece estar ofuscado.

Tengo el siguiente resultado, no es muy útil.

¿Alguna idea de cómo descompilar el código ofuscado?

  [CompilerGenerated]
    get
    {
        // This item is obfuscated and can not be translated.
    }
    [CompilerGenerated]
    set
    {
        // This item is obfuscated and can not be translated.
        switch ((1 == 1))
        {
            case true:
                goto Label_0020;
        }
        goto Label_0018;
        if (((0 == 0) ? 0 : 1) != 0)
        {
        }
        this.eval_t = value;
    }
    
pregunta AaronS 06.02.2012 - 18:38
fuente

4 respuestas

5

En términos técnicos, descompilar el código ofuscado es lo mismo que descompilar el código no ofuscado. La forma en que funciona la ofuscación en .NET es hacer que resulte ridículamente difícil seguir la lógica de los códigos de ruta al enrutar las llamadas a través de tipos / métodos / propiedades / etc nombrados al azar de maneras no obvias. El objetivo principal de la ofuscación es evitar que las personas descompongan el código a través de Reflector y que comprendan cómo funcionan los elementos internos del código.

No hay una manera fácil de salir de la ofuscación. Usted está bastante atascado con caminar el código como está.

    
respondido por el Steve 06.02.2012 - 20:25
fuente
4

¿Has probado ILSpy?

enlace

He tenido bastante buena suerte con el código ofuscado, todavía parece basura debido al cambio de nombre de la variable, pero puedes seguirlo bastante bien.

    
respondido por el StrangeWill 06.02.2012 - 19:38
fuente
3

En realidad, hay varios (al menos 4) tipos de ofuscación muy diferentes, que van desde el simple cambio de nombres de variables y métodos a nombres "anónimos", a la lógica de programas de mutilación e incluso a un motor de eliminación de ofuscación en tiempo de ejecución.
Las herramientas para hacerlo van desde los complementos gratuitos (algunos programadores incluso escriben todo su código de esa manera :)), hasta herramientas comerciales caras y de gama alta. Debería saber con qué está tratando, dependiendo de que la respuesta puede ser diferente.

En su caso, su código parece que es probablemente el Nivel 2, es decir, con algunos problemas de ruta de código, no solo variables. Lo que significa que sigue siendo perfectamente válido, con los mismos resultados exactos, simplemente increíblemente difícil de analizar manualmente. (Si solo se tratara de nombres de variables, podría cambiar los nombres de forma incremental, dependiendo del contexto y el rango, y tratar de averiguar a partir de ahí).

No tengo una solución simple para ti, pero la pregunta es: ¿qué quieres hacer con ella?

  • Si desea recompilarlo, con pequeños cambios, debería funcionar bien, no será demasiado complicado, a menos que realmente necesite entender lo que es qué.
  • Si desea revisarlo manualmente en busca de fallas - Buena suerte, lo necesitarás.
  • Por otro lado, no deberías tener ningún problema alimentando esto a un escáner de código automático. Las herramientas de gama alta (:-) ) debería no tener ningún problema en analizar esto (pero no prometer), aunque intente verificar el Los resultados, o ubicar la línea de código original, pueden resultar difíciles. Pero al menos podrías obtener algo de visibilidad en el nivel de seguridad.
respondido por el AviD 23.02.2012 - 19:21
fuente
3

Es difícil decir qué ofuscador se usó, pero de4dot (.NET deobfuscator) puede ayudarlo: enlace

    
respondido por el 0xd4d 01.03.2012 - 03:04
fuente

Lea otras preguntas en las etiquetas