Kör Geçit

Tek oyun. Altı bölüm. Kodu birlikte açacağız.

EğitimHazırlanıyor

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.

Girdi koşulu

Metin, başına unlock eklenip oyuna olduğu gibi gider. Büyük küçük harf de fark eder. Oyun en çok 88 yazdırılabilir ASCII karakteri kabul ediyor, yani harf, rakam, boşluk ve noktalama. ç, ş, ğ gibi harfler ve telefonun kendiliğinden değiştirdiği tırnaklar girişte reddedilir.

Ders planı

Bu kapı, ikinci bölümün konusu.

Metnin izini sür
Oyunda devam et

Ondan önce

  • Bekçinin günlüğü. Okumak için look yaz.
  • Feneri doldurdun. Duvarlar karanlıktan yeniden çıktı.
Harita işaretleri
  • @ sen
  • c sürüngen
  • W bekçi
  • G mühürlü kapı
  • / açık kapı
  • > merdiven
  • ? günlük
  • ~ pınar
  • & rezonatör
  • ^ tuzak
  • + kapı
  • ! tonik
  • o yağ
  • % erzak
  • ) kılıç
  • ] zırh
  • k anahtar
  • * sikke

Kapının önüne dön, aynı komutlarla yeni bir oyun kurar. Avlu'dan baştan oyna, Windows sürümünün başladığı yerden açar. Tohum 20261021.

Bu 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.

  1. d
  2. s
  3. s
  4. take
  5. d
  6. d
  7. s
  8. s
  9. s
  10. s
  11. s
  12. s
  13. s
  14. s
  15. s
  16. s
  17. a
  18. a
  19. take
  20. w
  21. w
  22. a
  23. a
  24. take
  25. w
  26. w
  27. d
  28. d
  29. d
  30. d
  31. w
  32. w
  33. w
  34. w
  35. w
  36. w
  37. w
  38. d
  39. d
  40. d
  41. d
  42. d
  43. d
  44. d
  45. d
  46. d
  47. d
  48. d
  49. w
  50. w
  51. w
  52. d
  53. d
  54. d
  55. d
  56. d
  57. d
  58. d
  59. take
  60. use 5
  61. a
  62. a
  63. a
  64. look
  65. d
  66. d
  67. d
  68. d
  69. d
  70. d
  71. use 2
  72. d
  73. s
  74. s
  75. s
  76. d
  77. unlock
  78. use 1
  79. d
  80. d
  81. d
  82. d
  83. d
  84. d
  85. d
  86. s
  87. take
  88. use 1
  89. d
  90. d
  91. d
  92. s
  93. s
  94. s
  95. s
  96. s
  97. s
  98. d
  99. d
  100. d
  101. s
  102. s
  103. s
  104. s
  105. descend
  106. d
  107. s
  108. s
  109. take
  110. d
  111. d
  112. s
  113. s
  114. s
  115. s
  116. s
  117. s
  118. s
  119. s
  120. s
  121. s
  122. a
  123. a
  124. take
  125. use 4
  126. w
  127. d
  128. d
  129. d
  130. d
  131. d
  132. d
  133. d
  134. d
  135. d
  136. d
  137. d
  138. d
  139. d
  140. w
  141. w
  142. d
  143. d
  144. d
  145. d
  146. d
  147. d
  148. d
  149. d
  150. d
  151. take
  152. w
  153. a
  154. a
  155. a
  156. a
  157. w
  158. w
  159. w
  160. w
  161. w
  162. use 2
  163. w
  164. d
  165. w
  166. w
  167. w
  168. w
  169. a
  170. a
  171. w
  172. w
  173. a
  174. look
  175. d
  176. s
  177. s
  178. d
  179. d
  180. s
  181. s
  182. s
  183. s
  184. a
  185. s
  186. s
  187. s
  188. s
  189. d
  190. d
  191. d
  192. d
  193. d
  194. s
  195. s
  196. s
  197. d

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

  1. 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.

  2. 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.

  3. 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.

  4. 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ı.

  5. 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.

  6. 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.

Arşiv