Algoritmo de Kamaleon2

May 1, 2008

Otra vez tiene que ser el Anime y las preferencias de algunos uploaders las que me hacen toparme con un programa curioso, al cual tengo a veces que "reescribirlo" por simple gusto, o por simple incompatibilidad con algún sistema operativo que uso.

En este caso, el afortunado a sido Kamaleon2, un programa de camuflaje de archivos, cuyo algoritmo estudiaremos, ya que lo necesitaba para bajar la serie Noir, que por cierto la recomiendo si les gustan las historias de sicarias y organizaciones secretas. (Noir en francés quiere decir ‘Negro’).

Pues bien, instalándome las extensiones GNU para Windows, crearemos un archivo llamado prueba.bin y lo llenaremos con la cadena ‘Noir’, para poder estudiar el algoritmo. Ejecutamos el siguiente comando:

yes "Noir" > test.bin

Tras unos segundos, pulsamos Control + C y ya tenemos un archivo que pesa 5 MB. Ahora abrimos el programa con un editor hexadecimal. Fhred para los usuarios de ventanas o hexdump para los usuarios de consola (Ambos son libres). Todo el archivo dice "Noir" línea por línea.

Abrimos Kamaleon2 y cortamos el archivo. Hay que aclarar que lo que hace Kamaleon2 es crear archivos .jpg de tamaños iguales al corte y les inserta una imagen JPEG de reducido tamaño y luego inserta una parte del archivo cortado, como Hj-Split. Al menos tras analizar las partes con un editor hexadecimal me di cuenta de esa situación.

¿Pero no se supone que si pongo un JPEG y añado más cosas ya no se lee el archivo? No necesariamente. Aunque actualmente no poseo la documentación pertinente, he visto en varios JPEG los mismos 2 bytes de final: ‘FF D9′ en hexadecimal. Según Wikipedia, esos bytes indican el final del propio archivo JPEG.

Probe cortar y pegar la zona comprendida entre el inicio del archivo y los bytes ‘FF D9′. Si se genera la imagen JPEG completa, por lo que la marca de fin de imagen es correcta. Supongo que se hará por informacional adicional que se adjunta al JPEG, como cabeceras EXIF.

Pues bien, entonces simplemente para cortar y camuflar una imagen, simplemente abrimos un archivo nuevo .001, le adosamos un JPEG y justo después un "pedazo" de archivo a partir. Luego creamos otro archivo .002, le adosamos un JPEG y la siguiente parte de la imagen y así sucesivamente hasta acabar.

Para pegar los archivos lo tenemos un poco más complicado. Hay que separar el JPEG del archivo y empezar a unirlos. No estoy seguro si la cabecera de final se repite dentro del JPEG mismo, así que hay que buscar todas las aparariciones de ‘FF D9′ y elegir la última. Sin embargo en el último archivo hay cierta información de control que está "pegada" al archivo, y que debe ser eliminada antes de procesarlo, ya que de no ser así no se recrearía el fichero exacto. Eso es algo que está por verse.

Por otro lado, Kamaleon2 usa protección por contraseña en sus cortes. Sin embargo es totalmente inútil ya que la estructura es la misma que la explicada anteriormente. No se usa encriptación para proteger el archivo, de mod que la clave sea la que descifre. Así que simplemente leyendo más allá de ‘FF D9′ podemos saltarnos la contraseña.

Igual que con HJ-Split, pienso hacer una implementación en Python pronto. Ojalá en solo 24 horas, porque tengo inquietud del episodio de Noir.

Comments »

The URI to TrackBack this entry is: http://brunoprog64.blogsome.com/2008/05/01/algoritmo-de-kamaleon2/trackback/

No comments yet.

RSS feed for comments on this post.

Leave a comment

Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>



Medida AntiSpam. Por favor tipea el texto a tu derecha. Lamento tener que hacer eso, pero quiero tener un blog limpio de Spam.