Este donut es un ejemplo de la magia del código ofuscado: así es como los programadores juegan a disfrazar el código de otra cosa

Este donut es un ejemplo de la magia del código ofuscado: así es como los programadores juegan a disfrazar el código de otra cosa
Sin comentarios Facebook Twitter Flipboard E-mail

En 2006 un programador Andy Sloane se aburría, así que se dijo, "voy a probar a hacer algo con código ofuscado". Dicho y hecho. Creó un pequeño programa cuyo aspecto en el editor de código era el de un sencillo donut. Uno lo ve y se dice "bueno, bien, tiene forma de donut y hay letras dentro".

Pero no son solo letras. Ese donut encierra un código que al ser compilado y ejecutado muestra su magia. En este caso dibuja un donut en 3D con caracteres ASCII que además está animado y gira sobre un eje. Es un ejemplo de código ofuscado, una disciplina que atrae a desarrolladores de distintos lenguajes de programación y que les permite crear piezas de código singulares disfrazadas, por ejemplo de arte ASCII, o generar sorprendentes funciones a partir de líneas de código aparentemente inocuas .

Un generador de donuts encerrado en un donut

Podéis probarlo vosotros mismos rápidamente en vuestro ordenador si tenéis acceso a Linux (también en Windows gracias al bash que proporciona WSL, es fácil acceder a él) y a un compilador como gcc.

Basta con crear un nuevo fichero de texto llamado por ejemplo donut.c y copiar el contenido de este código. A partir de ahí guardáis, compiláis con 'gcc -o donut donut.c -lm', y ejecutáis el resultado. Os aparecerá un donut girando en 3D similar al vídeo superior.

El ejemplo es sencillo pero igualmente sorprendente, y a partir de ese punto de partida este usuario llevó su ejemplo a una implementación más ambiciosa para luego explicar (cinco años después) que aquel sencillo código tenía mucha más miga de la que parecía.

Ofuscar el código es todo un arte, y tiene su propio campeonato (con trampas)

Hacer que el código haga cosas que parece que no está haciendo es todo un arte en sí mismo, y los programadores aficionados a esta disciplina suelen ir a contracorriente y producir código que es de todo menos entendible de forma sencilla.

Plane

El propósito es a menudo el de lograr por ejemplo ocultar ese código en imágenes ASCII aparentemente inocuas, pero también el de proteger el código para hacer que como decimos sea difícil entenderlo y proteger así su propósito (seguridad a través de la oscuridad).

Lenguajes como C o Perl son especialmente adecuados para este tipo de tareas, y esta disciplina ha hecho que aparezcan de hecho concursos y campeonatos como el conocido International Obsfuscated C Code Contest que se celebra de forma irregular (a veces un evento anual, otras pueden pasar dos, tres o incluso más años entre edición y edición) y en el que podemos encontrar ejemplos espectaculares de lo que se logra con este código.

El resumen de lo que hace cada pequeño programa participante en estas ediciones lo deja claro. Tenemos de todo: transcodificadores de audio a morse, pequeñas demos de Flappy Bird, codificador QR, generadores de GIF animado a partir de texto, simuladores de viejos ordenadores como un PDP-7/11, herramientas de factorización visual, calculadoras hexadecimales, pequeños juegos de tanques o incluso reproductores de ficheros de trackers musicales.

Codif

El concurso cuenta con ciertas reglas, pero desde que se creó una de las reglas es precisamente tratar de violarlas. "Hackear las reglas del campeonato es una tradición", decía Landon Curt Noll, uno de sus creadores, en 2011. Dichas reglas se crean con deficiencias que los programadores deben encontrar y aprovechar para ganar el concurso.

Código ofuscado por doquier

Las técnicas y elementos que utilizan los programadores no solo logran que el código haga algo, sino también importa el formato del código, que a menudo se esconde en forma de imágenes de arte ASCII o que también puede ser código que se auto-modifica (es decir, que altera sus propias instrucciones mientras que se ejecuta).

Chess1
El motor de ajedrez es alucinante: muestra el tablero de forma muy básica, pero la máquina juega contra ti como si de un juego completo de ajedrez se tratase.

Los ejemplos son numerosos y hay de todo, pero por ejemplo uno de los más llamativos es el llamado Toledo Nanochess, un motor ajedrecístico programado en tan solo 1.255 caracteres por parte de Oscar Toledo Gutiérrez, un programador mexicano que ha ganado cinco veces el campeonato de la IOCCC y que acabó escribiendo un libro para explicar qué hacía ese código tan singular. Más tarde fue más allá y creó el Toledo Picochess, aún más reducido y que con tan solo 944 caracteres lograba lo mismo.

Estas técnicas son desde luego llamativas y han hecho que por ejemplo exista un subrredit dedicado a este tipo de código, pero también todo tipo de retos en otros foros como Stack Exchange o Stack Overflow en los que por ejemplo se proponen retos que los programadores logran resolver de formas tan distintas como originales. Hay quien simplemente trata de explicar cómo hacen estos programas lo que hacen.

Los ejemplos son también numerosos en sitios como GitHub -atentos a esta animación de fluidos en ASCII- y desde luego todo ello demuestra que estamos ante otro particular ejemplo de la creativad de unos desarrolladores que no se conforman ya con programar: lo hacen de formas realmente originales (y enrevesadas).

Comentarios cerrados
Inicio