En un post anterior vimos cómo era posible recuperar el código de cualquier programa de .NET a partir de su .exe o .dll usando un descompilador. Hoy vamos a ver cómo podemos tratar de evitarlo gracias al uso de un ofuscador de código.
Los ofuscadores de código, como su propio nombre indica, tienen la capacidad de complicar mucho el código original de modo que, aunque no cambia lo que hace el programa, y el computador es capaz de ejecutarlo sin problemas, cuando un humano lee el código fuente resultante es tan complejo que no es capaz de seguirlo.
Primero te cuento en este vídeo cómo puedes lograrlo y, a continuación, te dejo algunas consideraciones importantes sobre estas técnicas de ofuscación, el código de ejemplo, y los enlaces mencionados.
¡Vamos allá!
Debes tener en cuenta que la ofuscación no impide descompilar el código, sólo lo complica mucho, por lo que si lo que quieres ocultar es un detalle muy concreto (como una protección o licencia) no te servirá de mucho ante un "cracker" con determinación.
Existen algunas herramientas muy especializadas como De4DOT o DEObfuscar, que se especializan en deshacer la ofuscación con más o menos éxito según la complejidad del programa. Por ejemplo, aunque es muy efectivo con otros descompiladores, De4Dot no logra apenas nada con el código ofuscado con Obfuscar, el ofuscador que he utilizado en el vídeo. Sin embargo, DEObfuscar es mejor y puede aclarar bastante el código, aunque sigue siendo muy lioso, entre otras cosas porque no recupera nombres de funciones internas, variables, etc...
Por otro lado, no debes obsesionarte con ofuscar el código. Al final hay una verdad universal en programación que, cuando tienes experiencia acabas por descubrir: es mucho más complicado leer código que escribirlo. Y si no, prueba a leer y entender el código de cualquier aplicación Open Source que conozcas que no tenga muchos comentarios o, sin ir más lejos, código tuyo de hace un par de años si lo tienes. Lo más importante en una aplicación no trivial son las miles de pequeñas decisiones que se toman y por qué se toman, y no tanto la implementación concreta de las mismas. Por eso es muy importante mantener una buena documentación interna y externa.
De todos modos, si lo necesitas, espero que este vídeo te haya resultado interesante para aprender a proteger tu código fuente para .NET.
Te dejo el código fuente de las aplicaciones de ejemplo aquí:
Enlaces de interés: