LSB steganography

Wani lokaci na rubuta nawa post na farko akan cibiya. Kuma wannan sakon an sadaukar da shi ga matsala mai ban sha'awa, wato steganography. Tabbas, maganin da aka ba da shawara a cikin wannan tsohon batu ba za a iya kiransa steganography a ainihin ma'anar kalmar ba. Wasan ne kawai mai tsarin fayil, amma wasa mai ban sha'awa duk da haka.

A yau za mu yi ƙoƙarin tono ɗan zurfi kuma mu dubi LSB algorithm. Idan kuna sha'awar, ana maraba da ku ƙarƙashin cat. (A ƙarƙashin yanke shine zirga-zirga: kusan megabyte.)

Da farko, wajibi ne a yi ɗan gajeren gabatarwa. Kowa ya san cewa manufar cryptography shine ya sa ya kasa karanta bayanan sirri. Tabbas, cryptography yana da aikace-aikacen sa, amma akwai wata hanyar kariya ta bayanai. Ba dole ba ne mu ɓoye bayanan, amma mu yi kamar ba mu da shi. Wannan shi ne ainihin dalilin da ya sa aka ƙirƙira steganography. Wikipedia ya tabbatar mana da cewa "steganography (daga Girkanci στεγανοσ - boye da kuma Girkanci γραφω - na rubuta, a zahiri "rubutun sirri") shine kimiyyar boye watsa bayanai ta hanyar kiyaye ainihin gaskiyar watsawa.

Tabbas, babu wanda ya hana haɗa hanyoyin cryptographic da steganographic. Bugu da ƙari, a aikace suna yin wannan, amma aikinmu shine fahimtar mahimmanci. Idan kun yi nazarin labarin Wikipedia a hankali, za ku gano cewa steganography algorithms sun haɗa da abin da ake kira. akwati da sako. Kwantena shine duk wani bayani da ke taimakawa ɓoye saƙonmu na sirri.

A cikin yanayinmu, akwati zai zama hoto a tsarin BMP. Da farko, bari mu kalli tsarin wannan fayil ɗin. Ana iya raba fayil ɗin zuwa sassa 4: taken fayil, taken hoto, palette da hoton kanta. Don manufarmu, kawai muna buƙatar sanin abin da aka rubuta a cikin taken.

Bytes biyu na farko na header su ne sa hannun BM, sannan girman fayil ɗin da ke cikin bytes an rubuta shi a cikin kalma biyu, na gaba 4 bytes an adana shi kuma dole ne ya ƙunshi sifili, kuma a ƙarshe, wata kalma biyu ta ƙunshi kashewa daga farkon fayil zuwa ainihin bytes na hoton. A cikin fayil ɗin bmp 24-bit, kowane pixel an lulluɓe shi da bytes BGR guda uku.

Yanzu mun san yadda ake zuwa hoton, abin da ya rage shi ne fahimtar yadda za mu iya rubuta bayanan da muke bukata a can. Don wannan za mu buƙaci hanyar LSB. Ma'anar hanyar ita ce kamar haka: muna maye gurbin mafi ƙarancin raguwa a cikin bytes da ke da alhakin ɓoye launi. Sai muce idan byte na gaba na sakon mu na sirri shine 11001011, kuma bytes a cikin hoton sune ... Za mu raba byte ɗin saƙon sirri zuwa sassa 11101100-biyu-bit: 01001110, 01111100, 0101100111, 4, kuma mu maye gurbin raƙuman raƙuman hoto tare da gutsure da aka samu: ...1111 01001100 01111110 0101100111…. Irin wannan maye gurbin gabaɗaya ba a iya gani a idon ɗan adam. Bugu da ƙari, yawancin na'urorin fitarwa da yawa ba za su iya nuna irin waɗannan ƙananan canje-canje ba.

A bayyane yake cewa zaku iya canza ba kawai 2 mafi ƙanƙanta mahimman ragi ba, amma kowane adadin su. Akwai tsari mai zuwa: yawan raguwar da muke canzawa, ƙarin bayanan da za mu iya ɓoyewa, kuma ƙarin tsangwama wannan zai haifar a cikin ainihin hoton. Misali, ga hotuna guda biyu:

LSB steganography
LSB steganography

Duk da ƙoƙarin da na yi, ban iya ganin bambanci a tsakanin su ba, amma duk da haka, a cikin hoto na biyu, ta hanyar amfani da hanyar da aka kwatanta, an ɓoye waƙar Lewis Carroll "Faruta na Snark". Idan kun karanta wannan zuwa yanzu, to tabbas kuna sha'awar koyo game da aiwatarwa. Abu ne mai sauƙi, amma zan yi muku gargaɗi nan da nan cewa ana yin komai a Delphi. Akwai dalilai guda biyu na wannan: 1. Ina tsammanin Delphi harshe ne mai kyau; 2. Wannan shirin an haife shi ne a cikin shirin shirya kwas a kan tushen hangen nesa na kwamfuta, kuma samarin da nake koyar da su ba su san wani abu ba face Delphi. Ga wadanda ba su da masaniya game da ma'anar kalma, abu ɗaya yana buƙatar bayanin: shl x shine jujjuyawar bitwise zuwa hagu ta x, shr x shine ɗan motsi zuwa dama ta x.

Muna ɗauka cewa muna rubuta rubutun da aka adana a cikin kirtani a cikin akwati kuma mu maye gurbin ƙananan bytes biyu:
Lambar rikodi:

don i: = 1 zuwa tsayi (str) yi
    fara
      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. Matsayi: = f. Matsayi-1;
      tmp: = ((tmp shr 2) shl 2)+l1;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f. Matsayi: = f. Matsayi-1;
      tmp: = ((tmp shr 2) shl 2)+l2;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f. Matsayi: = f. Matsayi-1;
      tmp: = ((tmp shr 2) shl 2)+l3;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f. Matsayi: = f. Matsayi-1;
      tmp: = ((tmp shr 2) shl 2)+l4;
      f.WriteBuffer(tmp,1);
 
    karshen;

code don karanta:

na i:=1 zuwa MsgSize yi
    fara
      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);
    karshen;

To, ga masu kasala da gaske - hanyar haɗi zuwa shirin da lambar tushe.

Спасибо.

source: www.habr.com

Add a comment