Kör Geçit
Tek oyun. Altı bölüm. Kodu birlikte açacağız.
Kapının önünden başla
- Can
- 22/28
- Işık
- 36
- Tur
- 194
Mühürlü Arşiv. Konumun, sütun 30, satır 17. Mühürlü kapı hemen yanında.
Oyunun son mesajı
Bekçinin günlüğünü okudun. İlk okumada +25 puan.
Bu kapı, ikinci bölümün konusu.
Metnin izini sürBu başlangıç nereden geliyor
Seni Mühürlü Arşiv'in kapısına kadar getirdim. Kapı belirli bir metin bekliyor ve o metin oyunun dosyasında yazılı. Aklına gelen bir şeyi dene ya da önce ipuçlarına bak.
Oyunu Avlu'dan başlattım ve eğitmen rotasının ilk 197 komutunu 20261021 tohumuyla gerçek oyun motorunda çalıştırdım. Bu komutlar seni 194. turda, sütun 30, satır 17 noktasında, kapının hemen yanında bırakıyor. Yolda Avlu'nun kapısı pirinç anahtarla açılıyor ve bu bölgenin günlüğü okunuyor. Mühürlü Arşiv'in kapısına söylenecek metin bu komutların hiçbirinde yok.
Bir test, bu komutların ham rotayla aynı olduğunu ve iki yolun da aynı oyun durumuna vardığını denetliyor. Konum, can, ışık, tur, çanta, günlük ve kapının durumu karşılaştırılıyor. Komutların tamamı aşağıda.
dsstakeddssssssssssaatakewwaatakewwddddwwwwwwwdddddddddddwwwdddddddtakeuse 5aaalookdddddduse 2dsssdunlockuse 1dddddddstakeuse 1dddssssssdddssssdescenddsstakeddssssssssssaatakeuse 4wdddddddddddddwwdddddddddtakewaaaawwwwwuse 2wdwwwwaawwalookdssddssssassssdddddsssd
Tarayıcıdaki oyun
Bu sayfadaki oyun, C kaynağının satır satır JavaScript'e aktarılmış hali. Doğruluğunu Windows sürümüyle karşılaştırarak sınadım. 69 senaryoda iki sürüme de aynı tohumu ve aynı komutları verdim, ekran çıktılarını bayt bayt karşılaştırdım ve hiçbirinde fark çıkmadı. Bu, olası her komut dizisinin denendiği anlamına gelmiyor. Gözcü Salonu'nda hata ayıklayıcı denetimine bağlı komutları senaryolardan bilerek çıkardım, çünkü orada iki sürüm farklı davranıyor.
Windows sürümü Gözcü Salonu'nda işletim sistemine, kendisine bir hata ayıklayıcı bağlı olup olmadığını soruyor. Tarayıcıda bu soru sorulamıyor. C kodu cevap alamadığı platformlarda mührü kapalı tutuyor, tarayıcı sürümü de aynısını yapıyor. Bu yüzden Bellek Labirenti ile Çarklı Kalp burada açılmıyor. Hata ayıklayıcı, Frida ve bellek analizi kursta Windows'taki EXE üzerinde yapılacak. Tarayıcıdaki oyun bunların yerine geçmiyor.
Kapıların cevaplarını bu sayfanın metninde vermiyorum. Ama cevaplar gizli de sayılmaz. EXE'de olduğu gibi, tarayıcıya gönderilen oyun kodunda da bulunabiliyorlar.
Kapının önündeki harita sayfayla birlikte geliyor. Oyunun kodu ancak ilk komutu gönderdiğinde ya da Avlu'dan başlamayı seçtiğinde yükleniyor ve hiçbir yere veri göndermiyor. Bu sayfada oyun mesajları Türkçe gösteriliyor. Motorun özgün İngilizce kayıtları ve komutları değişmiyor.
Kontroller
- Ok tuşları ya da W A S D
- Yürü. Bir düşmanın üstüne yürümek ona saldırır.
- F
- Yanındaki düşmana vur.
- G
- Ayağının altındaki eşyayı al.
- 1 ile 6
- Çantadaki o bölmeyi kullan ya da kuşan.
- I
- Çantayı aç.
- L
- Çevrene bak, yanındaki günlüğü oku.
- J
- Okuduğun günlüğü yeniden aç.
- R
- Erzak ye ya da yanındaki pınardan bir kez yararlan.
- Nokta
- Bir tur bekle.
- Büyüktür işareti
- Merdivenin üstündeyken aşağı in.
- U
- Kapıya söyleyeceğin metnin kutusuna geç.
- Enter
- Komut kutusuna geç. attune gibi her komut buradan da verilebilir.
- Esc
- Klavyeyi oyundan bırakıp sayfaya dön.
Telefonda Haritada dolaş düğmesiyle açılan düğmeleri kullan. Her düğme oyuna aynı komutu gönderir.
Neyi, nasıl göstereceğim
Oyunda dolaşıyor, yaratıklarla dövüşüyor, çantanı dolduruyorsun. İlk kapı yerde bulduğun pirinç anahtarla açılıyor. Sonrakiler anahtar değil, belirli sözcükler istiyor ve o sözcükler oyunun dosyasında bir yerde. Biri düz metin olarak duruyor, biri şifrelenmiş, biri de ancak oyun çalışırken bellekte beliriyor. Her birini nasıl bulduğumu, boşa çıkan denemelerimle birlikte göstereceğim.
Derslerin büyük kısmı gerçek terminal ve analiz kaydı olacak. Yazdığım komutu, dönen çıktıyı, tutmayan tahmini ve onu nasıl düzelttiğimi göreceksin. Bir şeyi anlatmak için çizim ya da animasyon kullanırsam bunu ayrıca belirteceğim.
Altı bölümün planı hazır, ders kayıtları henüz yayımlanmadı. Bu sayfa şimdilik planı ve oynanabilir oyunu gösteriyor.
Altı bölgede altı yöntem
Bölüm 1C, Python, Ghidra
Oyunu kur, dosyayı tanı
Oynadığım oyunla incelediğim dosya gerçekten aynı mı?
İlk bölge olan Avlu oyunun kendisini öğretiyor. Yürümek, dövüşmek, çantayı idare etmek, feneri söndürmeden ilerlemek ve pirinç anahtarı bulmak. Sonra kaynağı derleyip çıkan EXE'nin boyutunu, SHA-256 özetini ve PE başlığını okuyacağım. Özet dosyanın parmak izi gibi, tek bayt değişse bambaşka bir değer çıkıyor. Dosyayı Ghidra'da ilk kez de bu bölümde açacağız.
Bölüm sonunda Kendi bilgisayarında çalışan ve kimliği doğrulanmış bir oyun.
Bu bölümün ilk işi, incelediğim dosyanın gerçekten oynadığım oyun olduğunu doğrulamak. Aşağıdaki satırlar lab kaydındaki Python çıktısından alındı. Boyut, SHA-256 özeti ve PE başlığı dosyanın kimliğini sabitliyor.
File: kor-gecit.exe Bytes: 159744 SHA256: 9d0a988946f4b1f23dc23fbc23ececa16519cb96be0b7ccd49757b53c15e1566 Signature: b'PE\x00\x00' Machine: 0x8664 (AMD64)Kaydedilmiş Python çıktısı, olduğu gibi. Özgün çıktı EXE paketi henüz bu sayfadan indirilemiyor. Hazır olduğunda bağlantısını buraya ekleyeceğim.
Bölüm 2Ghidra, Python
Metin hangi kapıyı açıyor?
Dosyada okunabilir bir cümle bulmak kapıyı açmaya yeter mi?
Mühürlü Arşiv'in kapısı verdiğin sözcükleri dosyadaki sabit bir metinle karşılaştırıyor. Strings çıktısında bir aday görmek kolay, asıl iş o metni kullanan kodu bulmak. Metnin dosyadaki yerini bellekteki adrese çevirip karşılaştırmayı yapan fonksiyona gideceğim. Sonra yanlış adayı, büyük harfle yazılmışını ve tam eşleşeni oyunda tek tek deneyeceğim.
Bölüm sonunda Bulunan metinden kapının koşuluna kadar izlenmiş ve oyunda sınanmış bir yol.
Bölüm 3Python, Ghidra
Gizli baytları çöz
Cevap dosyada düz metin olarak durmuyorsa neyin peşine düşeriz?
Şifre Kuyusu'nun istediği sözcük dosyanın hiçbir yerinde açıkça yazmıyor. Kod, kodlanmış baytları kısa bir anahtarla XOR'luyor. XOR her baytı anahtarın bir baytıyla bit bit karşılaştırıyor ve aynı anahtarla bir kez daha uygulanınca eski değeri geri veriyor. Önce yanlış bir tahminle başlayıp nerede yanıldığımı göstereceğim. Doğru hesabı küçük bir Python betiğiyle yapıp çıkan sözcüğü kapıda deneyeceğiz.
Bölüm sonunda Ne yaptığını satır satır anlatabileceğin küçük bir çözüm betiği.
Bölüm 4x64dbg, Terminal
Aynı kod, farklı sonuç
Hata ayıklayıcı bağlanınca ipucu neden kayboluyor?
Gözcü Salonu'ndaki mekanizma izlendiğini anlarsa konuşmuyor. Oyun, kendi sürecine bir hata ayıklayıcı bağlı mı diye Windows'a soruyor ve cevaba göre başka bir dala gidiyor. x64dbg ile yalnızca kendi oyun sürecimize bağlanıp o dalı bulacağım. Kesme noktası koyup koşulu bir süreliğine değiştireceğim, en sonda da özgün baytları geri yükleyeceğim. Bu sayfadaki tarayıcı sürümünde bu kapının neden açılmadığını da bu bölüm anlatıyor.
Bölüm sonunda Koşulu açıklayan ve yaptığı değişikliği geri alan bir çalışma kaydı.
Bölüm 5Frida, Python
Bellekteki metni bul
İpucu yalnızca oyun çalışırken oluşuyorsa nereden başlarız?
Bellek Labirenti'nin sözcüğü dosyada yok. Rezonatörü çalıştırdığın anda oyun bellekte birbirine bağlı dört nesne oluşturuyor ve sözcük zincirin son halkasında duruyor. Frida ile bir fonksiyona kanca takacağım. Kanca, fonksiyon her çağrıldığında araya girip değerleri okuyan küçük bir kod. Oradan işaretçileri tek tek izleyip bulduğum metni ayrı bir bellek okumasıyla ve sağlama toplamıyla karşılaştıracağım.
Bölüm sonunda İki ayrı yoldan aynı sözcüğe varan bir bellek incelemesi.
Bölüm 6Python, Ghidra
Sanal makinenin komutları
Oyun kendi küçük komut dilini kullanıyorsa ne yaparız?
Son kapıyı Çarklı Kalp'teki minik bir sanal makine denetliyor. Bunu oyunun içine gömülmüş, dört yazmacı ve on komutu olan bir işlemci gibi düşünebilirsin. Önce bayt kodunu okuyup her komutun ne yaptığını çıkaracağım. Makinenin girdiden ileri yönde ne hesapladığını anlamadan çözüme geçmeyeceğim. Model yalnızca bu oyuna ait, genel bir sanal makine anlatısı değil.
Bölüm sonunda Nasıl çalıştığı anlatılmış bir model ve son kapının oyunda açılması.
Başlamadan önce
Temel düzeyde C okuyabiliyor ve komut satırında dolaşabiliyorsan rahat edersin. Kayıtlar Windows x64 üzerinde yapılıyor. Ghidra, x64dbg, Python ve Frida yalnızca bu kurs için yazdığım oyun üzerinde kullanılıyor, başka bir program hedef alınmıyor.
Bu sayfanın durumu
Bu sayfa bir plan duyurusu. Yayın tarihi, ücret ya da sertifika vaat etmiyorum. Bölümler kaydedildikçe bağlantılarını buraya ekleyeceğim. İngilizce sayfa aynı planı anlatıyor, İngilizce seslendirilmiş derslerin hazır olduğu anlamına gelmiyor.
