
Ferramenta de Esteganografia para Imagens JPG
jdvrif é uma ferramenta de esteganografia de linha de comando rápida e fácil de usar, para ocultar e extrair qualquer tipo de arquivo através de uma imagem JPG.
Existe também uma edição Web, que você pode usar imediatamente, como uma alternativa conveniente para baixar e compilar o código-fonte da CLI. Os uploads de arquivos na Web são limitados a 20MB.
Um port experimental em Rust, jdvrif-rs, está disponível para aqueles interessados nessa linguagem.

Imagem de Demonstração: "Um lugar de ocultação" / PIN: 2190398302048725932
Ao contrário do comum método de esteganografia LSB de ocultar dados dentro dos pixels de uma imagem de capa, o jdvrif oculta principalmente dados dentro de segmentos de aplicação de uma imagem JPG (ICC, EXIF, XMP, etc.).
A exceção a isso é o modo de ocultação da plataforma Reddit (-r), onde usamos o método de esteganografia QIM (Modulação de Índice de Quantização no domínio DCT do JPEG), pois este é o único método de armazenamento que atualmente funciona para o Reddit.
Você pode ocultar qualquer tipo de arquivo de até 2GB no modo de ocultação padrão, embora outros modos de ocultação de plataforma e sites compatíveis (listados abaixo) tenham seus próprios limites de tamanho muito menores e *outros requisitos.
Para maior capacidade de armazenamento e melhor segurança, seu arquivo de dados incorporado é comprimido com libdeflate/zlib — a menos que já seja um tipo de arquivo comprimido com mais de 10 MB — e criptografado com XChaCha20-Poly1305 usando a biblioteca criptográfica libsodium.
O jdvrif deriva parcialmente da técnica implementada pelo pesquisador de segurança David Buchanan.
$ 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
Uso: jdvrif conceal [-b] <imagem_capa> <arquivo_secreto>
jdvrif recover <imagem_capa>
jdvrif --info
$ jdvrif conceal sua_imagem_capa.jpg seu_arquivo_secreto.doc
Compatibilidade de plataforma para imagem de saída:-
✓ X-Twitter
✓ Tumblr
✓ Mastodon
✓ Pixelfed
✓ PostImage
✓ ImgBB
✓ ImgPile
✓ Flickr
Imagem JPG "com arquivo incorporado" salva: jrif_4e87c566c.jpg (143029 bytes).
PIN de recuperação: [***2166776980318349924***]
Importante: Mantenha seu PIN seguro, para que você possa extrair o arquivo oculto.
Concluído!
$ jdvrif recover jrif_4e87c566c.jpg
PIN: *******************
Arquivo oculto extraído: seu_arquivo_secreto.doc (6165 bytes).
Concluído! Por favor, verifique seu arquivo.
******************
Nota: O Bluesky agora salva imagens como WEBP por padrão.
Para salvar uma imagem como JPG, para que você ainda possa recuperar dados ocultos com o jdvrif.
Primeiro, clique na imagem na postagem para abri-la, depois clique com o botão direito na imagem. No menu, selecione Abrir imagem em nova aba.
Selecione a nova aba e, na barra de endereço, vá até o final do endereço e adicione @jpg e pressione Enter.
Clique com o botão direito na imagem e, no menu, selecione Salvar imagem...
Sua imagem agora deve ser baixada como JPG, que funcionará com o jdvrif.
Se você quiser uma ferramenta para ocultar dados usando imagens WEBP para postar no Bluesky, você pode usar minha ferramenta CLI de esteganografia WEBP, wbpdv
******************
Limite de tamanho de postagem medido pelo tamanho combinado da imagem de capa + arquivo de dados comprimido:
● Flickr (200MB), ImgPile (100MB), ImgBB (32MB),
● PostImage (32MB), Pixelfed (15MB).
Limite de tamanho medido apenas pelo tamanho do arquivo de dados comprimido:
● Mastodon (~6MB), Tumblr (~64KB), X-Twitter (~10KB).
Por exemplo, com o Mastodon, se sua imagem de capa tiver 1MB, você ainda pode incorporar um arquivo de dados até o limite de ~6MB.
*Outros: A plataforma Bluesky tem limites de tamanho separados para a imagem de capa e o arquivo de dados oculto comprimido:
● Bluesky (opção -b). Limite máximo de tamanho da imagem de capa (2.000.000 bytes / ~1.9MB). Limite máximo de tamanho do seu arquivo de dados oculto comprimido (payload) (~171KB).
A imagem de capa final incorporada (imagem de capa + arquivo oculto) não deve exceder 2.000.000 bytes (~1.9MB). O script "create_bsky_post.py" é necessário para postar imagens no Bluesky. Mais informações sobre este script mais abaixo na página.
● Reddit (opção -r). Embora a plataforma Reddit tenha um limite de upload de imagem de 20MB, a capacidade de armazenamento de dados para a imagem de capa é muito menor e depende do tamanho das dimensões da imagem.
Por exemplo, uma imagem de capa com dimensões 1024x1024 pode armazenar apenas ~6KB de dados, uma imagem com dimensões 4096x4096 pode armazenar ~109KB e uma imagem com dimensões máximas 6324×6324 pode armazenar ~254KB.
Para plataformas como X-Twitter, Reddit e Tumblr, que têm pequenos limites de tamanho de dados, você pode querer focar em dados que comprimem bem, como arquivos de texto, etc.
https://github.com/user-attachments/assets/c8c38e6d-ea23-4d67-98d9-cebdcd82b449
https://github.com/user-attachments/assets/88aaa5f7-3272-4d0c-aa59-1a5bfe2f08dc
Argumentos de modo do jdvrif:
conceal - Comprime, criptografa e incorpora seu arquivo de dados secreto dentro de uma imagem de capa JPG.
recover - Descriptografa, descomprime e extrai o arquivo de dados oculto de uma imagem de capa JPG.
Opções de plataforma do modo conceal do jdvrif:
"-r" Para criar imagens JPG "com arquivo incorporado" compatíveis para postar na plataforma Reddit, você deve usar a opção -r com o modo conceal.
$ jdvrif conceal -r minha_imagem.jpg oculto.doc
Essas imagens são compatíveis apenas para postagem no Reddit. Seu arquivo de dados incorporado será removido se postado em uma plataforma diferente.
Ao salvar/baixar uma imagem do Reddit, certifique-se de clicar na imagem dentro da postagem para expandi-la totalmente antes de salvar.
https://github.com/user-attachments/assets/9f1b4607-e7f1-4c5f-8929-b42c1a85bb88
"-b" Para criar imagens JPG "com arquivo incorporado" compatíveis para postar na plataforma Bluesky, você deve usar a opção -b com o modo conceal.
$ jdvrif conceal -b minha_imagem.jpg oculto.doc
Essas imagens são compatíveis apenas para postagem no Bluesky. Seu arquivo de dados incorporado será removido se postado em uma plataforma diferente.
Você também é obrigado a usar o script Python create_bsky_post.py (encontrado na pasta src/bsky do repositório) para postar a imagem no Bluesky. Não funcionará se você postar imagens no Bluesky através do site do navegador ou do aplicativo móvel.
Para usar o script, você precisará criar uma senha de aplicativo na sua conta do Bluesky.
Veja o script create_bsky_post.py na pasta src/bsky para alguns exemplos básicos de uso.
https://github.com/user-attachments/assets/b4c72ea7-40e3-49b0-89aa-ae2dd8ccccb9
libsodium — geração aleatória criptográfica, derivação de chave Argon2id e fluxos secretos XChaCha20-Poly1305. Vinculado dinamicamente como uma biblioteca do sistema.
Licença: Licença ISC
Copyright (c) 2013–2026 Frank Denis.
libjpeg-turbo — processamento JPEG e transformação sem perdas. Vinculado dinamicamente como uma biblioteca do sistema.
Este software é baseado em parte no trabalho do Independent JPEG Group.
Licenças: Licença Independent JPEG Group, Licença BSD 3-Cláusulas Modificada, e Licença zlib.
Copyright © 1991–2020 Thomas G. Lane e Guido Vollbeding.
Copyright © 2009–2023 D. R. Commander. Todos os direitos reservados.
Copyright © 2015 Viktor Szathmáry. Todos os direitos reservados.
zlib — Compressão e descompressão zlib em streaming. Vinculado dinamicamente como uma biblioteca do sistema.
Licença: Licença zlib
Copyright (C) 1995–2026 Jean-loup Gailly e Mark Adler.
libdeflate — Compressão rápida de formato zlib de buffer inteiro. Vinculado dinamicamente como uma biblioteca do sistema.
Licença: MIT
Copyright 2016 Eric Biggers.
Copyright 2024 Google LLC.
base64simd — O codificador Base64 AVX2 é adaptado da implementação vetorial Base64 de Wojciech Muła.
Licença: BSD 2-Cláusulas
Copyright (c) 2015–2018, Wojciech Muła. Todos os direitos reservados.
Compact ICC Profiles — perfil ICC incorporado compatível com Adobe.
Licença: CC0 1.0 Universal
Bryan Newbold / ATProto Hacker Cookbook — create_bsky_post.py — Base para o fork do auxiliar de postagem no Bluesky (src/bsky/bsky_post.py). Para referência, veja a cópia do Cookbook
Licença: CC0 1.0 Universal.
Requests — Requisições HTTP e API do Bluesky.
Licença: Apache 2.0 / NOTICE
Copyright 2019 Kenneth Reitz.
Beautiful Soup 4 — Análise de metadados HTML e Open Graph.
Licença: MIT
Copyright (c) Leonard Richardson.
Pillow — Validação de imagem, dimensões e manipulação de proporção de aspecto.
Licença: MIT-CMU
Copyright PIL © 1997–2011 Secret Labs AB e © 1995–2011 Fredrik Lundh e colaboradores.
Copyright Pillow © 2010 Jeffrey “Alex” Clark e colaboradores.