Blog de Jorge Pedraza

junio 20, 2010

Ofuscacion en ASP.NET

Filed under: Aplicaciones Web — JorgePedraza @ 12:34 am
Tags: , , ,

Hola la presente de este articulo es para resaltar de manera general el tema de ofuscación en el area de desarrollo web ASP.NET.

En la actualidad la plataforma .NET esta equipada con mecanismo que permite almacenar y explorar los objetos y tipos de datos contenido en determinado ensamblado. Dicho mecanismo se denomina reflexión (Reflection), y este se encargar de interrogar los metadatos acerca de un ensamblado, modulo y tipos relacionado con el CLR.

La reflexión tiene un conjunto de acciones dentro de la plataforma .NET: A nivel de diseño de aplicación, en tiempo de ejecución, medios de exploración para algunas IDE, etc. Un ejemplo de esto es el navegador de objeto propio Visual Studio 2010:

screenshot4

A partir de esto y basado en el principio de que la plataforma .NET generalmente trata las aplicaciones finales como un ensamblado .NET (*.DLL o *.EXE) , cuyo elemento contiene codigo compilado en lenguaje de maquina virtual especifico, en este caso Lenguaje Intermedio IL para su ejecución por parte del CLR de .NET Framework.

Entonce el IL (Lenguaje Intermedio) brinda un mundo de posibilidades para ir más alla de la reflexión elemental; una opción de esto es una via alterna para obtener una descripción completa del contenido de una aplicación, representada en algún lenguaje de programación de alto nivel. Para logra dicho proposito se puede contar con la herramienta .NET Reflector.

.NET Reflector Es una herramienta que permite analizar y explorar los ensamblados compilados en .NET, visualizando en ellos: codigo C#, Visual Basic, IL y otros.

En vista de este argumento, mucho se pregunta como se puede proteger el código de una aplicación, tal es el caso de ASP.NET. Para esto existe una series de mecanismos de protección, entre los cuales se menciona la Ofuscación.

El principio básico de la ofuscación es renombrar (cambiar de nombre) las series de identificadores cadenas de caracteres utilizados durante el desarrollo de una aplicación bien sea a nivel de codigo fuente o aplicación compilada en codigo de maquina.

Un ejemplo sencillo puede ser:

public int Suma(int valor1,  int valor2)
{
          return valor1 + valor2;
}

Ahora aplicando Ofuscación:

public int a(int a_0, int a_1)
{
          return a_0 + a_1;
}

Con esto se busca impedir o hacer más difícil los intentos de ingeniería reversa y desensamblado de una aplicación, para la obtención del código fuente cercano a la forma original. En ocasiones la ofuscación, hace que los programas resultantes sean más pequeños (aunque puede hacer que los programas sean más grandes en otros casos).

Entonce desde aquí empresa como preemptive desarrolla soluciones relacionada con la ofuscación de aplicaciones, como es el caso del Ofuscador .NET.

.NET Obfuscator (Ofuscador .NET) conocido tambien como Dotfuscator es una herramienta que ayuda proteger los programas .NET contra la ingenieria reversa, además de hacerlos más pequeño y eficiente.

Versiones de Dotfuscator:

  • Dotfuscator Software Services Community Edition (Edición de Instrumentación y Endurecimiento de Aplicaciones Ligeras): Esta edición reducida es incluida en tú copia de Visual Studio. Esta es una solución ideal para aquellos que requiere el nivel más basico de proteción de ingenieria reversa sobre aplicaciones sencillas.
  • Dotfuscator Commercial Edition (Edición de Instrumentación y Endurecimiento de Aplicaciones Empresariales): La versión de grado comercial de Dotfuscator, pretende apoyar desarrolladores y organizaciones que requiere el nivel más alto de proteción para su aplicaciones. Sí tu desarrolla software comercial, esta solución asegura soporte y proteción de la aplicación.
  Dotfuscator Software Services Community Edition.
Dotfuscator Commercial Edition.
Ofuscación    
Renombrar ensamblado cruz check check
Renombrar Esquemas check check
Renombrar Prefijos   check
Mejora de la inducción de sobrecarga   check
Ofuscación Incremental   check
Reporte HTML de renombramiento   check
Flujo de control   check
Encriptación de Cadena   check
Interfaz de Usuario    
Interfaz de usuario Independiente check check
Integración con Visual Studio   check
Linea de comando   check
MSBuild   check
Tipos de aplicaciones soportadas    
Aplicaciones Office check check
Aplicaciones SQL CRL   check
ClickOnce Integrado   check
SilverLight XAP   check
Directory WildCard   check
Métodos y Tipos genericos   check
Soporte de ensamblado C++ Administrado (modo mezclado)   check
Soporte de ensamblado satélite   check
Construir / Empaquetar    
Resigning ensamblado nombrado fuertemente.   check
Firmar Authenticode   check
Eventos pre y pos construición   check
Ruta de busqueda de ensamblado dependiente definido por usuario.   check
Soporte de Depuración    
Ida y Vuelta de PDB   check
Traducción de siguimiento de pila   check
Optimización de Implementación    
Vinculo de ensamblado   check
Reporte de eliminación HTML/XML    
Eliminación de codigo sin Uso   check
Eliminación de constante   check
Avanzada Proteción de aplicación    
Detección de manipulación check check
Notificaciones de manipulación   check
Marca de agua   check
Administración de ciclo de vida    
Token de vida incrustado check check
Expiración sobre acción por defecto check check
Expiración sobre acción personalizado   check
Origen de Token de vida personalizado   check
Soporte Inteligente de Tiempo de ejecución    
Punto Final personalizado check check
Punto Final RIS Comercial check check
Punto Final Portal de comunidades check check
Soporte entrada y salida Opt check check
Seguimiento de Aplicaciones check check
Mensajes SSL   check
Llaves extendidas (carga de datos personalizado)   check
Enviar PII   check
Enviar ID de instancia personalizada (Numero de serial de aplicación)   check
Tipos de mensajes inteligente de tiempo de ejecución    
Característica Tick Limitado check
Característica Duración Limitado check
Prueba de Rendimiento   check
Perfil de sistema   check
Precio Incluido gratis en visual Studio 2010 Solicitud de Couta
Descarga Incluido gratis en visual Studio 2010 Descarga de evaluación

Una vez comprendido el marco teorico, se procede a la practica donde se trata con enfoque una solución sencilla de un proyecto tipo aplicación ASP.NET 4.0 en lenguaje C# 4.0 junto a la herramienta Dotfuscator Software Services Community Edition.

PASOS SENCILLOS PARA USAR DOTFUSCATOR CE (COMMUNITY EDITION):

  1. Se abre una solución del tipo aplicación Windows o Web en Visual Studio 2010.
  2. Se pulsa clic sobre la opción Tools o Herramientas de la barra de menu de Visual Studio 2010.
  3. Se pulsa clic sobre la opción Dotfuscator Software Services.
  4. Se pulsa boton derecho del mouse sobre el nodo Dotfuscator1, y se hace clic en Add Assemblies.
  5. Se selecciona y abre el ensamblado previamente generado que esta ubicado en la carpeta BIN del proyecto de dicha solución.
  6. Ahora se dirige al nodo Configuration Options, nodo Renaming, Pestaña Exclusions. Finalmente desde aquí se marca aquellos elementos de codigo que no desea Osfucar o sea excluir.
  7. Se pulsa clic en el boton en forma de Triangulo situado en la barra de herramienta o la opción Build Project (Ctrl+B) del Menu Build.
  8. Finalmente nuestro ensamblado .NET ofuscado esta situado en la carpeta, por ejemplo: C:\Dotfuscated.

PUNTOS IMPORTANTES DE DOTFUSCATOR CE CON ASP.NET:

Cuando planifique la ofuscación de un ensamblado .NET por ejemplo *.DLL con la herramienta Dotfuscator CE, cerciórese que la opción Library Mode este desmarcada, ya que esta opción le indica al Dotfuscator que los elementos publicos de la clase no sean renombrados, y así se mantenie intacto la accesibilidad de los mismos a llamadas externas.

Como bien se conoce la estructura de un proyecto de aplicación ASP.NET; en una pagina ASPX se va encontrar vinculado tres archivos; un ejemplo esto es : Pagina.ASPX, Pagina.ASPX.cs, Pagina.ASPX.designer.cs, los cuales durante la compilación son procesados y vinculado en un archivo de extension *.DLL y Pagina Web ASPX (Pagina.ASPX).

Ahora sí procede a ofuscar el archivo con extensión *.DLL, se debe tomar como precaución la exclusión primordial de los nombres de paginas, controles y eventos que están referenciados en dicho ensamblado .NET los cuales tiene relación con nuestro pagina ASPX y así se logra mantener vinculado los identificadores usados en el desarrollo con la pagina ASPX.

descripcionexclusion

Después de ofuscar el archivo *.DLL, se obtiene el siguiente resultado visualizado a través de la herramienta Reflector .NET:

Capture5

Finalmente se puede colocar el archivo con extensión *.dll en la carpeta bin y las paginas ASPX relacionadas en la raíz de determinado directorio de aplicación del IIS.

Capture6

Otro punto que se puede resaltar en este tema, es la gestión de aplicaciones escrita en el Lenguaje Visual Basic 2010.  Para el cual se va encontrar limitado de ciertas características mencionadas previamente para Dotfuscator CE. Por ejemplo las aplicaciones bien sea del tipo Windows o Web en Visual Basic van a estar limitada para la ofuscación, ya que estas internamente gestiona el uso de métodos y tipos genericos a través del objeto My intrínseco de Visual Basic. Entonce para estos casos se sugiere usar la versión sín limitaciones de Dotfuscator (Dotfuscator Commercial Edition).

En resumen se puede notar que dentro del desarrollo de aplicaciones .NET, vamos a encontrar un tema de gran importancia como es la protección de la propiedad intelectual, a través de ciertos mecanismos como la ofuscación de codigo. Y esto puede ser posible con la herramienta Dotfuscator de la empresa preemptive.

Anexo Código fuente para ilustrar el tema: TestObfuscator (ASP.NET 4.0, C# 4.0)

3 comentarios »

  1. Un comentario, creo que está erróneo el comentario “Cuando planifique la ofuscación de un ensamblado .NET por ejemplo *.DLL con la herramienta Dotfuscator CE, cerciórese que la opción Library Mode este desmarcada”, debería ser Library Mode marcado.
    Citando como fuente la información de la documentación propia de la herramienta DotOfuscator.

    Library mode: This setting tells Dotfuscator that the selected input assembly constitutes a library. For obfuscation purposes, a library is defined as an assembly that is referenced from other components not specified as one of the inputs in this run. When an assembly is obfuscated in Library Mode, publicly visible items are not renamed, thus keeping your public API accessible to external callers.

    Comentario por sergio — octubre 27, 2011 @ 7:07 am | Responder

    • Hola Sergio.

      Gracias por tú comentario!
      Té explico: Sí revisa bien el articulo, yo coloque un titulo previo denominado: PUNTOS IMPORTANTES DE DOTFUSCATOR CE CON ASP.NET que se relaciona con el comentario resaltado por ti previamente.

      Una solución ASP.NET Web Application, por ejemplo son: Paginas.aspx + WebApp.DLL (Biblioteca de Vinculo Dinámico) bajo .NET Framework.
      Sí la intención es Ofuscar dicha Biblioteca (WebApp.DLL) se debe desmarca Library mode. Por que?
      Significado de Library mode según la documentación de PreEmptive es:
      Esta opción le indica a Dotfuscator que el ensamblado de entrada seleccionado constituye una biblioteca. Para fines de ofuscación, una biblioteca se define como un conjunto que se hace referencia en otros componentes no especificados como una de las entradas en esta ejecución. Cuando un Assembly está ofuscado en modo de biblioteca (Library mode), elementos visibles públicamente No se renombra, manteniendo su API pública accesible a los llamadores externos.

      Entonces sí verifica el codigo de ejemplo, se esta usando un clase llamada Matematica donde hay un elemento visiblemente publico Suma que será generado dentro del resultado WebApplication3.dll, para el cual se necesita Ofuscar (renombrar la clase Matematica y su método público) en dicho resultado y demostrar la ofuscación de una Aplicación Web ASP.NET.

      Bueno eso es todo por lo momento.
      Espero que esto sea de utilidad para aclara la duda generada.

      Saludos.

      Comentario por jorgepedraza — octubre 27, 2011 @ 12:39 pm | Responder

  2. Gracias por la aclaración, fue un error mio de interpretación.

    Un saludo

    Comentario por Sergio — noviembre 17, 2011 @ 5:40 pm | Responder


RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Crea un blog o un sitio web gratuitos con WordPress.com.

A %d blogueros les gusta esto: