
Esteganografía de bits menos significativos para imágenes de mapa de bits (.bmp y .png), archivos de sonido WAV y secuencias de bytes. Análisis simple de esteganografía LSB (extracción LSB) para imágenes de mapa de bits.
# Esteganografía

# Tabla de contenidos
* [Instalación](#installation)
* [Manipulación de Secuencias de Bytes](#byte-sequence-manipulation)
* [WavSteg](#wavsteg)
* [LSBSteg](#lsbsteg)
* [StegDetect](#stegdetect)
Si no estás familiarizado con las técnicas de esteganografía, también he escrito una
visión general básica del campo en
[Esteganografía: Ocultando Datos Dentro de Datos](https://ryanagibson.com/posts/steganography-intro/).
## Instalación
Este proyecto está en [PyPI](https://pypi.org/project/stego-lsb/) y se puede
instalar con
pip install stego-lsb
Alternativamente, puedes instalarlo directamente desde este repositorio:
git clone https://github.com/ragibson/Steganography
cd Steganography
python3 setup.py install
Después de la instalación, usa el comando `stegolsb` en la terminal o importa
funciones desde `stego_lsb` en tu código.
## Manipulación de Secuencias de Bytes
bit_manipulation proporciona la capacidad de intercalar (rápidamente) los bytes de una
carga útil directamente en los bits menos significativos de una secuencia de bytes portadora.
Específicamente, contiene cuatro funciones principales:
# Interleave the bytes of payload into the num_lsb LSBs of carrier.
lsb_interleave_bytes(carrier, payload, num_lsb, truncate=False)
# Deinterleave num_bits bits from the num_lsb LSBs of carrier.
lsb_deinterleave_bytes(carrier, num_bits, num_lsb)
# Runs lsb_interleave_bytes with a List[uint8] carrier.
lsb_interleave_list(carrier, payload, num_lsb)
# Runs lsb_deinterleave_bytes with a List[uint8] carrier.
lsb_deinterleave_list(carrier, num_bits, num_lsb)
Ejecutar `bit_manipulation.py`, llamar directamente a su función `test()` o
ejecutar `stegolsb test` debería producir una salida similar a
Testing 1.0 MB payload -> 10.0 MB carrier...
Progress: [################################]
----------------------------------------
| # LSBs | Tasa de Codificación | Tasa de Decodificación |
| 1 | 60.6 MB/s | 95.9 MB/s |
| 2 | 56.6 MB/s | 52.7 MB/s |
| 3 | 82.5 MB/s | 77.4 MB/s |
| 4 | 112.4 MB/s | 105.9 MB/s |
| 5 | 135.9 MB/s | 129.8 MB/s |
| 6 | 159.9 MB/s | 152.4 MB/s |
| 7 | 181.7 MB/s | 174.6 MB/s |
| 8 | 372.8 MB/s | 1121.8 MB/s |
----------------------------------------
## WavSteg
WavSteg usa esteganografía de bits menos significativos para ocultar un archivo en las muestras
de un archivo .wav.
Para cada muestra en el archivo de audio, sobrescribimos los bits menos significativos con
los datos de nuestro archivo.
### Cómo usar
WavSteg requiere Python 3
Ejecuta WavSteg con los siguientes argumentos de línea de comandos:
Command Line Arguments:
-h, --hide To hide data in a sound file
-r, --recover To recover data from a sound file
-i, --input TEXT Path to a .wav file
-s, --secret TEXT Path to a file to hide in the sound file
-o, --output TEXT Path to an output file
-n, --lsb-count INTEGER How many LSBs to use [default: 2]
-b, --bytes INTEGER How many bytes to recover from the sound file
--help Show this message and exit.
Ejemplo:
$ stegolsb wavsteg -h -i sound.wav -s file.txt -o sound_steg.wav -n 1
# O
$ stegolsb wavsteg -r -i sound_steg.wav -o output.txt -n 1 -b 1000
### Ocultando Datos
Ocultar datos usa los argumentos -h, -i, -s, -o y -n.
El siguiente comando ocultaría el contenido de file.txt en sound.wav y
guardaría el resultado como sound_steg.wav. El comando también muestra cuántos bytes
se han utilizado de un máximo teórico.
Ejemplo:
$ stegolsb wavsteg -h -i sound.wav -s file.txt -o sound_steg.wav -n 2
Using 2 LSBs, we can hide 6551441 bytes
Files read in 0.01s
5589889 bytes hidden in 0.24s
Output wav written in 0.03s
Si intentas ocultar demasiados datos, WavSteg imprimirá el número mínimo de
LSBs necesarios para ocultar tus datos.
### Recuperando Datos
Recuperar datos usa los argumentos -r, -i, -o, -n y -b
El siguiente comando recuperaría los datos ocultos de sound_steg.wav y
los guardaría como output.txt. Esto requiere que el tamaño en bytes de los datos
ocultos sea preciso, de lo contrario, el resultado podría ser demasiado corto o
contener datos extraños.
Ejemplo:
$ stegolsb wavsteg -r -i sound_steg.wav -o output.txt -n 2 -b 5589889
Files read in 0.02s
Recovered 5589889 bytes in 0.18s
Written output file in 0.00s
## LSBSteg
LSBSteg usa esteganografía de bits menos significativos para ocultar un archivo en la información
de color de una imagen RGB (.bmp o .png).
Para cada canal de color (por ejemplo, R, G y B) en cada píxel de la imagen,
sobrescribimos los bits menos significativos del valor de color con los datos de nuestro
archivo. Para facilitar la recuperación de estos datos, también ocultamos el tamaño
del archivo de entrada en los primeros canales de color de la imagen.
### Cómo usar
Necesitas Python 3 y Pillow, un fork de la Python Imaging Library (PIL).
Ejecuta LSBSteg con los siguientes argumentos de línea de comandos:
Command Line Arguments:
-h, --hide To hide data in an image file
-r, --recover To recover data from an image file
-a, --analyze Print how much data can be hidden within an image [default: False]
-i, --input TEXT Path to an bitmap (.bmp or .png) image
-s, --secret TEXT Path to a file to hide in the image
-o, --output TEXT Path to an output file
-n, --lsb-count INTEGER How many LSBs to use [default: 2]
-c, --compression INTEGER RANGE
1 (best speed) to 9 (smallest file size) [default: 1]
--help Show this message and exit.
Ejemplo:
$ stegolsb steglsb -a -i input_image.png -s input_file.zip -n 2
# O
$ stegolsb steglsb -h -i input_image.png -s input_file.zip -o steg.png -n 2 -c 1
# O
$ stegolsb steglsb -r -i steg.png -o output_file.zip -n 2
### Analizando
Antes de ocultar datos en una imagen, puede ser útil ver cuántos datos se pueden
ocultar. El siguiente comando logrará esto, produciendo una salida similar a
$ stegolsb steglsb -a -i input_image.png -s input_file.zip -n 2
Image resolution: (2000, 1100, 3)
Using 2 LSBs, we can hide: 1650000 B
Size of input file: 1566763 B
File size tag: 3 B
### Ocultando Datos
El siguiente comando ocultará datos en la imagen de entrada y escribirá el resultado en
la imagen esteganografiada, produciendo una salida similar a
$ stegolsb steglsb -h -i input_image.png -s input_file.zip -o steg.png -n 2 -c 1
Files read in 0.26s
1566763 bytes hidden in 0.31s
Image overwritten in 0.27s
### Recuperando Datos
El siguiente comando recuperará datos de la imagen esteganografiada y escribirá el resultado
en el archivo de salida, produciendo una salida similar a
$ stegolsb steglsb -r -i steg.png -o output_file.zip -n 2
Files read in 0.30s
1566763 bytes recovered in 0.28s
Output file written in 0.00s
## StegDetect
StegDetect proporciona un método para detectar esteganografía simple en imágenes.
### Cómo Usar
Necesitas Python 3 y Pillow, un fork de la Python Imaging Library (PIL).
Ejecuta StegDetect con los siguientes argumentos de línea de comandos:
Command Line Arguments:
-i, --input TEXT Path to an image
-n, --lsb-count INTEGER How many LSBs to display [default: 2]
--help Show this message and exit.
### Mostrando los Bits Menos Significativos de una Imagen
Sumamos los n bits menos significativos de los canales de color RGB para cada píxel
y normalizamos el resultado al rango 0-255. Este valor se aplica entonces a cada
canal de color del píxel. Donde n es el número de bits menos significativos a mostrar,
el siguiente comando guardará la imagen resultante, añadiendo "_nLSBs" al nombre del archivo,
y producirá una salida similar a la siguiente:
$ stegolsb stegdetect -i input_image.png -n 2
Runtime: 0.63s