Esteganografia de Imagens
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
A maioria dos desafios de stego de imagem em CTF se resume a um destes grupos:
- LSB/bit-planes (PNG/BMP)
- Metadata/comment payloads
- PNG chunk weirdness / corruption repair
- JPEG DCT-domain tools (OutGuess, etc)
- Frame-based (GIF/APNG)
Triagem rápida
Priorize evidências ao nível do contêiner antes da análise profunda do conteúdo:
- Valide o arquivo e inspecione a estrutura:
file,magick identify -verbose, format validators (e.g.,pngcheck). - Extraia metadata e strings visíveis:
exiftool -a -u -g1,strings. - Verifique conteúdo embutido/anexado:
binwalke inspeção de fim-de-arquivo (tail | xxd). - Siga por tipo de contêiner:
- PNG/BMP: bit-planes/LSB e anomalias em nível de chunk.
- JPEG: metadata + ferramentas no domínio DCT (famílias OutGuess/F5-style).
- GIF/APNG: extração de frames, diferença entre frames, truques de paleta.
Bit-planes / LSB
Técnica
PNG/BMP são populares em CTFs porque armazenam pixels de forma que torna a manipulação a nível de bit fácil. O mecanismo clássico de esconder/extrair é:
- Cada canal de pixel (R/G/B/A) possui múltiplos bits.
- O least significant bit (LSB) de cada canal altera muito pouco a imagem.
- Atacantes escondem dados nesses bits de baixa ordem, às vezes com um stride, permutação ou escolha por canal.
O que esperar em desafios:
- O payload está em apenas um canal (por exemplo,
RLSB). - O payload está no canal alpha.
- Payload é comprimido/encodado após extração.
- A mensagem está espalhada por planos ou escondida via XOR entre planos.
Outras famílias que você pode encontrar (dependendo da implementação):
- LSB matching (não apenas invertendo o bit, mas ajustes de +/-1 para corresponder ao bit alvo)
- Palette/index-based hiding (indexed PNG/GIF: payload em índices de cor em vez de RGB bruto)
- Alpha-only payloads (payload apenas no alpha, completamente invisível na visualização RGB)
Ferramentas
zsteg
zsteg enumera muitos padrões de extração LSB/bit-plane para PNG/BMP:
zsteg -a file.png
Repo: https://github.com/zed-0xff/zsteg
StegoVeritas / Stegsolve
stegoVeritas: runs a battery of transforms (metadata, image transforms, brute forcing LSB variants).stegsolve: manual visual filters (channel isolation, plane inspection, XOR, etc).
Stegsolve download: https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve
FFT-based visibility tricks
FFT is not LSB extraction; it is for cases where content is deliberately hidden in frequency space or subtle patterns.
- EPFL demo: http://bigwww.epfl.ch/demo/ip/demos/FFT/
- Fourifier: https://www.ejectamenta.com/Fourifier-fullscreen/
- FFTStegPic: https://github.com/0xcomposure/FFTStegPic
Web-based triage often used in CTFs:
- Aperi’Solve: https://aperisolve.com/
- StegOnline: https://stegonline.georgeom.net/
PNG internals: chunks, corruption, and hidden data
Technique
PNG é um formato em chunks. Em muitos desafios o payload é armazenado ao nível do container/chunk em vez de nos valores de pixel:
- Extra bytes after
IEND(muitos viewers ignoram bytes finais) - Non-standard ancillary chunks carregando payloads
- Corrupted headers que ocultam dimensões ou quebram parsers até serem corrigidos
High-signal chunk locations to review:
tEXt/iTXt/zTXt(metadados de texto, às vezes comprimidos)iCCP(ICC profile) and other ancillary chunks used as a carriereXIf(EXIF data in PNG)
Triage commands
magick identify -verbose file.png
pngcheck -v file.png
O que procurar:
- Combinações estranhas de width/height/bit-depth/colour-type
- Erros de CRC/chunk (pngcheck geralmente aponta para o offset exato)
- Avisos sobre dados adicionais após
IEND
Se precisar de uma visualização de chunk mais aprofundada:
pngcheck -vp file.png
exiftool -a -u -g1 file.png
Referências úteis:
- PNG specification (structure, chunks): https://www.w3.org/TR/PNG/
- File format tricks (PNG/JPEG/GIF corner cases): https://github.com/corkami/docs
JPEG: metadados, ferramentas em domínio DCT e limitações da ELA
Técnica
JPEG não é armazenado como pixels brutos; é comprimido no domínio DCT. É por isso que as ferramentas stego para JPEG diferem das ferramentas PNG LSB:
- Metadados/comentários (payloads) são de nível de arquivo (alto sinal e rápidos de inspecionar)
- Ferramentas stego em domínio DCT inserem bits em coeficientes de frequência
Operacionalmente, trate o JPEG como:
- Um contêiner para segmentos de metadados (alto sinal, rápidos de inspecionar)
- Um domínio de sinal comprimido (coeficientes DCT) onde ferramentas stego especializadas operam
Verificações rápidas
exiftool file.jpg
strings -n 6 file.jpg | head
binwalk file.jpg
Locais de alto sinal:
- EXIF/XMP/IPTC metadata
- JPEG comment segment (
COM) - Application segments (
APP1for EXIF,APPnfor vendor data)
Ferramentas comuns
- OutGuess: https://github.com/resurrecting-open-source-projects/outguess
- OpenStego: https://www.openstego.com/
Se você estiver lidando especificamente com steghide payloads em JPEGs, considere usar stegseek (bruteforce mais rápido que scripts mais antigos):
Error Level Analysis
ELA destaca diferentes artefatos de recompressão; pode apontar regiões que foram editadas, mas não é um detector de stego por si só:
Imagens animadas
Técnica
Para imagens animadas, assuma que a mensagem está:
- Em um único frame (fácil), ou
- Distribuída por frames (a ordem importa), ou
- Visível apenas quando você diff frames consecutivos
Extrair frames
ffmpeg -i anim.gif frame_%04d.png
Então trate os frames como PNGs normais: zsteg, pngcheck, channel isolation.
Ferramentas alternativas:
gifsicle --explode anim.gif(extração rápida de frames)imagemagick/magickpara transformações por frame
Frame differencing is often decisive:
magick frame_0001.png frame_0002.png -compose difference -composite diff.png
APNG pixel-count encoding
- Detectar contêineres APNG:
exiftool -a -G1 file.png | grep -i animationorfile. - Extrair frames sem re-temporização:
ffmpeg -i file.png -vsync 0 frames/frame_%03d.png. - Recuperar payloads codificados como contagens de pixels por frame:
from PIL import Image
import glob
out = []
for f in sorted(glob.glob('frames/frame_*.png')):
counts = Image.open(f).getcolors()
target = dict(counts).get((255, 0, 255, 255)) # adjust the target color
out.append(target or 0)
print(bytes(out).decode('latin1'))
Desafios animados podem codificar cada byte como a contagem de uma cor específica em cada quadro; concatenar as contagens reconstrói a mensagem.
Incorporação protegida por senha
Se você suspeitar que a incorporação está protegida por uma passphrase em vez de manipulação ao nível de pixels, este é normalmente o caminho mais rápido.
steghide
Suporta JPEG, BMP, WAV, AU e pode embed/extract encrypted payloads.
steghide info file
steghide extract -sf file --passphrase 'password'
Não tenho acesso direto ao repositório. Cole aqui o conteúdo de src/stego/images/README.md (ou a seção “StegCracker” que quer traduzida) que devo traduzir para português, que eu faço a tradução mantendo a mesma sintaxe markdown/html.
stegcracker file.jpg wordlist.txt
Repositório: https://github.com/Paradoxis/StegCracker
stegpy
Suporta PNG/BMP/GIF/WebP/WAV.
Repositório: https://github.com/dhsdshdhk/stegpy
Referências
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.


