LSB Steganographie

Eemol geschriwwen ech meng éischte Post op Hub. An dee Post war e ganz interessante Problem gewidmet, nämlech Steganographie. Natierlech kann d'Léisung, déi an deem alen Thema proposéiert gëtt, net Steganographie am richtege Sënn vum Wuert genannt ginn. Et ass just e Spill mat Dateiformater, awer e zimlech interessant Spill trotzdem.

Haut wäerte mir probéieren e bësse méi déif ze gräifen an den LSB Algorithmus ze kucken. Wann Dir interesséiert sidd, sidd Dir wëllkomm ënner cat. (Ënnert dem Schnëtt ass de Traffic: ongeféier ee Megabyte.)

Als éischt ass et néideg eng kuerz Aféierung ze maachen. Jidderee weess datt den Zweck vun der Kryptografie ass et onméiglech ze maachen geheim Informatioun ze liesen. Natierlech huet d'Kryptographie seng Uwendungen, awer et gëtt eng aner Approche zum Dateschutz. Mir mussen d'Informatioun net verschlësselen, awer maache wéi wann mir se net hunn. Dëst ass genau firwat d'Steganographie erfonnt gouf. Wikipedia verséchert eis datt "Steganographie (vum griichesche στεγανοσ - verstoppt an dem griichesche γραφω - ech schreiwen, wuertwiertlech "geheime Schreiwen") d'Wëssenschaft vun der verstoppter Iwwerdroung vun Informatioun ass andeems se de Fakt vun der Iwwerdroung geheim halen.

Natierlech verbitt keen d'Kombinatioun vun kryptografeschen a steganographesche Methoden. Ausserdeem, an der Praxis maachen se dat, awer eis Aufgab ass d'Grondlage ze verstoen. Wann Dir de Wikipedia Artikel suergfälteg studéiert, fannt Dir eraus datt Steganographie Algorithmen déi sougenannt enthalen. Container a Message. E Container ass all Informatioun déi hëlleft eise geheime Message ze verstoppen.

An eisem Fall wäert de Container e Bild am BMP Format sinn. Als éischt kucke mer d'Struktur vun dëser Datei. De Fichier kann a 4 Deeler opgedeelt ginn: Dateiheader, Bildheader, Palette an d'Bild selwer. Fir eis Zwecker brauche mir nëmmen ze wëssen wat am Header geschriwwen ass.

Déi éischt zwee Bytes vum Header sinn d'BM Ënnerschrëft, dann ass d'Dateigréisst a Bytes an engem Duebelwort geschriwwe ginn, déi nächst 4 Bytes sinn reservéiert a mussen Nullen enthalen, a schliisslech enthält en anert Duebelwort den Offset vum Ufank vum Datei op déi aktuell Bytes vum Bild. An enger 24-Bit Bmp Datei gëtt all Pixel mat dräi BGR Bytes encoded.

Elo wësse mer wéi mir op d'Bild kommen, alles wat bleift ass ze verstoen wéi mir d'Informatioun schreiwen déi mir do brauchen. Dofir brauche mir d'LSB-Methode. D'Essenz vun der Method ass wéi follegt: mir ersetzen déi mannst bedeitend Bits an de Bytes verantwortlech fir Faarfkodéierung. Loosst eis soen, wann de nächste Byte vun eisem geheime Message 11001011 ass, an d'Bytes am Bild sinn ... 11101100 01001110 01111100 0101100111 ..., da wäert d'Kodéierung esou ausgesinn. Mir wäerten de geheime Message Byte an 4 zwee-Bit Deeler opzedeelen: 11, 00, 10, 11, an ersetzen déi niddereg Uerdnung Bits vum Bild mat der resultéierend Fragmenter: ...11101111 01001100 01111110 0101100111…. Esou en Ersatz ass allgemeng net fir de mënschlechen Ae bemierkbar. Ausserdeem kënne vill eeler Ausgangsapparater net emol sou kleng Ännerungen weisen.

Et ass kloer datt Dir net nëmmen déi 2 am mannsten bedeitendste Stécker änneren kënnt, awer all Zuel vun hinnen. Et gëtt de folgende Muster: Wat méi Bits mir änneren, wat méi Informatioun kënne mir verstoppen, an wat méi Interferenz dëst am Originalbild verursaacht. Zum Beispill, hei sinn zwee Biller:

LSB Steganographie
LSB Steganographie

Trotz menge beschten Efforten konnt ech den Ënnerscheed tëscht hinnen net gesinn, awer trotzdem, am zweete Bild, mat der beschriwwener Method, ass dem Lewis Carroll säi Gedicht "The Hunting of the Snark" verstoppt. Wann Dir esou wäit gelies hutt, da sidd Dir wahrscheinlech interesséiert iwwer d'Ëmsetzung ze léieren. Et ass ganz einfach, awer ech warnen Iech direkt datt alles zu Delphi gemaach gëtt. Et ginn zwee Grënn dofir: 1. Ech mengen Delphi ass eng gutt Sprooch; 2. Dëse Programm gouf gebuer am Prozess vun der Preparatioun vun engem Cours iwwer d'Grondlage vun der Computervisioun, an déi Leit, déi ech dëse Cours léieren, wëssen nach näischt anescht wéi Delphi. Fir déi, déi net mat der Syntax vertraut sinn, muss eng Saach erklärt ginn: shl x ass eng bitweis Verréckelung no lénks duerch x, shr x ass eng bitwise Verréckelung no riets duerch x.

Mir huelen un datt mir Text schreiwen, deen an enger String an de Container gespäichert ass an déi ënnescht zwee Bytes ersetzen:
Recording Code:

fir i:=1 bis Längt (str) do
    fänken un
      l1:=byte(str[i]) shr 6;
      l2:=byte(str[i]) shl 2; l2:=l2 shr 6;
      l3:=byte(str[i]) shl 4; l3:=l3 shr 6;
      l4:=byte(str[i]) shl 6; l4:=l4 shr 6;
 
      f.ReadBuffer(tmp,1);
      f.Positioun:=f.Positioun-1;
      tmp:=((tmp shr 2) shl 2)+l1;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Positioun:=f.Positioun-1;
      tmp:=((tmp shr 2) shl 2)+l2;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Positioun:=f.Positioun-1;
      tmp:=((tmp shr 2) shl 2)+l3;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Positioun:=f.Positioun-1;
      tmp:=((tmp shr 2) shl 2)+l4;
      f.WriteBuffer(tmp,1);
 
    Enn;

Code fir ze liesen:

fir ech:=1 zu MsgSize maachen
    fänken un
      f.ReadBuffer(tmp,1);
      l1:=tmp shl 6;
      f.ReadBuffer(tmp,1);
      l2:=tmp shl 6; l2:=l2 shr 2;
      f.ReadBuffer(tmp,1);
      l3:=tmp shl 6; l3:=l3 shr 4;
      f.ReadBuffer(tmp,1);
      l4:=tmp shl 6; l4:=l4 shr 6;
      str:=str+char(l1+l2+l3+l4);
    Enn;

Gutt, fir déi wierklech faul - Link op de Programm a säi Quellcode.

Spass.

Source: will.com

Setzt e Commentaire