ImagIn

ImagIn kodiert beliebige Daten in ein (PNG-) Bild hinein (Steganographie). Jedes Pixel eines Bildes besteht aus drei Bytes. Je eines für die Farben Rot, Grün und Blau. ImagIn überschreibt jeweils einige Bits eines Bytes mit den Daten, die kodiert werden sollen. Der Farbwert ändert sich dabei fast nicht und das Bild ist immer noch sehr gut erkennbar, bzw. nicht ersichtlich, dass eine Datei darin versteckt ist. Besonders Bilder ohne klare Strukturen wie das Waldbild unten sind dafür geeignet, Daten darin zu verstecken. Beim untenstehenden Waldbild sind die Hälfte aller Bits mit Nullen überschrieben worden und es sieht trotzdem noch völlig natürlich aus. ImagIn lässt Sie die komplette Datei auch wieder aus dem Bild extrahieren und abspeichern.

ImagIn ist in Scala geschrieben und war ein selbstständiges Projekt im Rahmen der Vorlesung Multimedia Communications an der ETH Zürich. Report (English)

Screenshot

Im folgenden 561 x 367 Pixel grossen (~500 KB) Bild werden jeweils die letzten 4 Bits (die Hälfte) von jedem Farbwert verwendet, um insgesamt 300 KB Daten zu verstecken.

ImagIn Screenshot

Download

ImagIn downloaden (nur 686 KB)

Source Code

Hilfe und Informationen zu Java

Kodierung


1. Wählen Sie ein Bild aus, in welches Sie eine Datei verstecken wollen oder verwenden Sie das Wald Bild.
2. Wählen Sie die Datei aus, die Sie im Bild verstecken wollen
3. Wählen Sie rechts aus, wie viele Bits für die Kodierung verwendet werden sollen (zwischen 1 und 7).
4. Speichern Sie das kodierte Bild ab als .png-Datei. Niemand vermutet, dass eine Datei im Bild versteckt sein könnte.

Dekodierung


1. Wählen Sie oben den "Decoder" Tab.
2. Wählen Sie das Bild aus, aus welchem Sie eine Datei extrahieren wollen.
3. Speichern Sie die Datei auf Ihre Festplatte.

Verfahren

Ein Pixel besteht aus jeweils einem Byte (8 Bits) pro Farbwert Rot, Grün und Blau. Ein Farbwert ist nichts anderes als eine Zahl, die die Stärke der Farbe festlegt. Mit 8 Bits können gerade die Zahlen von 0 bis 255 (=2^8-1) repräsentiert werden. 0 heisst dabei, dass die Farbe überhaupt nicht im betreffenden Pixel enthalten ist und 255 bedeutet, dass die Farbe voll enthalten ist. Ein roter Pixel hat z.B. die Farbwerte 255/0/0, also volles Rot und kein Grün oder Blau. Ein schwarzer Pixel hat 0/0/0 und ein weisser 255/255/255.

Betrachtet man die Ziffern einer Zahl, bemerkt man, dass nicht alle Ziffern gleich wichtig sin. Verändert man die Ziffer der letzten Zahl, macht z.B. aus 123 die Zahl 124, ist der Unterschied sehr klein. Verändert man aber die erste Zahl, macht z.B. aus 123 die Zahl 232, ist der Unterschied sehr gross, obwohl jeweils genau eine Ziffer um genau einen Wert verändert wurde. Ein Byte ist eine Zahl aus Nullen und Einsen. Die Zahl 123 sieht als Byte so aus: 01111011 ( = 0*128 + 1*64 + 1*32 + 1*16 + 1*8 + 0*4 + 1*2 + 1*1 = 123).

Verändert man nur die letzten Bits eines Bytes, verändert sich die Zahl, die das Byte repräsentiert auch nur unmerklich. ImagIn nützt genau diese Tatsache aus. Beim gezeigten Waldbild kann man locker 5 von 8 Bits mit beliebigen Daten überschreiben, ohne dass es auffällt.