
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/HEAD/readme-assets/17"1MP_mod.png" width=500>
この 1.7MP の画像には、暗号化された 0.93MB の .zip ファイルとそのファイル名がノイズとして保存されています。
<img src="https://raw.githubusercontent.com/carlospuenteg/file-injector/HEAD/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] 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_content で復号化しますget_fernet()| オプション | 説明 |
|---|---|
| [0] Existing key | 既存のキーを使用する |
| [1] New key | 新しいキーを生成する |
[0] 既存のキー
files/$encryption-keys フォルダから使用するキーを選択します[1] 新しいキー
decrypt_content()files/$encryption-keys フォルダ内の各キーについて:
inject_file()改変された画像/音声の配列(arr と同じ形状の np.ndarray)を返します
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 | 改変された画像/音声にランダムデータを保存するかどうか |