
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.1MP 이미지에는 암호화된 9MB .zip 파일과 그 파일명이 노이즈로 저장되어 있습니다.
<img src="https://raw.githubusercontent.com/carlospuenteg/file-injector/main/readme-assets/17"1MP_mod.png" width=500>
이 1.7MP 이미지에는 암호화된 0.93MB .zip 파일과 그 파일명이 노이즈로 저장되어 있습니다.
<img src="https://raw.githubusercontent.com/carlospuenteg/file-injector/main/readme-assets/1"7MP_mod.png" width=500>
이 42MB 오디오 파일에는 암호화된 9MB .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개 하위 비트에 파일을 저장하여 수행됩니다.
| 옵션 | 설명 |
|---|---|
| [0] 종료 | 스크립트 종료 |
| [1] 파일 주입 | inject_file_func() 호출 |
| [2] 파일 추출 | extract_file_func() 호출 |
inject_file_func()TEST_MODE == True이면 미리 정의된 기본 이미지/오디오 및 입력 파일을 사용합니다. 그렇지 않으면 기본 이미지/오디오 및 입력 파일을 묻습니다.get_fernet()으로 키를 가져옵니다.inject_file()로 이미지/오디오에 파일과 파일명을 주입하려고 시도합니다.
extract_file_func()TEST_MODE == True이면 미리 정의된 수정된 이미지/오디오를 사용합니다. 그렇지 않으면 수정된 이미지/오디오를 묻습니다.extract_file()로 파일과 파일명을 바이트로 추출합니다.gAAAAA로 시작), decrypt_content()로 복호화합니다.get_fernet()| 옵션 | 설명 |
|---|---|
| [0] 기존 키 | 기존 키 사용 |
| [1] 새 키 | 새 키 생성 |
[0] 기존 키
files/$encryption-keys 폴더에서 사용할 키를 선택합니다.[1] 새 키
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 | 수정된 이미지/오디오에 임의 데이터를 저장할지 여부 |