
File Injector es un script que te permite almacenar cualquier archivo en una imagen mediante esteganografía.
File Injector es un script que te permite almacenar cualquier archivo (.zip, .png, .txt, .gba...) y su nombre de archivo en una imagen/audio como ruido, mediante esteganografía.
También puedes elegir cifrar el archivo de entrada antes de almacenarlo.
Después, para extraer el archivo de la imagen/audio modificado, NO necesitas la imagen/audio original, solo la clave de cifrado si el archivo ha sido cifrado.
python3 -m pip install -r requirements.txt
Si eso no funciona, puedes probar:
py -m pip install -r requirements.txt
python3 main.py
Elige una imagen/audio base para almacenar el archivo de la carpeta files/base.
También puedes añadir tus propias imágenes/audios a esta carpeta.
.png o (.jpg/.jpeg), pero se convertirán a .png cuando se ejecute el script..mp3 o .wav, pero se convertirán a .mp3 cuando se ejecute el script.Elige un archivo para almacenar en la imagen/audio de la carpeta files/input.
Puedes añadir tus propios archivos a esta carpeta. Pueden ser cualquier tipo de archivo.
Elige una imagen/audio modificado para extraer el archivo de la carpeta files/modified.
También puedes añadir tus propias imágenes/audios modificados a esta carpeta.
Puedes elegir una clave de la carpeta files/$encryption-keys o generar una en ella.
El archivo de clave debe tener la extensión .key
No necesitas elegir una concreta al descifrar un archivo, se seleccionará automáticamente de la carpeta.
Esta imagen de 17.1MP contiene un archivo .zip cifrado de 9MB y su nombre de archivo almacenados como ruido.
<img src="https://raw.githubusercontent.com/carlospuenteg/file-injector/HEAD/readme-assets/17"1MP_mod.png" width=500>
Esta imagen de 1.7MP contiene un archivo .zip cifrado de 0.93MB y su nombre de archivo almacenados como ruido.
<img src="https://raw.githubusercontent.com/carlospuenteg/file-injector/HEAD/readme-assets/1"7MP_mod.png" width=500>
Este archivo de audio de 42MB contiene un archivo .zip cifrado de 9MB y su nombre de archivo almacenados como ruido.
... File-Injector % python3 main.py
[0] EXIT
[1] Inject file
[2] Extract file
Option: 1
File to be stored: images.zip
Filename of the base image: 2'2MP
Encrypt the file? (y/n): y
Do you want to use an existing key or generate a new one?
[0] Existing key
[1] New key
Option: 1
Filename of the new key file (blank for default):
Key generated and saved to files/$encryption-keys/key9.key
Preparing...
Modified bits per channel: 2
Image modification: 1.56%
✅ Storing... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [100.0%]
Generating random values...
Storing random values...
Reshaping...
Modified image saved in files/modified-images/2'2MP_mod.png
Done in 7.5892 seconds
... File-Injector % python3 main.py
[0] EXIT
[1] Inject file
[2] Extract file
Option: 2
Filename of the modified image: 2'2MP_mod
Preparing...
Retrieving filename...
Retrieving input file...
Decrypted with "files/$encryption-keys/key2.key"
Output file saved in files/output-files/images.zip
Done in 1.4083 seconds
Puedes cambiar la configuración en el archivo config.py.
La inyección se realiza almacenando el archivo en los X bits menos significativos de cada elemento del array creado al aplanar el array de la imagen/audio.
| Opción | Descripción |
|---|---|
| [0] Salir | Salir del script |
| [1] Inyectar archivo | Llama a inject_file_func() |
| [2] Extraer archivo | Llama a extract_file_func() |
inject_file_func()TEST_MODE == True, usará la imagen/audio base y el archivo de entrada predefinidos. De lo contrario, pedirá la imagen/audio base y el archivo de entrada.get_fernet()inject_file().
extract_file_func()TEST_MODE == True, usará la imagen/audio modificado predefinido. De lo contrario, pedirá la imagen/audio modificado.extract_file()gAAAAA), los descifra con decrypt_contentget_fernet()| Opción | Descripción |
|---|---|
| [0] Clave existente | Usar una clave existente |
| [1] Nueva clave | Generar una nueva clave |
[0] Clave existente
files/$encryption-keys[1] Nueva clave
decrypt_content()files/$encryption-keys:
inject_file()Devuelve el array de la imagen/audio modificado (np.ndarray, con la misma forma que arr)
extract_file()| Parámetro | Tipo | Descripción |
|---|---|---|
mod_arr_flat | np.ndarray | Imagen/audio modificado aplanado |
Devuelve un diccionario con el archivo y el nombre de archivo extraídos, ambos en formato (bytes)
| Constante | Descripción | Valor por defecto |
|---|
MOD_PREFIX | Prefijo que tendrá la imagen/audio modificado | "" |
MOD_SUFFIX | Sufijo que tendrá la imagen/audio modificado | "_mod" |
STORE_RANDOM | Almacenar datos aleatorios en la imagen/audio modificado para que el límite entre la parte con datos almacenados y la parte sin ellos no sea tan evidente | True |
TEST_MODE | Activa/Desactiva el Modo de Prueba: Prueba con imágenes/audios y archivos predefinidos | True |
| Parámetro | Tipo | Descripción |
|---|
arr | np.ndarray | Imagen/audio como array de numpy |
file | bytes | Archivo en bytes |
filename | bytes | Nombre de archivo en bytes |
store_random | boolean | Si se deben almacenar o no datos aleatorios en la imagen/audio modificado |