2.4.07

Ofuscar en Visual Basic .Net

Hace unos cuantos posts veíamos lo sencillo que resultaba decompilar un ejecutable realizado en Visual Basic .Net (para Visual C# resulta igual de sencillo).

Por tanto, para evitar que algún curioso tenga a su disposición el código fuente de nuestra aplicación deberemos ofuscar nuestro programa. ¿Y que es ofuscar? Pues básicamente ofuscar consiste en ocultar ese código MSIL intermedio haciéndo dificil su lectura con un decompilador como Reflector (fijaros que he dicho difícil y no imposible). Para ello utilizaremos Dotofuscator, el ofuscador que trae Visual Studio 2005. Veamos un ejemplo:

Tenemos un simple ejemplo de un botón con un Hola Mundo. Si decompilamos este pequeño ejemplo con un decompilador como Reflector tendremos acceso completo a todo su código fuente:


Para evitar esto y conseguir que alguien que utilice un decompilador no consiga ver nuestro código fuente utilizaremos Dotofuscator, un ofuscador de código que viene con Visual Studio 2005. Para ello, deberemos seguir los siguientes pasos:

1) Generar nuestro proyecto (Menú generar del Visual Studio).
2) A continuación, buscamos el icono del Dotofuscator Community dentro de nuestra carpeta de programas (dentro de la carpeta Visual Studio Tools). Es necesario que tengamos Visual Studio abierto para poder ejecutar Dotofuscator o no nos dejará cargarlo.


Una vez cargado el Dotofuscator seleccionamos la opción de crear un nuevo proyecto y a continuación vamos al icono de la carpeta para abrir nuestro proyecto.


Ahora seleccionamos nuestro ejecutable de la carpeta bin\Release. En nuestro ejemplo HolaMundo.exe


Una vez cargado nuestro ejecutable (vemos como nos aparece en la pestaña de Entrada) lo único que tenemos que hacer es hacer clic en el botón play para que Dotofuscator comience su trabajo.


Cuando comencemos a ofuscar el programa nos indica si deseamos guardar el proyecto. Le decimos que sí y escribimos una ruta donde almacenaremos el fichero xml con los datos del proyecto de ofuscación. Tras esperar unos momentos, Dotofuscator mostrará una pantalla resumen donde indica los resultados de la ofuscación, mostrando el porcentaje de cambio e información del proceso:


A continuación sólo nos queda ir a la ruta donde hemos almacenado el xml del proyecto de ofuscación y abrir la carpeta Dotfuscated. Esta carpeta tendrá dos archivos:

-El exe con el mismo nombre que nuestro proyecto (HolaMundo.exe) pero ofuscado.
-Un archivo llamado map.xml que tiene la correspondencia de variables, funciones, etc… de nuestro código fuente con las que Dotofuscator escribe. Es decir, si necesitamos ver por que valor ha modificado un nombre de una función sólo tendremos que mirar dentro de este archivo de correspondencia. Por supuesto, este fichero xml no deberá ser distribuido o la ofuscación no será efectiva.

Por último, copiaremos el fichero exe que tenemos en esta carpeta de Dotfuscated en nuestra carpeta Release del proyecto y tendremos nuestro proyecto ofuscado y listo para ser distribuido.

Si queremos comprobar el resultado de la ofuscación sólo nos queda cargar Reflector y comprobar los efectos (cargaremos en el decompilador el exe que acabamos de obtener tras la ofuscación):


Para terminar, os recomiendo que todos aquellos programas o proyectos que tengáis intención de distribuir los ofusqueis y así evitareis que algún curioso tenga a su disposición un código fuente que no debería tenerlo (siempre y cuando esa sea vuestra intención).

Entradas relacionadas:

- Reflector para .Net
- Vbdox para Visual Basic .Net
- Vbdox para Visual Basic 6
- Hello World en multitud de lenguajes

3 comentarios:

Anónimo dijo...

Buen manual para ofuscar el codigo, que pena no haberlo tenido hace unos dias, que me hacia falta, menos mal que al fin lo descubrí jeje. El caso que al principio parece dificil pero luego no tiene nada...

Un saludo

Anónimo dijo...

muy buen post hermano..gracias x contribuir con la gentita!!!

Pedro dijo...

Enhorabuena por el manual....
He probado una ofuscación de un assembly mío en CSharp y sólo ha ocultado un 10% de las variables y de los métodos. Me parece muy poco. El código fuente se entiende perfectamente. ¿ Alguien sabe a qué se puede deber ? ¿ Hay algún parámetro que le indique el grado de ofuscación ?

Un saludo.