sábado, 24 de septiembre de 2011

Ofuscación de código interpretado

Según la wikipedia, la ofuscación es:
En computación, la ofuscación se refiere al acto deliberado de realizar un cambio no destructivo, ya sea en el código fuente de un programa informático o código máquina cuando el programa está en forma compilada o binaria, con el fin de que no sea fácil de entender o leer.

Pues con esta definición en mente,  vamos a ofuscar el código del proyecto correspondiente al post anterior titulado "Decompilación de código interpretado". Para ello usaremos una herramienta gratuita llamada Eazfuscator.NET que proporciona unos resultado excelentes, casi a la altura de algunos de pago.

Esta herramienta se integra perfectamente en el entorno de desarrollo de Visual Studio:




Ofuscando el código al generar la versión release del proyecto:  




Si decompilamos el ejecutable que se ha generado con eazfouscator y lo comparamos con el de la entrada anterior, se observa que ahora ya no es tan trivial seguir el código, es más, resulta casi imposible entender nada:




En resumen, esta es un buena técnica de protección de código frente a un posible ataque de ingeniería inversa, pero no nos engañemos, no hay nada infalible y menos esto. Sin embargo sí da un cierto grado de tranquilidad en el despliegue de este tipo de código.

domingo, 18 de septiembre de 2011

Decompilación de código interpretado


Hace tiempo que quería escribir una entrada al blog que tratase de la decompilación de ejecutables, cuyo código es interpretado, como los que generan lenguajes conocidos como .NET o Java.

En este caso lo haremos con .NET y sin duda alguna, el mejor decompilador .NET es .NET Reflector de la compañía Red Gate. 

Sin embargo, no hace mucho tiempo que dejó de ser gratuito. Por lo tanto me puse a buscar alternativas y me encontré con ILSpy. Una alternativa que aunque joven, promete y mucho, además de ser open-source.

ILSpy servirá perfectamente para ver un ejemplo de decompilación .NET, donde descubriremos las vulnerabilidades de este tipo de lenguajes, para así, en sucesivas entradas, ver que técnicas tenemos disponibles para proteger un poco más este tipo de aplicaciones. 

Usaremos como ejemplo el típico winform de acceso a una aplicación, con un código de desbloqueo que es fijo dentro del ejecutable (HardCode). 
En donde al pulsar el botón Unlock nos mostrará en otra ventana, si el código es correcto o no:




Cargamos ILSpy, abrimos el ejecutable en cuestión y navegamos un poco por la estructura jerárquica del ensamblado y enseguida vemos que en Form1 hay un método cuyo nombre no puede ser más obvio "buttonUnlock_Click". Situándonos en esa referencia observaremos como en el marco derecho de la aplicación, se muestra el contenido del método desensamblado, poniendo de manifiesto la debilidad de estos lenguajes:




ILSpy acaba de nacer, pero tiene un gran futuro por delante, por todo ello, personalmente os animo a usarlo y apoyarlo todo lo que podaís.

En próximas entradas, hablaremos de la técnica de ofuscación de código como medida de seguridad ante este tipo de aplicaciones de decompilación.

Práctica de Lenguajes de Programación

Han pasado casi cinco meses desde mi última publicación y el motivo de ello no es otro que las prioridades que se asignan a la cosas (Familia, Trabajo, Estudios, ...) y claro por último, entradas al blog.

Intentaré hacer un esfuerzo y publicar como poco una vez por semana. No quiero perder el habito de escribir en el blog.

La entrada que nos ocupa no es otra que compartir la práctica de la asignatura de Lenguajes de programación del 2011, que en este caso es el desarrollo de un juego de mesa (Monopoly) y que lo que se pretende es la comprensión y aplicación de conceptos básicos del paradigma de programación orientado a objetos (POO) usando como lenguaje JAVA.

Espero que por lo menos sirva como orientación a la hora de encarar vuestras futuras prácticas y sobre todo me encantaría recoger todas las críticas 'constructivas' que se os ocurra.

Sin más dilación, anexo los enlaces de las descargas: