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:

lunes, 25 de abril de 2011

RootKit

RootKit viene a ser algo así como un kit de herramientas (aplicaciones software) para el usuario root de un sistema.

Esto se traduce en que en nuestro sistema operativo (Windows, Linux, Mac, ...) un tercero puede instalar un kit de herramientas de administración, ocultandose completamente ante nuestros ojos y dejando una puerta abierta a la imaginación del intruso (espionaje, botnet, ...), pudiendo controlar absolutamente todo lo que se haga en nuestra máquina.

Seamos un poco más explicitos. 

Imaginemos que el ministerio de defensa de un pais utiliza un sistema operativo windows en el cual y por desgracia exite un rootkit instalado en él, ¿podeís imaginar el uso que el atacante podría hacer de esa máquina?

O incluso esa P.I.M.E. y no tan P.I.M.E., que generalmente se pasa por el arco del triunfo la seguridad de su empresa, porque piensa que con un antivirus gratuito es más que suficiente, podría ver como su producto (o la información interna de este) viaja por las autopistas digitales, posiblemente a un destinatario que perfectamente podría ser la competencia directa.

Esto son solo casos hipotéticos imaginados solo por una mente retorcida como la mía, pero para que se entienda el alcance de esto, podeís visitar los siguientes enlaces:




Como se puede apreciar, incluso ya existen rootkit para Android, ahora tan de moda.

Lo fascinante de esta técnica es que es sumamente difícil de programar, detectar y eliminar.

Con este post no pretendo sembrar el pánico, sino todo lo contrario. En un mundo digital, en la era de la conectividad entre máquinas y personas, hay que saber que riesgos potenciales existen y como saber detenerlos.

Como siempre recomiendo que se amplien conceptos visitando algunos sitios como los siguientes:



Resumenes de la asignatura de estadística para la ITIS por la UNED

Jamás pensé que la estadística diera para tanto.

Después de cursarla he comprendido la importancia que adquiere en cualquier ámbito científico.

Extensa en temario pero amena en estudio, eso sí, hay que hacer muchísimos ejercicios para asimilar bien todos los conceptos.

A continuación están los resumenes que realicé hasta el tema 8 del libro "Probabilidad y estadística para la ingeniería y ciencias" de Devore, además de un formulario estadístico que preparé, para memorizar gran parte de las fórmulas que se usan en los exámenes (!ojo!, no están todas):