stegsnow

Outil de stéganographie par espaces blancs. Cache des données dans des fichiers texte en ajoutant des caractères d'espacement invisibles (espaces et tabulations) en fin de ligne : détectable uniquement en examinant les octets bruts. Whitespace steganography tool. Hides data in text files by appending invisible whitespace characters (spaces and tabs) to the end of lines — detectable only by examining raw bytes.

↗ https://github.com/mattkwan/snowdrop

Overview

stegsnow hides messages in ASCII text by appending spaces and tabs to end of lines. The data is invisible to casual inspection but can be extracted by anyone with stegsnow and the password. Useful in CTF challenges where a text file seems to contain nothing, but has hidden whitespace data.

Basic Usage

Hide a message in a text file

stegsnow -C -m "secret message" original.txt output.txt

Hide with password protection

stegsnow -C -p password -m "secret message" original.txt output.txt

Extract hidden message

stegsnow -C output.txt

Extract with password

stegsnow -C -p password output.txt

Hiding Data

Hide a short message

stegsnow -C -m "FLAG{hidden_message}" cover.txt stego.txt

Hide with compression + encryption

stegsnow -C -p secretpass -m "sensitive data" cover.txt hidden.txt

Hide contents of a file

stegsnow -C -p pass $(cat message.txt) cover.txt stego.txt

Extraction

Extract without password

stegsnow stego.txt

Extract with password

stegsnow -C -p password stego.txt

View raw whitespace

cat -A stego.txt | grep " $\|	$"

→ Shows lines ending in spaces (^I = tab, space before $)

CTF Detection

Check if a text file has stegsnow hidden data Look for trailing whitespace patterns

cat -A suspicious.txt | grep -E " +\$|	+\$" | head -5

Check file size — stego version will be slightly larger

ls -la original.txt stego.txt

Try extraction without password first

stegsnow suspicious.txt
# Then try common passwords
for pass in "password" "secret" "flag" "stego" "snow"; do
  result=$(stegsnow -p "$pass" suspicious.txt 2>/dev/null)
  [ -n "$result" ] && echo "Pass: $pass$result"
done

Options

-C          Compress the data (recommended)
-Q          Quiet mode
-S          Maximum amount of data to hide
-m MSG      Message to hide
-p PASS     Password for encryption
-l N        Line length (default: 80)

Show capacity of cover file

stegsnow -S cover.txt

Tips

  • The -C flag enables LZSS compression — always use it for larger messages
  • Whitespace steganography is a classic CTF technique — always check text files
  • cat -A reveals hidden whitespace: spaces show as spaces before $, tabs as ^I
  • No password usually means no encryption but possibly still compressed
  • The data is hidden in the trailing whitespace of text lines — any tool that strips trailing whitespace will destroy the hidden data
Help / Man page
stegsnow [options] [infile] [outfile]

Hide:   stegsnow -C -m MESSAGE [-p PASS] infile outfile
Extract: stegsnow -C [-p PASS] infile

-C          Compress
-Q          Quiet
-S          Show capacity
-m MSG      Message to hide
-p PASS     Password
-l N        Line length

Vue d’ensemble

stegsnow cache des messages dans du texte ASCII en ajoutant des espaces et tabulations en fin de ligne. Les données sont invisibles à une inspection superficielle mais peuvent être extraites par quiconque possède stegsnow et le mot de passe. Utile dans les challenges CTF où un fichier texte semble ne contenir rien, mais dissimule en réalité des données dans les espaces blancs.

Utilisation de base

# Cacher un message dans un fichier texte
stegsnow -C -m "secret message" original.txt output.txt

# Cacher avec protection par mot de passe
stegsnow -C -p password -m "secret message" original.txt output.txt

# Extraire le message caché
stegsnow -C output.txt

# Extraire avec mot de passe
stegsnow -C -p password output.txt

Cacher des données

# Cacher un message court
stegsnow -C -m "FLAG{hidden_message}" cover.txt stego.txt

# Cacher avec compression + chiffrement
stegsnow -C -p secretpass -m "sensitive data" cover.txt hidden.txt

# Cacher le contenu d'un fichier
stegsnow -C -p pass $(cat message.txt) cover.txt stego.txt

Extraction

# Extraire sans mot de passe
stegsnow stego.txt

# Extraire avec mot de passe
stegsnow -C -p password stego.txt

# Visualiser les espaces bruts
cat -A stego.txt | grep " $\|	$"

→ Montre les lignes se terminant par des espaces (^I = tabulation, espace avant $)

Détection CTF

# Vérifier si un fichier texte contient des données cachées par stegsnow
# Chercher des motifs d'espaces en fin de ligne
cat -A suspicious.txt | grep -E " +\$|	+\$" | head -5

# Vérifier la taille du fichier : la version stéganographiée sera légèrement plus grande
ls -la original.txt stego.txt

# Essayer d'abord une extraction sans mot de passe
stegsnow suspicious.txt
# Puis essayer des mots de passe courants
for pass in "password" "secret" "flag" "stego" "snow"; do
  result=$(stegsnow -p "$pass" suspicious.txt 2>/dev/null)
  [ -n "$result" ] && echo "Pass: $pass$result"
done

Options

-C          Compresser les données (recommandé)
-Q          Mode silencieux
-S          Quantité maximale de données à cacher
-m MSG      Message à cacher
-p PASS     Mot de passe pour le chiffrement
-l N        Longueur de ligne (par défaut : 80)

Afficher la capacité du fichier porteur

stegsnow -S cover.txt

Conseils

  • Le flag -C active la compression LZSS : toujours l’utiliser pour des messages plus longs
  • La stéganographie par espaces blancs est une technique CTF classique : toujours vérifier les fichiers texte
  • cat -A révèle les espaces cachés : les espaces s’affichent comme des espaces avant $, les tabulations comme ^I
  • L’absence de mot de passe signifie généralement pas de chiffrement mais possiblement encore compressé
  • Les données sont cachées dans les espaces en fin de ligne : tout outil qui supprime les espaces de fin détruira les données cachées
Aide / Page de manuel
stegsnow [options] [infile] [outfile]

Hide:   stegsnow -C -m MESSAGE [-p PASS] infile outfile
Extract: stegsnow -C [-p PASS] infile

-C          Compress
-Q          Quiet
-S          Show capacity
-m MSG      Message to hide
-p PASS     Password
-l N        Line length