26 de agosto de 2009

De la importancia de Ofuscar

Este Software no arranca ni a la de 3.
Respuesta: Espera un momento que levante el capó y vemos el código.

A raíz de alguna de las entradas que Eduardo Abril publicó sobre ofuscación de exploits javascript y php recordé que una vez me bajé un interesante juego de cartas (bastante adictivo, añado) el cual exigía 10 eurazos por poder disputar las partidas completas, sino se te cortaban a la mitad de forma “casi” aleatoria.

Ni corto ni perezoso y dado que la interfaz me era familiar indagué, volví a indagar y descubrí que era un Visual Basic 6.0, la cosa me sonaba mucho así que me dije este código se puede de-compilar de un plumazo, y ahí está:

Visual Basic decompiler es una sencillísima herramienta de las muchas que hay para decompilar código, este caso en Visual Basic. Da igual que trabajeis con C#, C++, Java o php, salvo que el código esté protegido será posible sacarlo. Esto es especialmente problemático en Software distribuido como cliente pesado y si no es bien atajado surgen cracks como setas, solo hay que tener paciencia repasar el código… en este caso encontré que la casilla de introducción de clave del producto era un textbox donde se apilaba su valor y se invocaba a otra librería bien conocida:

….

loc_0096942B: call msvbvm60.dll.__vbaFreeVar

loc_0096942D: lea edx, var_24

loc_00969430: push 00430D74h ; "clave"

loc_00969435: push edx

loc_00969436: call 00925A50h

Las librerías también pueden ser de-compiladas, por lo que ya fue coser y cantar. Este pequeño ejemplo debe hacernos valorar si es necesario revisar el ciclo de vida de nuestros proyectos para implementar estos requisitos de seguridad, liberar un producto sin ofuscar puede ser una piedra lanzada contra nuestro propio tejado.

Un sector que tiene gran experiencia en este tema es el de los videojuegos, donde muchas empresas se han decantado por obligarte a “autenticarte” contra sus servidores cada vez que inicias el juego (aunque no juegues por Internet), es el caso de Half Life 2 o el futuro Command & Conquer 4.

Salu2

2 comentarios:

Homo libris dijo...

En efecto, el tema de la distribución del código sin una más que necesaria ofuscación (en particular son bastante sensibles las aplicaciones .NET y Java, al poder recuperarse el código fuente prácticamente tal y como se escribió, al estar "compilado" a código intermedio y necesitar de la compilación final en la máquina donde se ejecuta). Esto es algo que no siempre se tiene en cuenta en las empresas, y puede constituir un verdadero "regalo" para quienes desean hacerse con una copia completamente funcional de nuestro software.

El cifrado del código y de las zonas de memoria donde se ejecuta el código durante el tiempo de ejecución son otra interesante herramienta a tener en cuenta si queremos que nuestro código esté algo más seguro.

Una interesante entrada. Por cierto, ¿qué tal fue la partida? ;)

__
Mithdraug.

GigA ~~ dijo...

Bueno este es sin duda un tema muy interesante, intentaré profundizar en próximas entradas, atendiendo también al cifrado en memoria.

Lo que desde luego es necesario es incorporar esta ofuscación al ciclo de vida de los proyectos, sino, ¿que licencias venderemos?

Salu2

PD: Soy un crack a las cartas :D