steganographer Ocultar Archivos o Datos en Imagen
steganographer Ocultar Archivos o Datos en Imagen

steganographer: Ocultar Archivos o Datos en Imagen

CRÉDITOS NO HEREDADOS

El siguiente contenido es una traducción no oficial del repositorio original (Github) citado al final del artículo. La única intención es la comprensión de la herramienta en idioma español.

Esteganografía en Python

Este Módulo ocultará los archivos dentro de las imágenes (actualmente PNG) y exportará la imagen modificada al disco.

El tamaño máximo del archivo que se puede ocultar dentro de una imagen depende de la dimensión de la misma.

max_file_size = ( height_of_image * width_of_image * 6 / 8 ) bytes
#tamñao=(altura*ancho*6/8)bytes

100k words.txt‘ está escondido en ‘original_image.png’ lamado como ‘image_with_100k words.png‘. Mira y comprueba si puedes detectar la diferencia entre estas dos imágenes. Puedes usar este Módulo para extraer ‘100k words.txt’ de la imagen ‘image_with_100k words.png’

Ejemplo

Imagen Original

steganographer imagen original
steganographer imagen original

Imagen Modificada

steganographer imagen modificada
steganographer imagen modificada

¡Esta imagen tiene 100 mil palabras escondidas en su interior!

¿Cómo Funciona?

Ocultar datos en imagen
Ocultar datos en imagen

Se basa en un simple principio de que si cambiamos el LSB (Least Significant Bits) de cada Píxel, entonces el cambio no será significativo y no será notado por los ojos.

Así que, este Módulo toma 2 bits de datos del archivo para ocultarlos y reemplaza los últimos 2 bits de un píxel con esos 2 bits, y luego pasa al siguiente píxel. El cambio máximo en el píxel puede ser de 4 unidades, y el rango de valores en una Imagen PNG es (0,255), por lo que este cambio no será significativo.

En una imagen PNG, cada píxel tiene 3 canales: Rojo (Red), Verde (Green) y Azul (Blue). (Algunas Imágenes PNG tienen 1 o 4 canales, pero este Programa las convertirá en 3 canales) Un pixel típico en una Imagen PNG se ve como:

a_pixel = (17,32,11)     # (RED, GREEN, BLUE)

Entonces, podemos ahorrar 3 veces 2 bits en un Pixel, eso significa 6 bits por pixel. Eso nos lleva al límite superior del tamaño del archivo, que se puede ocultar en una imagen:

max_file_size = ( height_of_image * width_of_image * 6 / 8 ) bytes

Entendamos tomando un ejemplo. Los datos a ocultar son:

binary_data = 0b100111

Tomemos los dos primeros bits y reemplacémoslos con el Canal Red de nuestro ‘a_pixel’.

a_pixel = (0b10001, 0b100000, 0b1011)   # binary representation of a_pixel values
# Let's change a_pixel's RED Channel
# 0b10001 -> 0b10010  ( First 2 bits are 10 )
a_pixel = (0b10010, 0b100000, 0b1011)  # modified pixel

Tomemos otra vez 2 bits de binary_data y reemplacemos los últimos 2 bits del Canal GREEN con ellos.

a_pixel = (0b10010, 0b100000, 0b1011)
# Let's change a_pixel's GREEN Channel
# 0b100000 -> 0b100001  ( The 2 bits are 01 )
a_pixel = (0b10010, 0b100001, 0b1011)  # modified pixel

Hagámoslo una vez más con el Canal BLUE y habremos terminado.

a_pixel = (0b10010, 0b100001, 0b1011)
# Let's change a_pixel's BLUE Channel
# 0b1011 -> 0b1011  ( The 2 bits are 11 ) ; Notice that the value wasn't changed this time
a_pixel = (0b10010, 0b100001, 0b1011)  # pixel wasn't modified this time

Así que, hemos escondido nuestro mensaje de 6 bits en un píxel, veamos los cambios en el píxel

a_pixel             = (0b10001, 0b100000, 0b1011) = (17, 32, 11)
a_pixel_with_data   = (0b10010, 0b100001, 0b1011) = (18, 33, 11)

Como podemos ver, el cambio no es ni siquiera perceptible a nivel de píxeles. El Módulo hace esto repetidamente hasta que todos nuestros datos son guardados en la imagen.

Uso de steganographer
Uso de steganographer

Nota

El ruido en la foto se incrementa y si usamos cualquier software de edición de fotos y lo comparamos con la imagen original, entonces esta imagen tendrá mucho más ruido que la imagen original.

Solución al problema

Nunca jamás subas/compartas la imagen original a internet

Por Hacer

  • Añadir soporte para imágenes JPEG
  • Añadir la opción de cifrado
  • Añadir la auto detección del nombre del archivo a extraer

Licencia

MIT

Software Libre, ¡Diablos, sí!

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda