Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
File-Injector — File Injector es un script que te permite almacenar cualquier archivo en una imagen mediante esteganografía. | Kitploit
Herramientas/GitHubGitHub/carlospuenteg/file-injector
Herramientas de Cifrado/DescifradoExfiltración de DatosEsteganografíaCriptografía
GitHubcarlospuenteg/file-injector

File-Injector

File Injector es un script que te permite almacenar cualquier archivo en una imagen mediante esteganografía.

Ver Repositorio
44329hace 3 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

File Injector

Si quieres usar una versión anterior (1.0.2 o inferior), en la que necesitabas la imagen original para extraer el archivo, puedes descargarla aquí.

Índice

  • 1. Descripción
  • 2. Primeros pasos
    • Instalar requisitos
    • Ejecutar el script
    • Elegir entrada
      • Elegir una imagen/audio base
      • Elegir un archivo de entrada
      • Elegir/Generar una clave de cifrado
  • 3. Resultados
  • 4. Ejemplos de uso
    • Inyección
    • Extracción
  • 5. Configuración
  • 6. Qué hace
  • 7. Cómo funciona

1. Descripción

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.

2. Primeros pasos

Instalar requisitos

root@kitploit:~
python3 -m pip install -r requirements.txt

Si eso no funciona, puedes probar:

root@kitploit:~
py -m pip install -r requirements.txt

Ejecutar el script

root@kitploit:~
python3 main.py

Elegir entrada

Elegir una imagen/audio base

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.

  • Las imágenes pueden ser .png o (.jpg/.jpeg), pero se convertirán a .png cuando se ejecute el script.
  • Los audios tienen que ser .mp3 o .wav, pero se convertirán a .mp3 cuando se ejecute el script.

Elegir un archivo de entrada

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.

Elegir una imagen/audio modificado

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.

Elegir/Generar una clave de cifrado

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.

3. Resultados

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.

https://user-images.githubusercontent.com/65092569/202014519-24514110-4bd2-4c2b-9307-237964df0c2b.mp4

4. Ejemplos de uso

Inyección

root@kitploit:~
... 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

Extracción

root@kitploit:~
... 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

5. Configuración

Puedes cambiar la configuración en el archivo config.py.

6. Qué hace

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.

  • Cada elemento tiene 8 bits (si el archivo base es una imagen) o 16 bits (si el archivo base es un audio)
  • Este script cambia de 1 a todos los bits de cada elemento, dependiendo del tamaño del archivo a almacenar en comparación con la imagen/audio base.
  • Si almacenas un archivo más grande o si la imagen/audio base es más pequeña, se cambiarán más bits y los cambios serán más perceptibles.
  • Si almacenas un archivo más pequeño o si la imagen/audio base es más grande, se cambiarán menos bits y los cambios serán menos perceptibles.
  • Si la imagen/audio base es demasiado pequeña para almacenar el archivo, el script se detendrá y te avisará.
  • Si eliges cifrar el archivo, su tamaño aumentará en ≈1/3.

7. Cómo funciona

Opciones

OpciónDescripción
[0] SalirSalir del script
[1] Inyectar archivoLlama a inject_file_func()
[2] Extraer archivoLlama a extract_file_func()

inject_file_func()

  1. Si 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.
  2. Lee el archivo (en bytes)
  3. Lee la imagen/audio y la almacena en un array de numpy
  4. Lee el nombre de archivo (en bytes)
  5. Si el usuario quiere cifrar el archivo:
    1. Obtiene la clave con get_fernet()
    2. Cifra el archivo y el nombre de archivo
  6. Intenta inyectar el archivo y el nombre de archivo en la imagen/audio con inject_file().
    1. Si la imagen/audio es demasiado pequeña para almacenar el archivo, lanza un error
    2. Si no, devuelve la imagen/audio modificado.
  7. Guarda la imagen/audio modificado

extract_file_func()

  1. Si TEST_MODE == True, usará la imagen/audio modificado predefinido. De lo contrario, pedirá la imagen/audio modificado.
  2. Lee la imagen/audio modificado
  3. Extrae el archivo y el nombre de archivo como bytes con extract_file()
  4. Si el archivo y el nombre de archivo han sido cifrados (empiezan por gAAAAA), los descifra con decrypt_content
  5. Decodifica el nombre de archivo a UTF-8
  6. Guarda el archivo con el nombre de archivo decodificado

get_fernet()

OpciónDescripción
[0] Clave existenteUsar una clave existente
[1] Nueva claveGenerar una nueva clave

[0] Clave existente

  1. Elegir una clave para usar de la carpeta files/$encryption-keys

[1] Nueva clave

  1. Elegir un nombre de archivo para la nueva clave (o dejarlo en blanco para usar el predeterminado (p. ej. key8.key))
  2. Generar una nueva clave y guardarla con el nombre de archivo elegido
  3. Devolver el objeto Fernet con la nueva clave

decrypt_content()

  1. Para cada clave en la carpeta files/$encryption-keys:
    1. Intentar descifrar el archivo y el nombre de archivo con ella
    2. Si se lanza InvalidToken:
      1. Significa que la clave no es la correcta
      2. Probar con otra clave
    3. Si no, devolver la clave
  2. Si no se encuentra ninguna clave, lanzar una Excepción

inject_file()

Devuelve el array de la imagen/audio modificado (np.ndarray, con la misma forma que arr)

extract_file()

ParámetroTipoDescripción
mod_arr_flatnp.ndarrayImagen/audio modificado aplanado

Devuelve un diccionario con el archivo y el nombre de archivo extraídos, ambos en formato (bytes)

Descargar herramienta
ConstanteDescripciónValor por defecto
MOD_PREFIXPrefijo que tendrá la imagen/audio modificado""
MOD_SUFFIXSufijo que tendrá la imagen/audio modificado"_mod"
STORE_RANDOMAlmacenar 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 evidenteTrue
TEST_MODEActiva/Desactiva el Modo de Prueba: Prueba con imágenes/audios y archivos predefinidosTrue
ParámetroTipoDescripción
arrnp.ndarrayImagen/audio como array de numpy
filebytesArchivo en bytes
filenamebytesNombre de archivo en bytes
store_randombooleanSi se deben almacenar o no datos aleatorios en la imagen/audio modificado