[ 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:
Actualización: corregido un error muy tonto que podía ocurrir al guardar la clave en el gzip :P
Mostrando entradas con la etiqueta esteganografia. Mostrar todas las entradas
Mostrando entradas con la etiqueta esteganografia. Mostrar todas las entradas
miércoles, 26 de enero de 2011
domingo, 23 de enero de 2011
Montando un sistema de descargas oculto ( 1 ): las bases
La idea era mostrar primero un posible escenario de control total de internet, pero se volvió demasiado post-apocalíptico. Na' , imaginaos simplemente que queremos distribuir eh...código fuente, pero sin que nadie se dé cuenta de que su servidor lo aloja.
Una opción es utilizar algo conocido como esteganografía, como dice en la Wikipedia:
Vamos, que así como la criptografía intenta que los datos no sean recuperables sin una contraseña, la esteganografía apunta a pasar mensajes sin que se interpreten como tales.
Por ejemplo, hay imágenes en casi cualquier página de Internet, podemos introducir nuestros datos en una imágen y después subirla a un foro, un host de imágenes o donde nos de la gana.
Una opción es utilizar algo conocido como esteganografía, como dice en la Wikipedia:
La esteganografía es la disciplina en la que se estudian y aplican técnicas que permiten el ocultamiento de mensajes u objetos, dentro de otros, llamados portadores, de modo que no se perciba su existencia. Es una mezcla de artes y técnicas que se combinan para conformar la práctica de ocultar y enviar información sensible en un portador que pueda pasar desapercibido.
Vamos, que así como la criptografía intenta que los datos no sean recuperables sin una contraseña, la esteganografía apunta a pasar mensajes sin que se interpreten como tales.
Por ejemplo, hay imágenes en casi cualquier página de Internet, podemos introducir nuestros datos en una imágen y después subirla a un foro, un host de imágenes o donde nos de la gana.
Etiquetas:
esteganografia,
grafico,
python
lunes, 26 de abril de 2010
Esteganografia en python: modulo de BMP acabado
Pues nada, el modulo de bmp esta acabado, es decir, soporta:
pyStego_bmp01.zip
Lo proximo sera añadir soporte para GIF,JPEG o PNG (y APNG?) y soportar todos estos formatos antes de pasar a otro de datos (audio o video)
Hasta ahora!
- BMP de 24 Bits (8R,8G,8B)
- BMP de 32 Bits (8R,8G,8B,8X), sin compresion
- BMP de 32 Bits (8R,8G,8B,8X), con compresion (bit field)
pyStego_bmp01.zip
Lo proximo sera añadir soporte para GIF,JPEG o PNG (y APNG?) y soportar todos estos formatos antes de pasar a otro de datos (audio o video)
Hasta ahora!
Etiquetas:
bmp,
esteganografia,
python
sábado, 24 de abril de 2010
Esteganografia en python
Llevo bastante tiempo dandole vueltas a la idea de hacer una libreria de esteganografia en python, para poder usarla como base para una aplicacion completa... pues me he decidido a empezar, y estos son los primeros resultados:
baseops.py
bmp.py
El primero es simplemente un conjunto de funciones que creo que pueden ser de utilidad en los distintos modulos (extraer el LSB de un byte, descomponer un char en bits, leer un numero de un archivo...)
El segundo es lo que va comenzando a ser el modulo de esteganografia con BMP, por ahora esta bastante limitado, solo soporta imagenes de al menos 24bits de profundidad (esto seguramente no cambie, pues aceptar profundidades menores solo hace que la implementacion no sea tan sencilla, añadiendo una utilidad minima).
Ademas, por ahora no soporta ningun tipo de compresion, aunque la idea seria implementar compresion/descompresion usando Bit Field (que se utiliza en imagenes de 32 bits)
La clase que se utilizaria es stego_bmp, inicializandose con el nombre del archivo del bmp base o a analizar, las funciones son:
bmp.addmsg(mensaje[,profundidad_utilizada]) # Añade un string a la imagen
bmp.addfile(archivo[,profundidad_utilizada]) # Añade un archivo a la imagen
bmp.getmsg([profundidad_utilizada]) # Recupera un string a la imagen
bmp.getfile(archivo[,profundidad_utilizada]) # Recupera un archivo de la imagen
bmp.dump(mensaje) # Guarda la imagen
Y por supuesto, todo esta bajo la GPLv3 =)
Por ultimo avisar que esto no utiliza ningun tipo de estructura, al recuperar un mensaje o un archivo seguramente obtengais una ristra de bytes extraños al final de el... esto es normal, la idea es hacer que sea versatil, si quieres asegurarte de cuales son los extremos de tu mensaje puedes utilizar algun tipo de caracter especial, se podria utilizar el caracter nulo ('\0') como en C, por ejemplo.
Hasta otra!
baseops.py
bmp.py
El primero es simplemente un conjunto de funciones que creo que pueden ser de utilidad en los distintos modulos (extraer el LSB de un byte, descomponer un char en bits, leer un numero de un archivo...)
El segundo es lo que va comenzando a ser el modulo de esteganografia con BMP, por ahora esta bastante limitado, solo soporta imagenes de al menos 24bits de profundidad (esto seguramente no cambie, pues aceptar profundidades menores solo hace que la implementacion no sea tan sencilla, añadiendo una utilidad minima).
Ademas, por ahora no soporta ningun tipo de compresion, aunque la idea seria implementar compresion/descompresion usando Bit Field (que se utiliza en imagenes de 32 bits)
La clase que se utilizaria es stego_bmp, inicializandose con el nombre del archivo del bmp base o a analizar, las funciones son:
bmp.addmsg(mensaje[,profundidad_utilizada]) # Añade un string a la imagen
bmp.addfile(archivo[,profundidad_utilizada]) # Añade un archivo a la imagen
bmp.getmsg([profundidad_utilizada]) # Recupera un string a la imagen
bmp.getfile(archivo[,profundidad_utilizada]) # Recupera un archivo de la imagen
bmp.dump(mensaje) # Guarda la imagen
Y por supuesto, todo esta bajo la GPLv3 =)
Por ultimo avisar que esto no utiliza ningun tipo de estructura, al recuperar un mensaje o un archivo seguramente obtengais una ristra de bytes extraños al final de el... esto es normal, la idea es hacer que sea versatil, si quieres asegurarte de cuales son los extremos de tu mensaje puedes utilizar algun tipo de caracter especial, se podria utilizar el caracter nulo ('\0') como en C, por ejemplo.
Hasta otra!
Etiquetas:
esteganografia,
python
Suscribirse a:
Entradas (Atom)