Así es como los programadores juegan a disfrazar el código de otra cosa

Cuenta la leyenda…

En 2006, en medio de su habitación, un joven programador llamado Andy Sloane se aburría, así que decidió 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 sencilla dona. Uno lo ve y se dice «bueno, bien, tiene forma de dona y hay letras dentro».

Pero en realidad no son solo letras. Esta dona encierra un código que al ser compilado y ejecutado muestra su magia. En este caso dibuja una dona 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 donas encerrado en una dona

Puedes probarlo tu mismos rápidamente en tu computadora si tienes 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.

Solo es necesario crear un nuevo fichero de texto llamado por ejemplo donut.c y copiar el contenido de este código. A partir de ahí lo guardas, compilas con ‘gcc -o donut donut.c -lm’, y ejecutas. Te aparecerá una dona 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

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.

El propósito es casi siempre 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 surjan 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.

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 donde sea

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).

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 y lo que hacen.


¿Quieres aprender a programar de manera profesional?

 

Te invitamos a formar parte de Azul School donde vas a tener acceso a cursos profesionales con certificado. Además tienes acceso a una red social de programadores donde puedes conocer gente de tu ciudad o país.

 

Si quieres acceder a todas las funciones te regalamos un descuento del 75% usando este cupón (no vas a encontrar este descuento en ningún otro lugar) Cupón: azulweb y lo puedes cambiar aquí: Haz clic aquí para cambiar el cupón del 75%.

 

También puedes probar la plataforma de forma gratuita y obtener un curso gratuito aquí: Haz clic aquí para probar la plataforma de forma gratuita.


Ernesto Mota

Ernesto Mota

Nací en el d.f., sigo siendo defeño, hoy radico en la hermosa ciudad de Cuernavaca, Morelos, soy Ing. en Sistemas computacionales, con un posgrado en Tecnologías de información, Doctorando en ambientes virtuales de aprendizaje y realidad aumentada, Tecnólogo es mi categoría laboral, y mi linea de investigación es la realidad aumentada aplicada a nuevos entornos de aprendizaje.

También te podría gustar...