
File Injector est un script qui vous permet de stocker n'importe quel fichier dans une image en utilisant la stéganographie
File Injector est un script qui vous permet de stocker n'importe quel fichier (.zip, .png, .txt, .gba...) ainsi que son nom de fichier dans une image/audio sous forme de bruit, en utilisant la stéganographie.
Vous pouvez également choisir de chiffrer le fichier d'entrée avant de le stocker.
Ensuite, pour extraire le fichier de l'image/audio modifiée, vous n'avez PAS besoin de l'image/audio originale, seulement de la clé de chiffrement si le fichier a été chiffré.
python3 -m pip install -r requirements.txt
Si cela ne fonctionne pas, vous pouvez essayer :
py -m pip install -r requirements.txt
python3 main.py
Choisissez une image/audio de base pour stocker le fichier dans le dossier files/base.
Vous pouvez également ajouter vos propres images/audios dans ce dossier.
.png ou (.jpg/.jpeg), mais elles seront converties en .png lors de l'exécution du script..mp3 ou .wav, mais ils seront convertis en .mp3 lors de l'exécution du script.Choisissez un fichier à stocker dans l'image/audio depuis le dossier files/input.
Vous pouvez ajouter vos propres fichiers dans ce dossier. Ils peuvent être de n'importe quel type.
Choisissez une image/audio modifiée pour extraire le fichier depuis le dossier files/modified.
Vous pouvez également ajouter vos propres images/audios modifiées dans ce dossier.
Vous pouvez choisir une clé dans le dossier files/$encryption-keys ou en générer une dans ce dossier.
Le fichier de clé doit avoir l'extension .key
Vous n'avez pas besoin d'en choisir une particulière lors du déchiffrement d'un fichier, elle sera sélectionnée automatiquement dans le dossier.
Cette image 17,1 MP contient un fichier .zip chiffré de 9 Mo ainsi que son nom de fichier stocké sous forme de bruit.
<img src="https://raw.githubusercontent.com/carlospuenteg/file-injector/HEAD/readme-assets/17"1MP_mod.png" width=500>
Cette image 1,7 MP contient un fichier .zip chiffré de 0,93 Mo ainsi que son nom de fichier stocké sous forme de bruit.
<img src="https://raw.githubusercontent.com/carlospuenteg/file-injector/HEAD/readme-assets/1"7MP_mod.png" width=500>
Ce fichier audio de 42 Mo contient un fichier .zip chiffré de 9 Mo ainsi que son nom de fichier stocké sous forme de bruit.
... File-Injector % python3 main.py
[0] QUITTER
[1] Injecter un fichier
[2] Extraire un fichier
Option : 1
Fichier à stocker : images.zip
Nom de l'image de base : 2'2MP
Chiffrer le fichier ? (o/n) : o
Voulez-vous utiliser une clé existante ou en générer une nouvelle ?
[0] Clé existante
[1] Nouvelle clé
Option : 1
Nom du nouveau fichier de clé (laisser vide par défaut) :
Clé générée et sauvegardée dans files/$encryption-keys/key9.key
Préparation...
Bits modifiés par canal : 2
Modification de l'image : 1,56 %
✅ Stockage... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [100,0 %]
Génération de valeurs aléatoires...
Stockage de valeurs aléatoires...
Reformation...
Image modifiée sauvegardée dans files/modified-images/2'2MP_mod.png
Terminé en 7,5892 secondes
... File-Injector % python3 main.py
[0] QUITTER
[1] Injecter un fichier
[2] Extraire un fichier
Option : 2
Nom de l'image modifiée : 2'2MP_mod
Préparation...
Récupération du nom de fichier...
Récupération du fichier d'entrée...
Déchiffré avec "files/$encryption-keys/key2.key"
Fichier de sortie sauvegardé dans files/output-files/images.zip
Terminé en 1,4083 secondes
Vous pouvez modifier la configuration dans le fichier config.py.
L'injection consiste à stocker le fichier dans les X bits les moins significatifs de chaque élément du tableau créé en aplatissant le tableau de l'image/audio.
| Option | Description |
|---|---|
| [0] QUITTER | Quitter le script |
| [1] Injecter un fichier | Appelle inject_file_func() |
| [2] Extraire un fichier | Appelle extract_file_func() |
inject_file_func()TEST_MODE == True, il utilisera l'image/audio de base et le fichier d'entrée prédéfinis. Sinon, il demandera l'image/audio de base et le fichier d'entrée.get_fernet()inject_file().
extract_file_func()TEST_MODE == True, il utilisera l'image/audio modifiée prédéfinie. Sinon, il demandera l'image/audio modifiée.extract_file()gAAAAA), les déchiffrer avec decrypt_contentget_fernet()| Option | Description |
|---|---|
| [0] Clé existante | Utiliser une clé existante |
| [1] Nouvelle clé | Générer une nouvelle clé |
[0] Clé existante
files/$encryption-keys[1] Nouvelle clé
decrypt_content()files/$encryption-keys :
inject_file()Retourne le tableau de l'image/audio modifiée (np.ndarray, de même forme que arr)
extract_file()| Paramètre | Type | Description |
|---|---|---|
mod_arr_flat | np.ndarray | Image/audio modifiée aplatie |
Retourne un dictionnaire contenant le fichier et le nom du fichier extraits, tous deux au format (bytes)
| Constante | Description | Valeur par défaut |
|---|
MOD_PREFIX | Préfixe que l'image/audio modifiée aura | "" |
MOD_SUFFIX | Suffixe que l'image/audio modifiée aura | "_mod" |
STORE_RANDOM | Stocker des données aléatoires dans l'image modifiée pour que la limite entre la partie avec les données stockées et la partie sans soit moins évidente | True |
TEST_MODE | Active/Désactive le mode test : Tester avec des images/audios et des fichiers prédéfinis | True |
| Paramètre | Type | Description |
|---|
arr | np.ndarray | Image/audio sous forme de tableau numpy |
file | bytes | Fichier sous forme d'octets |
filename | bytes | Nom du fichier sous forme d'octets |
store_random | boolean | Indique s'il faut stocker ou non des données aléatoires dans l'image/audio modifiée |