3 puan yazan GN⁺ 2023-08-12 | 1 yorum | WhatsApp'ta paylaş
  • OFRAK Tetris, blok eşleştirmek yerine komutları yerleştirerek programın yürütme akışını oluşturduğunuz, tarayıcıda ARM komutlarının düştüğü Tetris benzeri bir oyundur
  • Düşen komut gadget’ları döndürüldükten sonra sabitlenir ve sabitlenmiş komutlar arasından yalnızca ekranın en üstündeki çalıştırılır
  • Puan, R12’nin işaret ettiği bellek adresine kaydedilir; R0~R12, LR, PC, SP ve bellek dökümüne bakarak durumu izleyebilirsiniz
  • Süre dolduğunda ya da hatalı bellek erişimi veya yanlış adrese atlama olduğunda Game over olur ve yürütme sona erer
  • Tek adımlı yürütme, müzik açma/kapatma, mantıksal komutlar, sonsuz mod, düşüş aralığı, maksimum gadget boyutu gibi seçeneklerle zorluk ve yürütme biçimi ayarlanabilir

ARM komutlarıyla ilerleyen Tetris

  • OFRAK Tetris, ARM komutlarından oluşan gadget’ların düştüğü Tetris benzeri bir oyundur
  • Kullanıcı, düşen komutları döndürüp solda sabitleyerek yürütme akışını oluşturur
  • Yürütme kuralları

    • Komutlar yukarıdan aşağı düşer
    • Kullanıcı komutları döndürür ve sabitler
    • Sabitlenmiş komutlar arasından yalnızca en üstteki komut çalıştırılır

Ekranda görülen yürütme durumu

  • O anda çalıştırılacak komut ve adres birlikte gösterilir
    • Örnek: add PC, PC, #61
    • Örnek: 00010000, 00010004, 00010008
  • Register ve bellek durumuna bakarak yürütme sonucunu takip edebilirsiniz
    • R0~R12, LR, PC, SP değerleri gösterilir
    • Bellek alanı, onaltılık adresler ve sıfırlarla doldurulmuş değerler biçiminde gösterilir
    • Puan Score: 0 gibi gösterilir

Puan kaydı ve oyunun bitiş koşulları

  • Puan, R12’nin işaret ettiği bellek adresine kaydedilir
  • Aşağıdakilerden biri gerçekleşirse oyun biter
    • Süre dolar
    • Hatalı belleğe erişilir
    • Yanlış adrese atlanır
  • Bitiş ekranında Game over. ve en yüksek puanı girme alanı gösterilir

Kontroller ve ayarlar

  • Temel kontroller; tek adımlı yürütme, gadget sabitleme, register döndürme, müzik oynatma/duraklatma, açıklamaları gösterme/gizlemeyi içerir
  • Gamepad tuş ataması ayarları da sunulur
    • Single Step

    • Toggle Music

    • Lock In

    • Rotate Instructions Up / Down / Left / Right

      • Toggle Game Instructions
      • Oyun ayarlarında yürütme koşulları ve zorluk seviyesi ayarlanabilir
      • Score multiplier
      • Enable Logical Instructions
      • Infinite mode
      • Seconds between drops
      • Maximum gadget size

DEF CON sahasındaki etkinlik

  • DEF CON’daki kullanıcılar, Car Hacking Village’da Tetris’i birlikte oynamak için Red Balloon Security masasını ziyaret edebilir
  • Yeterince yüksek puan alanlara ödül verilecektir

1 yorum

 
GN⁺ 2023-08-12
Hacker News yorumları
  • Assembly ile çalışma deneyimi neredeyse hiç olmayan bir programcı olarak, öğrenmek için harika bir araç.
    Her komutun ne yaptığını görmek için başka bir sekmede bir cheat sheet açık tutuyordum.
    Yalnız ilk segfault yüzünden en yüksek skorun -4,8 milyar görünmesi biraz hayal kırıklığıydı :-P

  • Gerçekten harika! Şimdiye kadar en yüksek skor 65612'ye kadar çıktı.
    Geri bildirim olarak, yardım menüsünü açınca nasıl kapatılacağı net değildi; sanırım yalnızca ? tuşuna tekrar basmak işe yarıyor.
    Goblin müziğini sevdim; komutlarla oynamak için arayüz ve renk ayrımı da güzel.
    Komutların çalıştırma etkisini önceden görebileceğiniz ve oyun bittikten sonra programı değiştirebileceğiniz bir sandbox modu olursa ARM assembly öğrenen biri için epey yararlı olabilir.

    • Sandbox modu fikrini sevdim.
      Bu oyunu yaparken birkaç saat oynayınca ARM assembly okuma hızımın kesinlikle arttığını gördüm.
  • “Skor, R12'nin işaret ettiği adresteki bellekte saklanır” cümlesini görünce gülmeden edemedim.
    Paylaştığın için teşekkürler; DEFCON'ı özledim. Muhtemelen ancak gelecek yıl gidebileceğim.

    • R12 yüzünden neden güldüğünü paylaşabilir misin?
    • Komutların ya da adreslerin ne olduğunu neredeyse hiç bilmeyen biri olarak, “Skor, R12'nin işaret ettiği adresteki bellekte saklanır” ifadesinin neyi işaret ettiğini merak ediyorum.
      Yanıttan önce sayfa açık kaldığı için yenileyene kadar cevabı görememiştim.
  • Şimdiye kadar kullandığım iyi stratejiler iki tane.
    Birincisi, PC'yi mümkün olduğunca çok register'a dağıtıp bu register'ları olabildiğince çok kez toplamak, sonra toplamı 0 adresine ya da skorun bulunduğu konuma yazmak.
    İkincisi, eski PC değerindeki derlenmiş komutu tamsayı olarak bir register'a okumak; genelde negatif göründüğü için çıkarma işlemiyle negatif olmaktan çıkarıp sonra skor konumuna yazmak.
    Başkalarının hangi stratejileri denediğini merak ediyorum.

  • Konsept gerçekten harika, ama benim assembly anlayışım çok düşük :)
    Skorun R12'de saklandığı söyleniyor; R12 0 iken skorun neden 16 olduğunu anlamıyorum.
    https://imgur.com/a/RY5jhTu

    • R12'de skorun adresi bulunuyor.
      Bu durumda adres 0, yani veri segmentinin başlangıcı.
      Skor register'ı sarı renkte; o register'ın işaret ettiği bellek alanı, yani gerçek skor baytları da sarı gösteriliyor.
  • Bilgisayarlara aşinayım ve temel assembly'yi de biraz biliyorum ama vay, bunu hiç anlayamadım.

    • Özellikle merak ettiğin bir şey varsa açıklayabilirim.
      Daha genel olarak, oyunu nasıl daha anlaşılır hâle getirebileceğimize dair düşüncelerini de merak ediyorum.
      Komutları açıklayan bir kılavuzun yardımcı olacağını biliyorum ama başka fikirlere de açığım.
  • Güzel bir brütalist UI/UX.

  • Denemeden önce “About”a tıkladım; yeni bir sayfa açıldı ve şöyle dedi: “Bu siteyi kullanmaya devam ederek çerez kullanımını kabul etmiş olursunuz.”
    GDPR ihlali gibi görünüyor. Çerezleri reddetmek de kabul etmek kadar kolay olmalı.
    Özellikle bu çerezler sitenin çalışması için gerekli de görünmüyor.
    “Hizmet, sunucularımızın web tarayıcınızı tanımasını, ziyaret ve kullanım zamanlarını anlamasını, trendleri analiz etmesini, kullanıcı tabanımız hakkında bilgi edinmesini ve Hizmeti işletip iyileştirmesini sağlamak için çerezler ve piksel etiketleri, web beacon'lar, clear GIF'ler ve JavaScript gibi benzer teknolojiler kullanır … Ayrıca, üçüncü tarafların cihazınıza yerleştirdiği çerezler dâhil olmak üzere üçüncü taraflardan aldığımız bilgilerle topladığımız bilgileri tamamlayabiliriz.”
    https://ofrak.com/privacy/#tracking-tools-and-opt-out
    Sayfanın altlarında, çerezleri tarayıcı ayarlarından silmemizi söylemek kabul edilebilir bir çözüm değil.

    • Ne yazık ki bu uygulamalar birçok web sitesinde var ve pek çok şirket çerez yasasına düzgün uymuyor.
      https://www.cnil.fr/en/refusing-cookies-should-be-easy-accep...
    • Benim tarafta yasa dışı bir şey saklamıyor, yalnızca oyun ayarlarını kaydediyordu; o banner'ın neden çıktığını bilmiyorum.
    • Site ziyaretçilerine tarayıcıda çerezleri devre dışı bırakmalarını söyleme yöntemini aynen apple.com da kullanıyor.
  • Oyunun nasıl build edildiğini merak ediyorum.
    https://ofrak.com/docs/environment-setup.html sayfasına baktım ama Tetris oyununa dair özel bir şey bulamadım.
    Bir şeyi kaçırmış olabilirim.

  • Konsepti gerçekten sevdim.
    Yüksek skor almanın anahtarı PC'ye 0 yazmak gibi görünüyor.
    Çünkü yeni komutun ikili kodu sağda görünen bellek alanına “ekleniyor” ve sonrasında skoru maksimize etmek için R12'yi manipüle edebiliyorsunuz.

    • Bir diğer anahtar da R12'yi 4'e bölünebilir olmayan bir değere çevirmek.
      Çünkü tüm komutlar 4 bayt ve en üst bit her zaman 1.
      Birkaç kez 2 milyar civarına çıktım ama ortalama epey düşük ;)