
jdvrif — Updated!
JPG画像向けステガノグラフィツール
jdvrif
jdvrif は、JPG 画像を介してあらゆるファイルタイプを隠蔽・抽出するための、高速で使いやすいステガノグラフィーコマンドラインツールです。
CLIソースコードをダウンロードしてコンパイルする代わりに、すぐに利用できる便利な代替手段として、Web版 もあります。Webアップロードは 20MB に制限されています。
その言語に興味がある方のために、実験的な Rust 移植版 jdvrif-rs も利用可能です。

デモ画像: 「隠し場所」 / PIN: 2190398302048725932
カバー画像のピクセル内にデータを隠す一般的な LSBステガノグラフィー手法 とは異なり、jdvrif は主に JPG 画像の アプリケーションセグメント(ICC、EXIF、XMPなど)内にデータを隠します。
例外は Reddit プラットフォームの隠蔽モード(-r)で、ここでは QIMステガノグラフィー手法(JPEG DCTドメイン量子化インデックス変調)を使用します。これは現在 Reddit で機能する唯一の保存方法だからです。
デフォルトの隠蔽モードでは最大 2GB までのあらゆるファイルタイプを隠蔽できますが、他のプラットフォームの隠蔽モードおよび互換サイト(以下に記載)には、それぞれ独自の はるかに小さい サイズ制限と *その他の要件があります。
ストレージ容量の増加とセキュリティ向上のため、埋め込まれたデータファイルは、libdeflate/zlib で圧縮され(すでに10MBを超える圧縮ファイルタイプでない場合)、libsodium 暗号化ライブラリを使用して XChaCha20-Poly1305 で暗号化されます。
jdvrif は、セキュリティ研究者 David Buchanan が実装した 手法 に一部由来しています。
コンパイルと使用方法(Linux)
$ sudo apt update
$ sudo apt install g++ cmake ninja-build util-linux libsodium-dev libturbojpeg0-dev zlib1g-dev libdeflate-dev
$ chmod +x compile_jdvrif.sh
$ ./compile_jdvrif.sh
$ sudo cp jdvrif /usr/bin
$ jdvrif
使用方法: jdvrif conceal [-b] <カバー画像> <秘密ファイル>
jdvrif recover <カバー画像>
jdvrif --info
$ jdvrif conceal your_cover_image.jpg your_secret_file.doc
出力画像のプラットフォーム互換性:-
✓ X-Twitter
✓ Tumblr
✓ Mastodon
✓ Pixelfed
✓ PostImage
✓ ImgBB
✓ ImgPile
✓ Flickr
保存された「ファイル埋め込み」JPG画像: jrif_4e87c566c.jpg (143029 バイト)。
回復PIN: [***2166776980318349924***]
重要: 隠しファイルを抽出できるように、PINを安全に保管してください。
完了!
$ jdvrif recover jrif_4e87c566c.jpg
PIN: *******************
抽出された隠しファイル: your_secret_file.doc (6165 バイト)。
完了! ファイルを確認してください。
互換プラットフォーム
******************
注: Bluesky は現在、画像をデフォルトで WEBP として保存します。
jdvrif で隠蔽データを引き続き回復できるように、画像を JPG として保存するには: まず投稿内の画像をクリックして開き、次に画像を右クリックします。メニューから 新しいタブで画像を開く を選択します。
新しいタブを選択し、アドレスバー内でアドレスの末尾に移動して @jpg を追加し、Enterキーを押します。 画像を右クリックし、メニューから 画像を保存... を選択します。
画像は JPG としてダウンロードされ、jdvrif で使用できるようになります。
Bluesky に投稿する WEBP 画像を使用してデータを隠蔽するツールが必要な場合は、私の WEBP ステガノグラフィーCLIツール wbpdv を使用できます。 ******************
投稿サイズ制限は、カバー画像 + 圧縮データファイル の 合計 サイズで測定されます:
● Flickr (200MB)、ImgPile (100MB)、ImgBB (32MB)、
● PostImage (32MB)、Pixelfed (15MB)。
サイズ制限は 圧縮データファイルサイズのみ で測定されます:
● Mastodon (~6MB)、Tumblr (~64KB)、X-Twitter (~10KB)。
例えば、Mastodon の場合、カバー画像が 1MB でも、最大 ~6MB のサイズ制限までデータファイルを埋め込むことができます。
その他: Bluesky プラットフォームには、カバー画像 と 圧縮された隠しデータファイル に 別々の サイズ制限があります:
● Bluesky (-bオプション)。カバー画像の最大サイズ制限 (2,000,000 バイト / ~1.9MB)。圧縮された隠しデータファイル(ペイロード)の最大サイズ制限 (~171KB)。
最終的な埋め込みカバー画像(カバー画像 + 隠しファイル)は 2,000,000 バイト(~1.9MB)を超えてはなりません。Bluesky に画像を投稿するには "create_bsky_post.py" スクリプトが必要です。このスクリプトの詳細はページ下部にあります。
● Reddit (-rオプション)。Reddit プラットフォームには画像アップロードサイズ制限が 20MB ありますが、カバー画像のデータ保存容量は はるかに小さく、画像の寸法サイズに依存します。
例えば、1024x1024 の寸法のカバー画像は ~6KB のデータのみ保存でき、4096x4096 の寸法の画像は ~109KB、最大寸法 6324×6324 の画像は ~254KB を保存できます。
X-Twitter、Reddit、Tumblr などのデータサイズ制限が小さいプラットフォームでは、テキストファイルなど圧縮率の高いデータに焦点を当てるとよいでしょう。
https://github.com/user-attachments/assets/c8c38e6d-ea23-4d67-98d9-cebdcd82b449
https://github.com/user-attachments/assets/88aaa5f7-3272-4d0c-aa59-1a5bfe2f08dc
jdvrif モード 引数:
conceal - 秘密データファイルを JPG カバー画像内に圧縮、暗号化、埋め込みます。
recover - JPG カバー画像から隠蔽されたデータファイルを復号、解凍、抽出します。
jdvrif conceal モードの プラットフォーム オプション:
"-r" Reddit プラットフォームに投稿するための互換性のある "ファイル埋め込み" JPG 画像を作成するには、conceal モードで -r オプションを使用する必要があります。
$ jdvrif conceal -r my_image.jpg hidden.doc
これらの画像は Reddit への投稿にのみ互換性があります。別のプラットフォームに投稿すると、埋め込まれたデータファイルは削除されます。
Reddit から画像を保存/ダウンロードするときは、保存する前に投稿内の画像をクリックして完全に拡大してください。
https://github.com/user-attachments/assets/9f1b4607-e7f1-4c5f-8929-b42c1a85bb88
"-b" Bluesky プラットフォームに投稿するための互換性のある "ファイル埋め込み" JPG 画像を作成するには、conceal モードで -b オプションを使用する必要があります。
$ jdvrif conceal -b my_image.jpg hidden.doc
これらの画像は Bluesky への投稿にのみ互換性があります。別のプラットフォームに投稿すると、埋め込まれたデータファイルは削除されます。
また、リポジトリの src/bsky フォルダにある Python スクリプト create_bsky_post.py を使用して、画像を Bluesky に投稿する必要があります。 ブラウザサイトやモバイルアプリを介して Bluesky に画像を投稿しても機能しません。
スクリプトを使用するには、Bluesky アカウントから アプリパスワード を作成する必要があります。
基本的な使用例については、src/bsky フォルダの create_bsky_post.py スクリプトを参照してください。
https://github.com/user-attachments/assets/b4c72ea7-40e3-49b0-89aa-ae2dd8ccccb9
サードパーティソフトウェアとアセット
コアアプリケーション
-
libsodium — 暗号用乱数生成、Argon2id 鍵導出、XChaCha20-Poly1305 シークレットストリーム。システムライブラリとして動的リンク。
ライセンス: ISCライセンス
Copyright (c) 2013–2026 Frank Denis.
-
libjpeg-turbo — JPEG処理とロスレス変換。システムライブラリとして動的リンク。
このソフトウェアは、Independent JPEG Group の作業の一部に基づいています。
ライセンス: Independent JPEG Groupライセンス、修正BSD 3-Clauseライセンス、 およびzlibライセンス。
Copyright © 1991–2020 Thomas G. Lane and Guido Vollbeding.
Copyright © 2009–2023 D. R. Commander. All Rights Reserved.
Copyright © 2015 Viktor Szathmáry. All Rights Reserved.
-
zlib — ストリーミングzlib圧縮と解凍。システムライブラリとして動的リンク。
ライセンス: zlibライセンス
Copyright (C) 1995–2026 Jean-loup Gailly and Mark Adler.
-
libdeflate — 高速なバッファ全体のzlib形式圧縮。システムライブラリとして動的リンク。
ライセンス: MIT
Copyright 2016 Eric Biggers.
Copyright 2024 Google LLC.
組み込みコードとアセット
-
base64simd — AVX2 Base64エンコーダーは、Wojciech Muła のベクターBase64 実装から適合されています。
ライセンス: BSD 2-Clause
Copyright (c) 2015–2018, Wojciech Muła. All rights reserved.
-
Compact ICC Profiles — 埋め込まれたAdobe互換ICCプロファイル。
ライセンス: CC0 1.0 Universal
オプションのBluesky投稿ヘルパー
-
Bryan Newbold / ATProto Hacker Cookbook — create_bsky_post.py — フォークされた Bluesky投稿ヘルパー(src/bsky/bsky_post.py)の基礎。 参考として Cookbookコピー を参照してください。
ライセンス: CC0 1.0 Universal.
-
Requests — HTTPおよびBluesky APIリクエスト。
ライセンス: Apache 2.0 / NOTICE
Copyright 2019 Kenneth Reitz.
-
Beautiful Soup 4 — HTMLおよびOpen Graphメタデータの解析。
ライセンス: MIT
Copyright (c) Leonard Richardson.
-
Pillow — 画像検証、寸法、アスペクト比の処理。
ライセンス: MIT-CMU
PIL copyright © 1997–2011 Secret Labs AB and © 1995–2011 Fredrik Lundh and contributors.
Pillow copyright © 2010 Jeffrey “Alex” Clark and contributors.