Programa muy ingenioso en C «Akari»

IOCCC

El Concurso Internacional de Código C Ofuscado o IOCCC – en inglés International Obfuscated C Code Contest – es un concurso que nació en 1984 y que, en cada una de sus hasta ahora 22 ediciones, ha premiado a los programas más llamativos (útiles y a veces poco útiles) cuyo código es ilegible, es decir, está ofuscado u oscurecido intencionadamente.

Aunque las reglas no son demasiado claras al respecto, para participar «basta» con presentar un programa completo y propio de menos de 4096 bytes con el objetivo de:

– Escribir el programa C más oscuro/ofuscado.

– Mostrar la importancia del estilo de programación, de una manera irónica.

– Forzar los compiladores de C con código inusual.

– Ilustrar algunas de las sutilezas del lenguaje C.

– Proporcionar un foro seguro para el código C más pobre :

En este post les hablaré sobre uno de los programas ganadores del 20vo Concurso (2011)

Best of Show. Akari.c

El código fuente consta de:

Makefile

akari.c

example.ppm

hint.html

hint.text

https://princessgentoo.files.wordpress.com/2020/01/bd037-ioccc-akari-downsampler.jpg[/align]

Descripción:

akari es una utilidad de downsampling de imagenes que acepta 3 formatos de entrada, y otras aplicaciones que iremos descubriendo

* PGM (netpbm grayscale image). Akari solo acepta archivos PGM con esta cabecera:

P5 255.

* PPM (netpbm RGB image). Solo archivos PPM con esta cabezera: P6 255.

* ASCII art (Con últimas lineas en bytes LF, no CR-LF)

Manos a la obra

Compilar:

git clone https://github.com/princessgentoo/Akari 
cd Akari
make akari

Primer Uso

Partimos de la siguiente imagen con las siglas del concurso, la cual transformaremos con el comando debajo de ella:

https://princessgentoo.files.wordpress.com/2020/01/a4e0d-22f.jpg


./akari < example.ppm > odd_output.ppm

Que nos da como resultado esta imagen:

https://princessgentoo.files.wordpress.com/2020/01/45cb1-3e9.jpg

アッカリーン

(Akarin)

Util para decodificar imagenes extrañamente entrelazadas, como el del ejemplo. Probablemente muchos imagenes subliminales sean de este tipo.

Ahora probemos este comando:

./akari - - even < example.ppm > even_output.ppm 

https://princessgentoo.files.wordpress.com/2020/01/a029e-69e.jpg

Lo cual mantuvo los pixeles pares en las lineas pares, moviendo los pixeles impares en sus lineas. Lo inverso ocurrió en la imagen pasada.

Segundo Uso:

Lo que sigue es aun más interesante, downsampling de ASCII ART, probemos con la monalisa, Les recomiendo que usen la fuente Courier New en su terminal, el cual es la fuente usada en las imágenes:

 ./akari monalisa mona 

https://princessgentoo.files.wordpress.com/2020/01/685bc-b9d.jpg

Entonces veremos como se encogió:

https://princessgentoo.files.wordpress.com/2020/01/2bad9-3f0.jpg

Ahora se ve un poco menos clara la imagen, sugiero que se alejen para poder apreciar mejor a la monalisa. Ahora lo interesante está en que el propio código fuente es una imagen ASCII, entonces también hagámoslo:

./akari akari.c akari2.c 

https://princessgentoo.files.wordpress.com/2020/01/3c584-109.jpg

¡Sorpresa! Tenemos un nuevo programa, akari2.c

Tercer uso:

Descripción: Este programa permitirá expander cualquier texto

Procedemos a compilar nuestro segundo programa

 gcc akari2.c -o akari2

Ahora crearemos un archivo con texto cualquiera

 cat >hi-world << EOF 
"To be, or not to be: that is the question: 
Whether 'tis nobler in the mind to suffer 
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles,
And by opposing end them? To die: to sleep;
No more; and by a sleep to say we end"
EOF

Ejecutamos el siguiente comando:

./akari2 < hi-world 

Y nos mostrará el fragmento de Hamlet que eligí para hacer la demostración expandido:

https://princessgentoo.files.wordpress.com/2020/01/a577f-5f8.jpg

Cuarto Uso. Akari 2

Si además incluimos el argumento rot13, hará un rotado de 13 letras. Esto no es otra cosa que un cifrado César muy sencillo.

https://princessgentoo.files.wordpress.com/2020/01/fa09d-320px-rot13-es.png

 ./akari2 rot13 < hi-world

https://princessgentoo.files.wordpress.com/2020/01/4961f-5bf.jpg

Si combinamos los dos programas optenemos un cifrado normal rot13

  ./akari2 rot13 < hi-world | ./akari
"Gb or, be abg gb or: gung vf gur dhrfgvba: 
Jurgure 'gvf aboyre va gur zvaq gb fhssre 
Gur fyvatf naq neebjf bs bhgentrbhf sbeghar,
Be gb gnxr nezf ntnvafg n frn bs gebhoyrf,
Naq ol bccbfvat raq gurz? Gb qvr: gb fyrrc;
Ab zber; naq ol n fyrrc gb fnl jr raq"

Pero aun no termina.

Quinto Uso

Todavia podemos obtener dos programas más downsampling el codigo fuente más veces, y a su vez se va haciendo más pequeño el ASCII art del codigo fuente.

Ejecutemos los siguientes comandos:

 ./akari < akari.c | ./akari > akari3.c 
 ./akari < akari.c | ./akari | ./akari > akari4.c 
gcc akari3.c -o akari3
 gcc akari4.c -o akari4 

Y los invocamos respectivamente

 ./akari3 
 ./akari4 

Eso es todo, ahí me dicen que les salió. 😉

Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0):

Don Yang

omoikane@uguu.org

 

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Blog de WordPress.com.

Subir ↑

Serious Moe Business Again

Tu pasaporte en español para disfrutar de un fuwa-fuwa time intelectual

The Anime Rambler - By Benigmatica

Ramblings on anime featuring Megumin, ready to explode in her own spinoff!

Los libros de Alicia

~ La felicidad solo es real cuando es compartida ~

telodigosindecirlo

realidad interpretada

The Yuri Empire

Princessgentoo

El Principio de un Comienzo

Es hora de romper patrones

A %d blogueros les gusta esto: