David Bohm

Hay dos frases que definen mi manera de pensar:
Realmente no hemos prestado mucha atención al pensamiento como un proceso; hemos participado en pensamientos, pero sólo hemos prestado atención al contenido, no al proceso.
La capacidad de percibir o pensar de manera diferente es más importante que el conocimiento adquirido.
Ambas son de David Bohm.

lunes, 2 de noviembre de 2015

Ofuscar el código fuente

No es la primera vez que se me pregunta por este tema, así que vamos a tratar de analizar las cosas desde el principio, como a mi me gusta, pero sin liarnos mucho con el tema, que tiene tela.

Si vamos a la RAE, podemos ver el significado de la palabra ofuscar:
Del lat. tardío offuscāre 'oscurecer'.
1. tr. Deslumbrar, turbar la vista. U. t. c. prnl.
2. tr. Oscurecer y hacer sombra.
3. tr. Trastornar, conturbar o confundir las ideas, alucinar. U. t. c. prnl.
Real Academia Española © Todos los derechos reservados

Por eso, cuando desde el lado de la programación, el desarrollo de las aplicaciones, hablamos de la ofuscación del código fuente, se trata de hacerla mas oscuro, transformar, turbar el código fuente, y veamos el porqué.

Cuando entregas una aplicación a un cliente, no será la primera vez ni la última que tras cobrar el producto que has desarrollado, no te vuelven a llamar, ni para realizar una modificación, ni te contratan el mantenimiento, ni nada de nada. Pero a veces, ese cliente comete un error, su responsable de almacén, la secretaria de la asesoría que tiene uno de los módulos, etc. te llama para un mantenimiento. Es entonces cuando ves que tu aplicación, tiene un formulario mas, un punto de menú añadido, o que aquello que tu habías programado, ahora no se parece mas que en el nombre de la aplicación.

Esto es muy frecuente, y hay que atarlo bien atado por contrato firmado con el cliente. Porque aunque la gente no lo sabe, puede constituir un delito, y de los gordos. Lo que han hecho con tu ejecutable o ejecutables, es simplemente aplicar ingeniería inversa, o lo que hoy en día se llama "googlear", es decir, buscar una aplicación que te lo haga. Hay muchas, unas funcionan mejor que otras, por eso es conveniente ofuscar tu código, sobretodo si trabajas en .NET como yo lo hago habitualmente y lo que mas de cerca conozco, porque sino cualquier día verás tus algoritmos y formularios por ahí ejecutándose sin que tu hayas distribuido tu software.



Para ofuscar tu código, pasa lo mismo, existen un montón de aplicaciones, os puedo decir que he probado bastantes, y también tengo que advertir que el hecho de ofuscar el código no asegura que no puedan realizar ingeniería inversa con tus ejecutables.

Existen ofuscadores para los diferentes lenguajes de programación, C, php, java, etc. Además los hay de pago y gratuitos, y en general se integran con el compilador para que al compilar la aplicación automáticamente ya se está ofuscando el código.

Una vez que ofuscas tu código, estás impidiendo que el acceso al código fuente del ejecutable no sea tan "sencillo" como buscar un programa en internet y ejecutarlo. Si que es verdad que se puede llegar a localizar ciertos parámetros del programa como las variables públicas si las utiliza por ejemplo, pero poco mas. Hay que tener mas conocimientos para llegar mas adentro del ejecutable.

Como podéis ver, depende del lenguaje de programación utilizado, el ofuscador que vayamos a utilizar, incluso como os voy a mostrar ahora, existen ofuscadores online...cosa que yo nunca utilizaría, pero para gustos colores.

- Java, por ejemplo el proguard
- php, por ejemplo uno gracioso online: www.ofuscarphp.com
- c++, por ejemplo el C++ Source Code Obfuscator
- .NET, por ejemplo el Preemptive Dotfuscator

Y podríamos seguir la lista hasta el infinito y mas allá, fijaos si nos centramos en .NET la lista no es precisamente corta:

- Eazfuscator.Net (Free hasta la versión 3.3)
- ConfuserEx (Open Source),
- Obfuscar (Open Source),
- DotRefiner (Free),
- Orange Heap (Free),
- NCloak (Open Source),
- Phoenix Protector (Free),
- SharpObfuscator (Free),
- .NET Obfusasm (Free),
- Codefort (Free),
- Skater .Net (Free).
- ...

SharpObfuscator.png

Yo por ejemplo a nivel personal, para mis utilidades, he utilizado el Visual Studio Express 2012 con el Eazfuscator.Net hasta que dejó de ser Freeware. Funcionaba muy bien la verdad.

Espero haber aclarado un poco el concepto de ofuscar. Eso si, la polémica de si hay que ofuscar o no el código fuente para proteger la propiedad intelectual lo dejamos para otra entrada...

SaluDOS.