
File Injector é um script que permite armazenar qualquer arquivo em uma imagem usando esteganografia
File Injector é um script que permite armazenar qualquer arquivo (.zip, .png, .txt, .gba...) e o seu nome de arquivo numa imagem/áudio como ruído, usando esteganografia.
Também pode optar por criptografar o arquivo de entrada antes de armazená-lo.
Depois, para extrair o arquivo da imagem/áudio modificada, você NÃO precisa da imagem/áudio original, apenas da chave de criptografia se o arquivo tiver sido criptografado.
python3 -m pip install -r requirements.txt
Se isso não funcionar, pode tentar:
py -m pip install -r requirements.txt
python3 main.py
Escolha uma imagem/áudio base para armazenar o arquivo a partir da pasta files/base.
Você também pode adicionar suas próprias imagens/áudios a esta pasta.
.png ou (.jpg/.jpeg), mas serão convertidas para .png quando o script for executado..mp3 ou .wav, mas serão convertidos para .mp3 quando o script for executado.Escolha um arquivo para ser armazenado na imagem/áudio a partir da pasta files/input.
Você pode adicionar seus próprios arquivos a esta pasta. Eles podem ser de qualquer tipo.
Escolha uma imagem/áudio modificada para extrair o arquivo a partir da pasta files/modified.
Você também pode adicionar suas próprias imagens/áudios modificadas a esta pasta.
Você pode escolher uma chave da pasta files/$encryption-keys ou gerar uma nela.
O arquivo de chave deve ter a extensão .key
Você não precisa escolher uma específica ao descriptografar um arquivo; ela será selecionada automaticamente da pasta.
Esta imagem de 17.1MP contém um arquivo .zip de 9MB criptografado e o seu nome de arquivo armazenados como ruído.
<img src="https://raw.githubusercontent.com/carlospuenteg/file-injector/HEAD/readme-assets/17"1MP_mod.png" width=500>
Esta imagem de 1.7MP contém um arquivo .zip de 0.93MB criptografado e o seu nome de arquivo armazenados como ruído.
<img src="https://raw.githubusercontent.com/carlospuenteg/file-injector/HEAD/readme-assets/1"7MP_mod.png" width=500>
Este arquivo de áudio de 42MB contém um arquivo .zip de 9MB criptografado e o seu nome de arquivo armazenados como ruído.
... 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
Você pode alterar a configuração no arquivo config.py.
A injeção é feita armazenando o arquivo nos X bits menos significativos de cada elemento do array criado ao achatar o array da imagem/áudio.
| Opção | Descrição |
|---|---|
| [0] EXIT | Sair do script |
| [1] Inject file | Chama inject_file_func() |
| [2] Extract file | Chama extract_file_func() |
inject_file_func()TEST_MODE == True, será usada a imagem/áudio base e o arquivo de entrada predefinidos. Caso contrário, será pedida a imagem/áudio base e o arquivo de entrada.get_fernet()inject_file().
extract_file_func()TEST_MODE == True, será usada a imagem/áudio modificada predefinida. Caso contrário, será pedida a imagem/áudio modificada.extract_file()gAAAAA), descriptografá-los com decrypt_contentget_fernet()| Opção | Descrição |
|---|---|
| [0] Existing key | Usar uma chave existente |
| [1] New key | Gerar uma nova chave |
[0] Existing key
files/$encryption-keys[1] New key
decrypt_content()files/$encryption-keys:
inject_file()Retorna o array da imagem/áudio modificada (np.ndarray, com a mesma forma de arr)
extract_file()| Parâmetro | Tipo | Descrição |
|---|---|---|
mod_arr_flat | np.ndarray | Imagem/áudio modificada achatada |
Retorna um dicionário com o arquivo e o nome do arquivo extraídos, ambos no formato (bytes)
| Constante | Descrição | Valor padrão |
|---|
MOD_PREFIX | Prefixo que a imagem/áudio modificada terá | "" |
MOD_SUFFIX | Sufixo que a imagem/áudio modificada terá | "_mod" |
STORE_RANDOM | Armazenar dados aleatórios na imagem modificada para que o limite entre a parte com os dados armazenados e a parte sem eles não seja tão óbvio | True |
TEST_MODE | Ativa/Desativa o Modo de Teste: testar com imagens/áudios e arquivos predefinidos | True |
| Parâmetro | Tipo | Descrição |
|---|
arr | np.ndarray | Imagem/áudio como um numpy array |
file | bytes | Arquivo como bytes |
filename | bytes | Nome do arquivo como bytes |
store_random | boolean | Indica se os dados aleatórios devem ou não ser armazenados na imagem/áudio modificada |