Öğreticiler #4 | HackFu: 2012: Stenografiye Roman Yaklaşımı

M3m0ry

Kıdemli Üye
3 Haz 2017
4,411
129
4
xD
Herkese meraba. Son günlerde MWR InfoSecurity tarafından organize edilen "HackFu 2012" adlı bir yarışma keşfettim. Yarışmaya kayıt olma süresi biraz uzun sürdü ama ben meydan okuma(challenge) dosyalarıyla ilgileniyordum. Güvenlik sertifikasına kaydolduğumdan beri ayıracak pek zamanım yok. Yakında işe başlıyacağım ama ben ilk stenografi hakkında bir write-up(makale) yazmak istiyorum.

HackFu'da hak kazanmak için, ZIP içerisindeki numaralandırılmış meydan okumaları tamamlamanız gerekir ama onlara erişim sağlıyabilmeniz birkaç zeka oyunu oynamanız gerekir. Bu ZIP dosyası aşşağıda belirttiğim PDF dosyasındaki gibi şifrelenmiştir.

Bu yazdığım write-up'un(makalenin) amacı "crypto.zip" şifreleme versiyonuyla şifrelenen benim oluşturmuş olduğum ve bana ait olan "crypto.txt" ile oynayabilecek olmanız. Bu sayede HackFu'nun meydan okuma(challange) dosyalarıyla uğraşmanıza gerek kalmaz. Ayrıca dosyaları şifreleyen ve şifrelerini kırabilen stenografi algoritması tabanlı "GlueGun.py" adında yaptığım ufak bir programı da içine koydum.

MWR HackFu 2012: TIKLA
Stenografi PDF: TIKLA
crypto.txt + crypto.zip: TIKLA
GlueGun.py: TIKLA

(1) Genel Bakış

Şimdi hızlıca küçük bir stenografi şifrelemesini kıracağız. Bir dosyayı (dosya türü farketmez) Binary bitlerine çeviriyoruz ve daha sonra bu bitlerin dizilerini belirli kurallara göre büyük harflere dönüştürülür. PDF size kolaylık olsun diye farklı dönüştürme düzenleri tanımlar. Daha önce HackFu meydan okumalarında kullanılmış bir planın ekran görüntüsünü bıraktım;

Steno_big01.png


Oluşturduğum basit "crypto.txt" dosyasına hızlıca bir göz atalım

Kod:
root@bt:~/Desktop# cat crypto.txt

APQSFDKMUSCMOCEGDCLKGCQQDQOCSCCSGGSOOSOQZNPTBIOKVPTZASGCNKTOPNUXXMMKEJCWUQNQQSQQQCQCUOODUQNCCDUCOGCGCUSGDU
JLSOSGGHNSCGCQRDONEZOLANTHFVQCENEUHIZVOYXLAXRUHZTOPXPSAHRBERBSSOYRUDQGDQOXVUZMTSIIVYYIAOXWVDMVKOIJMJYLEQNV
AVERANLDCSTWGSGQGGQPUDROUOOOUOUQCQCGSOSSUOFGOCODUCUDOCSSUDGDPUKFBMACDIQSPMPXHYNWPZUTELIVBMGVDTQOSXKXDJLACY
IHFEGSEOKMOQDFDSSLOPVTCQSNSQTLODOCOSQDUCSQDGQCUCUDVMHYPJGLVEJMBUUOMYKQRMONMMZIRIGVQGNQUQQSGSQQDDSSCOMCDGQD
UODGCCUCQQTKCUOOGBTUQQDGDSUUOSSCUSSSDODCQOUEUSDDOGQSGQDGJTFGTUCRUDSOGUGSDODQQODQPQGZAZQJEVTEHZUGPMHUAIVVCK
WLBMADRZLGRVRQARAPABAUCQAHDOUUQDQNNOWXLQITWTTTEOXMHXPFAZYCOQKXOCDGCUGPODRQDUCUOUSGSSSCUOCDQOBOGUUOOQUSGGDO
COUGPBOUHQIVGOBAQGETDCDQUCUOCOOODCCSUUQEGDUCQDDEQCQDHBCQCSCDCGCGDCCOEHSUCUOSSUQQDQCQUDSQGQGO

Ekran görüntüsünde görülen önerilen dönüşüm planına göre ASCII'leri binary bitlerine çevirebilirsiniz. Örneğin A=01, P=01, Q=00 falan filan.. Bunu yaparsanız dosya boyutu 2 katına çıkacaktır aşşağıda da görebildiğiniz gibi.

Kod:
root@bt:~/Desktop# cat BinBits.txt

0101000001001011000000110000010000001010000000000000000000000000000000000000000011110110011000101101101101
0000001110100001110011111111100110001100001100000000000000000000000000000011000000000000000000000000000000
1010000000000001110000000000010000110111001001111001011100000111010001101111001011100111010001111000011101
0001010101010101000000100100000000000000111100111110001010111010100100111111001111100010101110101001001111
0111010101111000000010110000000000000001000001000000000000000000000000000000000000000100000000000000000000
0000000000000001001001011101000010000001110111011011110111001001101011011100110010000000111011001010010010
1001010100000100101100000001000000100001111000000011000010100000000000000000000000000000000000000000111101
1001100010110110110100000011101000011100111111111001100011000011000000000000000000000000000000110000000000
0000000000000000000010100000000000011000000000000000000000000000000000000000000000000001000000000000000000
0000001010010010000001000000000000000000000000000000000100001101110010011110010111000001110100011011110010
1110011101000111100001110100010101010101010000000101000000000000001111001111100010101110101001001111011101
0101111000000010110000000000000001000001000000000000000000000000000000000000000100000000000000000000000000
0000000001010000010010110000010100000110000000000000000000000000000000000000000100000000000000010000000001
010000000000000000000000000000010100000000000000000000000000000000000000000000

Şimdiye kadar herşey düzgündü. Şimdi bu binary bitlerini raw binarysine çevirmenin yolunu bulmamız gerek. Bunun en iyi yol olduğundan emin değilim. Fakat bu bitleri ilk önce aşşağıda da gördüğünüz gibi hex'e çevirdim. Dosya boyutunun ciddi şekilde azaldığını farkettik.

Kod:
root@bt:~/Desktop# cat HexBits.txt

504b03040a0000000000f662db40e873fe630c0000000c0000000a001c0043727970746f2e7478745554090003cf8aea4fcf8aea4f
75780b000104000000000400000000497420776f726b73203b2929504b01021e030a0000000000f662db40e873fe630c0000000c00
00000a0018000000000001000000a4810000000043727970746f2e7478745554050003cf8aea4f75780b0001040000000004000000
00504b0506000000000100010050000000500000000000

En sonda, hex'i raw binarysine çevirdim ve "crpto.txt"nin adını "crypto.zip" olarak değiştirdim ve sihir gibi ! orjinal dosya bozulmamış görünüyor. Benim zipim sadece dizi içeren bir text dosyası içeriyor. Çalıştı :))

Steno_big02.png


(1) GlueGun

Belkide başlamadan önce GlueGun adını neden seçtiğimi açıklamalıyım. Bu ismi seçtim çünkü küçük prototipler yaptım ve kodlar yapmışmış gibiydi. Fakat bunu okuyucuların kendi kararına bırakıyorum.

Bu meydan okumayı ilk yaptığımda acele ettim ve çeşitli kod parçacıkları kullandım. Online şifre çözücü buldum. Fakat meydan okumada eğlendim ve şifre kırma için neden kendim kod yazmayayım ki diye düşündüm ve hatta dosyaları bile şifreliyecek.

Daha fazla detay için kaynak kısmını kontrol edebilirsiniz. Şifre kırmanın kolay olduğundan bahsedeceğim. Büyük harfli ASCII'leri ilgili bitlerle değiştirmek için çift anahtar sözlüğünü kullandım ve daha sonra diğer dönüşümleri yapmak için çeşitli python fonksiyonları kullandım. Şifreyi kırma birazcık daha aldatıcıydı. Ana dezavantajımız şifresini kıracağımız dosya büyüktü ve büyük miktarda zaman alacaktı. Yavaş olmasının nedeni binary bitlerinin bir kerede 2 bayt olarak okunması ve rastgele karakter gruplarına dönüştürülmüş olması.

Bu program ham bir prototiptir ve çok geliştirebilirmiyim (belki kuyruktaki işçilere atanmış şifrelemeyle) ama şifrelenmiş dosyaların şifrelerini kırma çalışması için yeterlidir. Herhangi birisinin bir önerisi varsa yorum olarak bırakabilir.

Kod:
root@bt:~/Desktop# ./GlueGun.py

--------------------------------------------------------------------
|                        GlueGun v1.0 ~ b33f                       |
|              -HackFu 2012 Stenograpy Encoder/Decoder-            |
--------------------------------------------------------------------
Usage: GlueGun.py -t (e/d) -i (input file) -o (output file)

GlueGun.py: error: Invalid input, check -h/--help for an extended usage menu...

root@bt:~/Desktop# ./GlueGun.py --help

Usage: GlueGun.py -t (e/d) -i (input file) -o (output file)

Options:
  -h, --help            show this help message and exit
  -t TYPE, --type=TYPE  Encode or Decode (e/d)
  -i IF, --in=IF        Set input file (eg: crypt.txt, output.zip,...)
  -o OF, --out=OF       Set output file (eg: crypt.txt, output.zip,...)
  
root@bt:~/Desktop# ./GlueGun.py -t d -i crypto.txt -o crypto.zip

Son komut yukarıda gösterilmiş bütün adımları çoğaltmalıdır ve bozulmamış bir zip dosyayı üretmelidir. Sizdee şifreleme yapabilirsiniz ve "crypto.zip"i tekrar şifreleyerek bunu test edebilirsiniz. Yeni text dosyası farklı olmalıdır ama aynı şifreleme kurallarına sahip olmalıdır. Aşşağıda "crypto.zip"'in bir yeniden şifreleme örneğini görebilirsiniz.

Kod:
root@bt:~/Desktop# ./GlueGun.py -t e -i crypto.zip -o new.txt

Steno_big03.png


Source: https://www.fuzzysecurity.com/tutorials/9.html
Translator: M3m0ry
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.