Назад к обновлениям
UpdatedSep 2, 2026

jdvrif — Updated!

Инструмент стеганографии для изображений JPG

Поделиться

jdvrif

jdvrif — это быстрый и простой в использовании инструмент стеганографии для командной строки, предназначенный для скрытия и извлечения файлов любого типа с помощью изображения в формате JPG.

Также доступна веб-версия, которую можно использовать сразу, как удобную альтернативу загрузке и компиляции исходного кода CLI. Загрузка файлов на веб-версию ограничена 20MB.

Для тех, кто интересуется языком Rust, доступен экспериментальный порт jdvrif-rs.

Demo Image
Демонстрационное изображение: «Место сокрытия» / PIN: 2190398302048725932

В отличие от распространённого метода LSB-стеганографии, при котором данные скрываются в пикселях изображения-носителя, jdvrif в основном скрывает данные внутри сегментов приложения изображения JPG (ICC, EXIF, XMP и т. д.).

Исключением является режим скрытия для платформы Reddit (-r), где используется метод стеганографии QIM (модуляция индекса квантования в DCT-области JPEG), поскольку это единственный метод хранения, который в настоящее время работает для Reddit.

Вы можете скрыть файл любого типа размером до 2GB в режиме скрытия по умолчанию, хотя другие режимы скрытия для платформ и совместимые сайты (перечисленные ниже) имеют свои собственные гораздо меньшие ограничения по размеру и *другие требования.

Для увеличения ёмкости хранилища и повышения безопасности ваш встроенный файл данных сжимается с помощью libdeflate/zlib — если только это не уже сжатый тип файла размером более 10 МБ — и шифруется с помощью XChaCha20-Poly1305 с использованием криптографической библиотеки libsodium.

jdvrif частично основан на методе, реализованном исследователем безопасности Дэвидом Бьюкененом.

Компиляция и использование (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 

Usage: jdvrif conceal [-b] <cover_image> <secret_file>
       jdvrif recover <cover_image>  
       jdvrif --info

$ jdvrif conceal your_cover_image.jpg your_secret_file.doc
 
Platform compatibility for output image:-

  ✓ X-Twitter
  ✓ Tumblr
  ✓ Mastodon
  ✓ Pixelfed
  ✓ PostImage
  ✓ ImgBB
  ✓ ImgPile
  ✓ Flickr
  
Saved "file-embedded" JPG image: jrif_4e87c566c.jpg (143029 bytes).

Recovery PIN: [***2166776980318349924***]

Important: Keep your PIN safe, so that you can extract the hidden file.

Complete!
        
$ jdvrif recover jrif_4e87c566c.jpg

PIN: *******************

Extracted hidden file: your_secret_file.doc (6165 bytes).

Complete! Please check your file.

Совместимые платформы

******************
Примечание: Bluesky теперь по умолчанию сохраняет изображения в формате WEBP.

Чтобы сохранить изображение в формате JPG, чтобы вы могли по-прежнему извлекать скрытые данные с помощью jdvrif.
Сначала нажмите на изображение в посте, чтобы открыть его, затем щёлкните правой кнопкой мыши по изображению. В меню выберите Открыть изображение в новой вкладке.

Выберите новую вкладку и в адресной строке перейдите в конец адреса, добавьте @jpg и нажмите Enter.
Щёлкните правой кнопкой мыши по изображению и в меню выберите Сохранить изображение как...

Теперь ваше изображение должно быть загружено в формате JPG, который будет работать с jdvrif.

Если вам нужен инструмент для скрытия данных с помощью изображений WEBP для публикации на Bluesky, вы можете использовать мой инструмент стеганографии для 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.

Опции платформы для режима conceal jdvrif:

"-r" Чтобы создавать совместимые изображения JPG со "встроенным файлом" для публикации на платформе Reddit, вы должны использовать опцию -r с режимом conceal.

$ jdvrif conceal -r my_image.jpg hidden.doc

Эти изображения совместимы только для публикации на Reddit. Ваш встроенный файл данных будет удалён, если изображение будет опубликовано на другой платформе.

При сохранении/загрузке изображения с Reddit обязательно нажмите на изображение в посте, чтобы полностью развернуть его, перед сохранением.

https://github.com/user-attachments/assets/9f1b4607-e7f1-4c5f-8929-b42c1a85bb88

"-b" Чтобы создавать совместимые изображения JPG со "встроенным файлом" для публикации на платформе Bluesky, вы должны использовать опцию -b с режимом conceal.

$ jdvrif conceal -b my_image.jpg hidden.doc

Эти изображения совместимы только для публикации на Bluesky. Ваш встроенный файл данных будет удалён, если изображение будет опубликовано на другой платформе.

Вам также необходимо использовать Python-скрипт create_bsky_post.py (находится в папке репозитория src/bsky) для публикации изображения на Bluesky. Он не будет работать, если вы публикуете изображения на Bluesky через браузерный сайт или мобильное приложение.

Чтобы использовать скрипт, вам нужно создать пароль приложения в вашей учётной записи Bluesky.

См. скрипт create_bsky_post.py в папке src/bsky для некоторых базовых примеров использования.

https://github.com/user-attachments/assets/b4c72ea7-40e3-49b0-89aa-ae2dd8ccccb9

Стороннее программное обеспечение и ресурсы

Основные приложения

  • libsodium — криптографическая генерация случайных чисел, вывод ключа Argon2id и секретные потоки XChaCha20-Poly1305. Динамически подключается как системная библиотека.

    Лицензия: ISC License

    Copyright (c) 2013–2026 Frank Denis.

  • libjpeg-turbo — обработка JPEG и без потерь трансформация. Динамически подключается как системная библиотека.

    Это программное обеспечение частично основано на работе Independent JPEG Group.

    Лицензии: Independent JPEG Group License, Modified BSD 3-Clause License, and zlib License.

    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 License

    Copyright (C) 1995–2026 Jean-loup Gailly and Mark Adler.

  • libdeflate — Быстрое сжатие всего буфера в формате zlib. Динамически подключается как системная библиотека.

    Лицензия: MIT

    Copyright 2016 Eric Biggers.

    Copyright 2024 Google LLC.

Включённый код и ресурсы

  • base64simd — AVX2-кодировщик Base64 адаптирован из векторной реализации 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 и API-запросы Bluesky.

    Лицензия: 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 и © 1995–2011 Fredrik Lundh и участники.

    Pillow copyright © 2010 Jeffrey “Alex” Clark и участники.

Категории