“Hiç uğraşamam…”
Sınıf Özellikleri ve Yeni Stil Sınıflar başlıklı yazımda “Bir sonraki yazıda __metaclass__ konusuna değineceğim” demiştim, yalan söyledim.
Son zamanlar o kitap senin bu kitap benim okumaktan sıkıldığım için biraz ara verip farklı birşeylerle uğraşmak istedim. Her zamanki gibi bir anlık esintiyle, adı (matryoshka = matruşka) amacına yakışır bu steganografi uygulaması çıktı ortaya. Çocukluğumdan beri saman altından su yürütmeye bayıldığım için bu uygulamayı geliştirirken çok fena eğleneceğim gibi duruyor.
Steganografi’den kısaca bahsetmek gerekirse, iletilmesi istenen mesajın masumca görünen bir içerik ile örtülerek ulaştırılmasıdır. “Bilgiyi saklama sanatı” olarak anılması çok hoşuma gidiyor. M.Ö. 5. yy’da Pers saldırısından önce uyarı mesajının bir kölenin saçları kazıtıldıktan sonra kafasına dövme olarak işlenip saçları uzadığında mesajın istenilen yere dikkat çekmeden ulaştırılmasıyla ilk defa kullanılan steganografi, günümüzde kolbastı adı altında ortaya konulan figürlerle yüzeysel bir bakışta dans ettiği sanılan kişinin aslında çok gıdıklandığı mesajını vermek istemesiyle karşımıza çıkar.
Bilgisayar dünyasında steganografinin kullanımına dönecek olursak, asıl amaç istenilen veriyi başka bir veri ( örtü veri ) altında gizlemek. Ancak bu işlemi yaparken insan algısının fark edemeyeceği boyutta yapmaya dikkat ettiğiniz gibi steganaliz uygulamalarını da hesaba katmanız gerekiyor. Matryoshka, bu örnek sürümünde asıl amacını yerine getirse de veriyi saklarken her karakterin bitlerini sırasıyla piksellerin mavi tonuna ait en düşük anlamlı bitlerini değiştirirek yaptığından dolayı resime bakıp steganografi yapıldığını anlamanız mümkün olmasa da bir hex editörle açıp kağıt kalem üzerinde hesap yaparak saklanan mesajı bulmanız çok kolay. Fakat bu söylediğim gibi “örnek” sürüme özgü bir durum olacak.
24-Bit Windows BMP dosyaları üzerinde bu işlemin nasıl yaptığından kısaca bahsedeyim. 24-Bit Windows BMP dosyalarında ilk 54 byte’lık veri başlık (header) bilgilerini taşıyor. İlk 2 byte 4D42 değerini taşıyor, “BM”, BMP dosya türüne ait imza. Dikkat ettiyseniz tersten sıralanmış. Bunun sebebi işlemci mimarisiymiş, “byte order, litte endian, big endian” anahtar kelimelerini kullanarak amacınıza ulaşabilirsiniz. Bu 54 byte’lık başlık bilgisinin 0x1C. offsetten ( yani ilk 28 byte’ı atlayın ) başlayarak 2 byte’lık veri resmin renk kanalı bilgisini taşıyor, 24-Bit’lik bir BMP dosyasında ‘\x18\x00\’ değeriyle karşılacaksınız. Dediğim gibi işlemci “little endian” sistemi kullandığından dolayı bu değeri hesaplamak istediğinizde 0×0018 şeklinde hesaplayacaksınız. Bunun için de bitsel operatörlerden yararlanmak gerekiyor. Son olarak 0×02. offsetten itibaren 4 byte’lık veri dosya boyutu bilgisini, 0x0A. offsetten itibaren 4 byte’lık bilgi ise pixellere ait 3′er byte’lık verilerin kaçıncı offsetten (0×36, 54) başladığı bilgisini taşıyor. 0×36. offsetten itibaren her piksel için 3′er byte’lık veri bulacaksınız, Kırmızı-Yeşil-Mavi (RGB) tonları için değerler bu şekilde barındırılıyor ancak bu da tahminim ters sıralanmış ( incelemedim bunu ). Sonrasında herhangi bir renk tonunun, en düşük anlamlı bite ( yani son bit, bu tersten değil
) ait değeri saklanacak verinize ait bitlerle değiştirerek saklayabilirsiniz. Bu arada ilk 3 byte’lık değeri değiştirerek sol üst köşedeki pikseli bozduğunuzu sanıyorsanız yanılıyorsunuz, sol alt köşedeki pikseli bozmuş olacaksınız ( herşey tersten, tersten! ).
Matryoshka’ya geçelim artık. Matryoshka’nın ilk etapta algoritması değişecek. Alakalı bitleri birbirinden ayrı olacak şekilde pikselleri belirli bir periyotta bozarak saklamaya çalışacağım. Bunun için aklımda bir kaç yöntem var. Sonrasında edindiğim/ediğineceğim python özellikleri ve tasarım desenleri bilgisini Matryoshka üzerinde uygulayacağım, böylece geliştirilmesi kolay olacak. Ardına tahmin edebileceğiniz bir çok dosya türünün desteklenmesi sağlanacak. Veri sıkıştırma, veri şifreleme, GUI derken üstüne çalışılacak çok nokta var. Dediğim gibi Matryoshka beni gerçekten heyecanlandıran bir proje. Bu yüzden üzerine fazlaca düşeceğim.
iContacts’ı geliştirme sözlerim hepsi yalandı, onu ileride C’de kodlayıp çok farklı bir yapıya kavuşturmak istiyorum, onun hakkında gerçekten çok güzel fikirlerim var.
Sanırım yeter. Matryoshka’ya şöyle bir bakıp geçmek isteyenler için kaynak kodu:
“Ben hackerım, çok da tehlikeliyim saklamam gereken özel bilgilerim var, ben kullanırım bunu, lamer değilim ben!” diyerek bizi güldürecek ya da sadece indirmek isteyenler için tar.gz arşivi:
matryoshka.tar.gz
Tüm bunları Alpcan Aydın okusun da Matryoshka’yı hızlı bir şekilde geliştirelim diye anlattım.
Tags: matruşka, matryoshka, steganografi, steganography
Posted in Python · Temmuz 10th, 2010 · Comments (0)
No comments yet