
Least Significant Bit Steganographie für Bitmap-Bilder (.bmp und .png), WAV-Sounddateien und Byte-Sequenzen. Einfache LSB-Steganalyse (LSB-Extraktion) für Bitmap-Bilder.

Falls Sie mit Techniken der Steganographie nicht vertraut sind, habe ich außerdem einen grundlegenden Überblick über das Fachgebiet in Steganographie: Daten in Daten verstecken (englisch) verfasst.
Dieses Projekt ist auf PyPI verfügbar und kann mit
pip install stego-lsb
installiert werden.
Alternativ können Sie es direkt von diesem Repository installieren:
git clone https://github.com/ragibson/Steganography
cd Steganography
python3 setup.py install
Nach der Installation verwenden Sie den Befehl stegolsb im Terminal oder importieren
Funktionen aus stego_lsb in Ihren Code.
bit_manipulation bietet die Möglichkeit, die Bytes einer Nutzlast schnell in die niederwertigsten Bits einer Träger-Byte-Sequenz einzufügen.
Konkret enthält es vier Hauptfunktionen:
# Interleave the bytes of payload into the num_lsb LSBs of carrier.
lsb_interleave_bytes(carrier, payload, num_lsb, truncate=False)
# Deinterleave num_bits bits from the num_lsb LSBs of carrier.
lsb_deinterleave_bytes(carrier, num_bits, num_lsb)
# Runs lsb_interleave_bytes with a List[uint8] carrier.
lsb_interleave_list(carrier, payload, num_lsb)
# Runs lsb_deinterleave_bytes with a List[uint8] carrier.
lsb_deinterleave_list(carrier, num_bits, num_lsb)
Das Ausführen von bit_manipulation.py, der direkte Aufruf seiner test()-Funktion oder
die Ausführung von stegolsb test sollte eine Ausgabe ähnlich der folgenden erzeugen:
Testing 1.0 MB payload -> 10.0 MB carrier...
Progress: [################################]
----------------------------------------
| # LSBs | Encode Rate | Decode rate |
| 1 | 60.6 MB/s | 95.9 MB/s |
| 2 | 56.6 MB/s | 52.7 MB/s |
| 3 | 82.5 MB/s | 77.4 MB/s |
| 4 | 112.4 MB/s | 105.9 MB/s |
| 5 | 135.9 MB/s | 129.8 MB/s |
| 6 | 159.9 MB/s | 152.4 MB/s |
| 7 | 181.7 MB/s | 174.6 MB/s |
| 8 | 372.8 MB/s | 1121.8 MB/s |
----------------------------------------
WavSteg verwendet die LSB-Steganographie (Least Significant Bit), um eine Datei in den Samples einer .wav-Datei zu verstecken.
Für jedes Sample in der Audiodatei überschreiben wir die niederwertigsten Bits mit den Daten unserer Datei.
WavSteg benötigt Python 3.
Führen Sie WavSteg mit den folgenden Befehlszeilenargumenten aus:
Befehlszeilenargumente:
-h, --hide Um Daten in einer Audiodatei zu verstecken
-r, --recover Um Daten aus einer Audiodatei wiederherzustellen
-i, --input TEXT Pfad zu einer .wav-Datei
-s, --secret TEXT Pfad zu einer Datei, die in der Audiodatei versteckt werden soll
-o, --output TEXT Pfad zu einer Ausgabedatei
-n, --lsb-count INTEGER Anzahl der zu verwendenden LSBs [Standard: 2]
-b, --bytes INTEGER Anzahl der aus der Audiodatei wiederherzustellenden Bytes
--help Zeigt diese Hilfe an und beendet das Programm.
Beispiel:
$ stegolsb wavsteg -h -i sound.wav -s file.txt -o sound_steg.wav -n 1
# ODER
$ stegolsb wavsteg -r -i sound_steg.wav -o output.txt -n 1 -b 1000
Beim Verstecken von Daten werden die Argumente -h, -i, -s, -o und -n verwendet.
Der folgende Befehl würde den Inhalt von file.txt in sound.wav verstecken und das Ergebnis als sound_steg.wav speichern. Der Befehl gibt außerdem aus, wie viele Bytes von einem theoretischen Maximum verwendet wurden.
Beispiel:
$ stegolsb wavsteg -h -i sound.wav -s file.txt -o sound_steg.wav -n 2
Using 2 LSBs, we can hide 6551441 bytes
Files read in 0.01s
5589889 bytes hidden in 0.24s
Output wav written in 0.03s
Wenn Sie versuchen, zu viele Daten zu verstecken, gibt WavSteg die Mindestanzahl von LSBs aus, die zum Verstecken Ihrer Daten erforderlich sind.
Beim Wiederherstellen von Daten werden die Argumente -r, -i, -o, -n und -b verwendet.
Der folgende Befehl würde die versteckten Daten aus sound_steg.wav wiederherstellen und als output.txt speichern. Dabei muss die Größe der versteckten Daten in Bytes genau sein, da das Ergebnis sonst zu kurz sein oder überflüssige Daten enthalten kann.
Beispiel:
$ stegolsb wavsteg -r -i sound_steg.wav -o output.txt -n 2 -b 5589889
Files read in 0.02s
Recovered 5589889 bytes in 0.18s
Written output file in 0.00s
LSBSteg verwendet die LSB-Steganographie, um eine Datei in den Farbinformationen eines RGB-Bildes (.bmp oder .png) zu verstecken.
Für jeden Farbkanal (z. B. R, G und B) in jedem Pixel des Bildes überschreiben wir die niederwertigsten Bits des Farbwerts mit den Daten unserer Datei. Um die Wiederherstellung dieser Daten zu erleichtern, verstecken wir außerdem die Dateigröße unserer Eingabedatei in den ersten Farbkanälen des Bildes.
Sie benötigen Python 3 und Pillow, einen Fork der Python Imaging Library (PIL).
Führen Sie LSBSteg mit den folgenden Befehlszeilenargumenten aus:
Befehlszeilenargumente:
-h, --hide Um Daten in einer Bilddatei zu verstecken
-r, --recover Um Daten aus einer Bilddatei wiederherzustellen
-a, --analyze Gibt an, wie viele Daten in einem Bild versteckt werden können [Standard: False]
-i, --input TEXT Pfad zu einem Bitmap-Bild (.bmp oder .png)
-s, --secret TEXT Pfad zu einer Datei, die im Bild versteckt werden soll
-o, --output TEXT Pfad zu einer Ausgabedatei
-n, --lsb-count INTEGER Anzahl der zu verwendenden LSBs [Standard: 2]
-c, --compression INTEGER RANGE
1 (beste Geschwindigkeit) bis 9 (kleinste Dateigröße) [Standard: 1]
--help Zeigt diese Hilfe an und beendet das Programm.
Beispiel:
$ stegolsb steglsb -a -i input_image.png -s input_file.zip -n 2
# ODER
$ stegolsb steglsb -h -i input_image.png -s input_file.zip -o steg.png -n 2 -c 1
# ODER
$ stegolsb steglsb -r -i steg.png -o output_file.zip -n 2
Bevor Sie Daten in einem Bild verstecken, kann es nützlich sein zu sehen, wie viele Daten versteckt werden können. Der folgende Befehl erreicht dies und erzeugt eine Ausgabe ähnlich der folgenden:
$ stegolsb steglsb -a -i input_image.png -s input_file.zip -n 2
Image resolution: (2000, 1100, 3)
Using 2 LSBs, we can hide: 1650000 B
Size of input file: 1566763 B
File size tag: 3 B
Der folgende Befehl versteckt Daten im Eingabebild und schreibt das Ergebnis in das steganographierte Bild, wobei eine Ausgabe ähnlich der folgenden erzeugt wird:
$ stegolsb steglsb -h -i input_image.png -s input_file.zip -o steg.png -n 2 -c 1
Files read in 0.26s
1566763 bytes hidden in 0.31s
Image overwritten in 0.27s
Der folgende Befehl stellt Daten aus dem steganographierten Bild wieder her und schreibt das Ergebnis in die Ausgabedatei, wobei eine Ausgabe ähnlich der folgenden erzeugt wird:
$ stegolsb steglsb -r -i steg.png -o output_file.zip -n 2
Files read in 0.30s
1566763 bytes recovered in 0.28s
Output file written in 0.00s
StegDetect bietet eine Methode zur Erkennung einfacher Steganographie in Bildern.
Sie benötigen Python 3 und Pillow, einen Fork der Python Imaging Library (PIL).
Führen Sie StegDetect mit den folgenden Befehlszeilenargumenten aus:
Befehlszeilenargumente:
-i, --input TEXT Pfad zu einem Bild
-n, --lsb-count INTEGER Anzahl der anzuzeigenden LSBs [Standard: 2]
--help Zeigt diese Hilfe an und beendet das Programm.
Wir summieren die n niederwertigsten Bits der RGB-Farbkanäle für jedes Pixel und normalisieren das Ergebnis auf den Bereich 0-255. Dieser Wert wird dann auf jeden Farbkanal des Pixels angewendet. Dabei ist n die Anzahl der anzuzeigenden niederwertigsten Bits. Der folgende Befehl speichert das resultierende Bild, wobei "_nLSBs" an den Dateinamen angehängt wird, und erzeugt eine Ausgabe ähnlich der folgenden:
$ stegolsb stegdetect -i input_image.png -n 2
Runtime: 0.63s