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