OverTheWire Bandit: Seviye 9 → Seviye 10
Bağlam
Elinizde bir .txt dosyası var diye onun her zaman düz metin (plain text) olmasını beklemeyin. Bazen (bu seviyede olduğu gibi) dosya aslında binary (ikili) veri içerir ancak içinde okunabilir metin parçaları gizlenmiştir.
Bu dosyayı cat ile okumaya çalışırsanız garip semboller, emojiler ve anlamsız karakterler görürsünüz. İhtiyacımız olan araç, binary karmaşanın içinden sadece okunabilir karakter dizilerini (strings) çekip alan strings komutudur.
Hedef
Şifre data.txt dosyasının içinde, ancak dosya binary formatında. İpucu olarak şifrenin başında birkaç tane eşittir (=) karakteri olduğu söylenmiş.
Çözüm
Önce dosyanın neye benzediğine bakalım (güvenli bir şekilde):
file data.txt
# data.txt: data
Linux bize bunun sadece “veri” olduğunu söylüyor, yani metin değil.
Şimdi strings komutuyla içindeki okunabilir kısımları çıkaralım ve bize verilen ipucunu (=) kullanarak grep ile filtreleyelim:
strings data.txt | grep "===="
Komutun Analizi:
strings data.txt: Dosyadaki tüm yazılabilir (printable) karakter dizilerini ekrana basar.|: Çıktıyı diğer komuta aktarır.grep "====": İçinde birden fazla “eşittir” işareti geçen satırları süzer.
Çıktı:
========== the*
========== password
========== is
========== G7w8LIi6J3kTb8A7j9LgrywtEUlyyp6s
Ve şifre temiz bir şekilde karşımızda.
Öğrendiklerimiz
stringsKomutu: Genellikle derlenmiş programların (executable) veya binary dosyaların içinde gömülü metinleri (örneğin hata mesajları, değişken isimleri veya bu örnekteki gibi gizli veriler) bulmak için kullanılır. Tersine mühendislik (Reverse Engineering) işlemlerinin en temel adımıdır.