martes, 12 de junio de 2012

Ofuscación de strings, contraseñas y ensamblados .NET

Tenemos un proyecto antiguo entre manos que tiene una contraseña metida en el código.
Sabéis que el código que genera Visual Studio es descifrable fácilmente, por lo que esa contraseña puede ser comprometida fácilmente.
Pongamos las cosas algo difíciles

LA ALTERNATIVA ALGO CHAPUCERA PERO VALIDA

Hay una porción de ese código que necesita ejecutarse con un usuario determinado y diferente al logueado, y para ello usamos una función que internamente usa el “logonUser” de advapi32.dll

Uso la mala técnica de “concatenación de chars” por no guardar la contraseña “a pelo” en los fuentes y ponerlo en bandeja a los fisgones, pero como más adelante veréis, esto no sirve de nada.

Compilamos el proyecto, generando el correspondiente fichero EXE.

Usamos el JetBrains DotPeek, un descompilador free en la línea de .net Reflector

Open… y buscamos nuestro ensamblado.

Navegamos un poco para buscar dónde teníamos la contraseña.


OPS!  La contraseña está perfectamente visible.

Para poder cifrar este ensamblado y poder entregarlo sin excesivo miedo a comprometer la contraseña, usaré un ofuscador. Recordaré que, aunque ofusquemos el código, no está 100% seguro, ya que alguien con conocimientos avanzados y echándole bastantes horas podría llegar a sacar la contraseña.


EAZFuscator, un ofuscador sencillito y free, nos hará la tarea de enmarañar nuesto código para que sea una tarea difícil entender el código fuente desensamblado.


Arrastramos el ensamblado EXE a la zona verde de la ventana, y ya estará ofuscado.


Volvemos a abrir con el DotPeek, y vemos que el código nos lo ha dejado hecho unos zorros… pero de eso se trataba!!!





 Lo dicho; seguro que echándole muchas horas y mucha paciencia podríamos llegar a sacar alguna cosa de un código ofuscado, pero por lo menos se lo hemos puesto algo difícil.

LA ALTERNATIVA RECOMENDADA

Microsoft recomienda, para estos casos, poner la contraseña en un archivo de configuración y cifrar la sección.




En el caso que se quiera distribuir un único EXE sin tener que adjuntar ficheros de configuración, siempre podremos incrustar el fichero de configuración dentro del ensamblado.


Saludos.

No hay comentarios: