Montando un sistema de descargas oculto ( 2 ): cifrando y pensando a lo grande

[ Montando_un_sistema_de_descargas_oculto_(1):_las_bases ]

Seguimos avanzando, está claro que aunque los datos se ocultan dentro de una imágen, si tiras de esteganografía para esto, dejar los datos simplement así es casi como que vayan en *, si alguien busca datos ocultos en una imágen LSB es lo primero que se probaría, hay  que reforzarlo con un cifrado, con un simple ARC4 con una clave segura y suficiente padding basta para darle en los morros a los cotillas y para desalentar a algun bot que analice la red en busca de algo sospechoso, este_cifrado_ya_se_explico_anteriormente, así que vamos con lo siguiente.

Una sola imágen está bien para cosas pequeñas, pero hasta una relativamente grande no puede soportar más de 1 mega, hay que buscar una forma de dividir el archivo y mantener una lista de las ubicaciones de las partes, digamos por ejemplo que queremos dividir el archivo cifrado entre las imágenes y subir estas a un hosting de imágenes como Imageshack.us, habría que guardar las URL donde quedan las imágenes, ya puestos la clave se podría sacar de "/dev/ urandom" para que sea lo suficientemente cerca y de paso guardar el tamaño del archivo original, en esta implementación, el formato usado es este:

===============================================================================

  • Tamaño del archivo original: 8 bytes
  • Clave en hexadecimal, string acabada en \0
  • Las URL, en el orden en que se codifico el archivo, terminada cada una por \0

===============================================================================

Todo comprimido con GZip.

Los scripts: el primero, que divide un archivo entre varias imágenes y genera el gzip con "la hoja de ruta" [ stego_split.py ] ( utiliza esto_para_las peticiones_POST ), el segundo, que descarga las imágenes y descifra el archivo usando el archivo GZip [ stego_join.py ]. Nota: al dividir el archivo, para de subir imágenes cuando puede haber metido todo el archivo. Nota2: al dividirlo, el mayor cuello de botella es la subida por eso se hace con multiples hilos, al final cuando pone "Online: ...", esos son los hilos que están subiendo imágenes.

Argumentos del que divide y sube: ./stego_split.py [[ ... ]]

Argumentos del que lo vuelve a juntar: ./stego_join.py

Capturas subiendo un archivo de 2Megas:

Escogí el formato GZip  porque aunque no comprime mucho, es suficiente para datos sobre todo alfabéticos, además soporta "basura" al final del archivo, entonces se pueden utilizar los scripts de la_parte_anterior para añadirlo a una imágen, por ejemplo, una imágen como esta ( obra del gran "Bichero") puede contener el GZip que permite recuperar las otras imágenes y el archivo final ( solo un video de colorines ) :

===============================================================================

$ ./stego_extract.py piratas.png path.gz $ ./stego_join.py path.gz video.avi Tamaño del archivo: 2758500 Clave:  fccf9b4969c1feaec8faeb4ca70e11cdd9484018 Descargando http://img192.imageshack.us/img192/4793/upanddown0sp.png Leyendo upanddown0sp.png Descargando http://img511.imageshack.us/img511/2542/upanddown1sp.png Leyendo upanddown1sp.png Descargando http://img6.imageshack.us/img6/9034/upanddown2sp.png Leyendo upanddown2sp.png Descargando http://img13.imageshack.us/img13/404/upanddown3sp.png Leyendo upanddown3sp.png Descargando http://img534.imageshack.us/img534/3374/upanddown4sp.png Leyendo upanddown4sp.png Descargando http://img843.imageshack.us/img843/6019/upanddown5sp.png Leyendo upanddown5sp.png Descargando http://img17.imageshack.us/img17/2379/upanddown6sp.png Leyendo upanddown6sp.png Descargando http://img836.imageshack.us/img836/7600/upanddown7sp.png Leyendo upanddown7sp.png $ md5sum video.avi para_prueba.avi 6e604af1761085c9104b8141c01d47e8  video.avi 6e604af1761085c9104b8141c01d47e8  para_prueba.avi $

===============================================================================

El problema: hay que subir más o menos 4 veces más datos de los necesarios, probado con un archivo de ~ 50 megas, resulta en 200, ... y dá gracias de que PNG esté comprimido.

Y hasta aquí esto de montar un mini sistema de descargas oculto, nos leemos.

untagged

Cambiando seriesyonkis por Twitter » « Controlando el reproductor Totem desde el Wiimote