
File Injector — это скрипт, который позволяет хранить любой файл в изображении с помощью стеганографии.
File Injector — это скрипт, который позволяет хранить любой файл (.zip, .png, .txt, .gba...) и его имя в изображении/аудио в виде шума, используя стеганографию.
Вы также можете зашифровать входной файл перед сохранением.
Затем для извлечения файла из изменённого изображения/аудио НЕ требуется исходное изображение/аудио, достаточно ключа шифрования, если файл был зашифрован.
python3 -m pip install -r requirements.txt
Если это не сработает, попробуйте:
py -m pip install -r requirements.txt
python3 main.py
Выберите базовое изображение/аудио для хранения файла из папки files/base.
Вы также можете добавить свои изображения/аудио в эту папку.
.png или (.jpg/.jpeg), но при запуске скрипта они будут преобразованы в .png..mp3 или .wav, но при запуске скрипта они будут преобразованы в .mp3.Выберите файл для сохранения в изображении/аудио из папки files/input.
Вы можете добавить свои файлы в эту папку. Это могут быть файлы любого типа.
Выберите изменённое изображение/аудио для извлечения файла из папки files/modified.
Вы также можете добавить свои изменённые изображения/аудио в эту папку.
Вы можете выбрать ключ из папки files/$encryption-keys или сгенерировать его там.
Файл ключа должен иметь расширение .key.
Вам не нужно выбирать конкретный ключ при расшифровке файла — он будет выбран автоматически из папки.
Это изображение 17,1 МП содержит зашифрованный 9 МБ .zip файл и его имя, сохранённые как шум.
<img src="https://raw.githubusercontent.com/carlospuenteg/file-injector/HEAD/readme-assets/17"1MP_mod.png" width=500>
Это изображение 1,7 МП содержит зашифрованный 0,93 МБ .zip файл и его имя, сохранённые как шум.
<img src="https://raw.githubusercontent.com/carlospuenteg/file-injector/HEAD/readme-assets/1"7MP_mod.png" width=500>
Этот аудиофайл 42 МБ содержит зашифрованный 9 МБ .zip файл и его имя, сохранённые как шум.
... 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
Вы можете изменить конфигурацию в файле config.py.
Внедрение выполняется путём сохранения файла в X младших битах каждого элемента массива, полученного уплощением (flatten) массива изображения/аудио.
| Опция | Описание |
|---|---|
| [0] EXIT | Выход из скрипта |
| [1] Inject file | Вызывает inject_file_func() |
| [2] Extract file | Вызывает extract_file_func() |
inject_file_func()TEST_MODE == True, используются предопределённые базовое изображение/аудио и входной файл. Иначе запрашиваются базовое изображение/аудио и входной файл.get_fernet()inject_file()
extract_file_func()TEST_MODE == True, используется предопределённое изменённое изображение/аудио. Иначе запрашивается изменённое изображение/аудио.extract_file()gAAAAA), они расшифровываются с помощью decrypt_contentget_fernet()| Опция | Описание |
|---|---|
| [0] Existing key | Использовать существующий ключ |
| [1] New key | Сгенерировать новый ключ |
[0] Existing key
files/$encryption-keys[1] New key
decrypt_content()files/$encryption-keys:
inject_file()Возвращает массив изменённого изображения/аудио (np.ndarray той же формы, что и arr)
extract_file()| Параметр | Тип | Описание |
|---|---|---|
mod_arr_flat | np.ndarray | Уплощённый массив изменённого изображения/аудио |
Возвращает словарь с извлечёнными файлом и именем файла, оба в формате (bytes)
| Константа | Описание | Значение по умолчанию |
|---|
MOD_PREFIX | Префикс, который будет добавлен к изменённому изображению/аудио | "" |
MOD_SUFFIX | Суффикс, который будет добавлен к изменённому изображению/аудио | "_mod" |
STORE_RANDOM | Сохранять случайные данные в изменённом изображении, чтобы граница между частью с сохранёнными данными и частью без них была не так заметна | True |
TEST_MODE | Включает/отключает тестовый режим: тестирование с предопределёнными изображениями/аудио и файлами | True |
| Параметр | Тип | Описание |
|---|
arr | np.ndarray | Изображение/аудио в виде массива numpy |
file | bytes | Файл в виде байтов |
filename | bytes | Имя файла в виде байтов |
store_random | boolean | Сохранять ли случайные данные в изменённом изображении/аудио |