Vue d'une image obtenue en isolant un seul bit (0 à 7) de chaque pixel. L'analyse du plan de bits 0 (LSB) révèle souvent les données cachées sous forme de motifs non naturels dans des zones qui devraient paraître uniformes.
- 01
Une image 8 bits par canal possède 8 plans de bits (0 = LSB à 7 = MSB). Les plans 0 et 1 (faibles) ressemblent à du bruit aléatoire dans une image naturelle.
- 02
Un plan de bits 0 "trop uniforme" (grandes zones noires ou blanches régulières) est un indicateur visuel fort de stéganographie.
- 03
L'outil Stegsolve (Java) permet de visualiser interactivement tous les plans de bits d'une image et de les combiner.
- 04
Technique de décodage manuelle en CTF : si le plan 0 d'un canal montre un motif lisible (texte, QR code), le message est probablement là.
from PIL import Image
import numpy as np
def extract_bit_plane(img_path, channel, bit):
"""Extrait le plan du bit 'bit' du canal 'channel' (0=R, 1=G, 2=B)"""
img = np.array(Image.open(img_path).convert('RGB'))
plane = (img[:, :, channel] >> bit) & 1 # Extraire le bit
plane_img = (plane * 255).astype(np.uint8) # Visualiser en N&B
Image.fromarray(plane_img).save(f'plane_ch{channel}_bit{bit}.png')
# Extraire le LSB du canal rouge
extract_bit_plane('image.png', channel=0, bit=0)
# Boucle sur tous les canaux et plans
for ch in range(3):
for bit in range(8):
extract_bit_plane('image.png', ch, bit)