3 poin oleh GN⁺ 2024-05-09 | 1 komentar | Bagikan ke WhatsApp
  • Crash kill screen di NES Tetris ternyata bukan sekadar akhir permainan, melainkan dapat dipakai sebagai titik masuk untuk menjalankan perilaku baru pada perangkat keras dan kartrid yang tidak dimodifikasi
  • Jika perhitungan skor setelah level 155 tidak selesai di antara frame, alur kontrol bisa rusak dan game dapat membaca lokasi RAM yang tidak semestinya sebagai instruksi, yang berujung pada eksekusi kode arbitrer
  • RAM input port controller ekspansi pada Famicom bertumpang tindih dengan lokasi rutin lompatan, sehingga input tombol pada controller 3 dan 4 dapat dipakai untuk mengatur alamat tujuan setelah crash
  • Displaced Gamers merilis kode proof-of-concept yang mengarahkan target lompatan ke tabel skor tertinggi, sehingga data nama dan skor dibaca seperti opcode CPU NES
  • Kegunaannya masih terbatas karena karakter dan angka yang bisa dimasukkan sedikit serta tidak ada media penyimpanan, tetapi ada kemungkinan diperluas menjadi patch penghindar crash atau kontrol penuh atas RAM

Bagaimana crash kill screen berubah menjadi eksekusi kode

  • Crash di NES Tetris dapat terjadi ketika pemroses skor memerlukan waktu terlalu lama untuk menghitung skor baru di antara frame
    • Situasi ini bisa muncul setelah level 155
    • Saat terjadi jeda, sebagian kode kontrol terputus oleh rutin penulisan frame baru
    • Setelah itu, game melompat ke lokasi RAM yang tidak dimaksudkan untuk mencari instruksi berikutnya
  • Biasanya, lompatan tak terduga ini membuat data sampah di bagian awal RAM dibaca seperti kode dan memicu crash lanjutan dengan cepat
  • Video terbaru Displaced Gamers memaparkan prosedur untuk membuat NES Tetris membaca tabel skor tertinggi seperti instruksi bahasa mesin
    • Glitch eksekusi kode arbitrer serupa sebelumnya juga telah dikenal pada Super Mario World, Paper Mario, dan The Legend of Zelda: Ocarina of Time
    • Cara dasar memasukkan kode eksternal ke NES Tetris setidaknya sudah diteorikan secara terbuka sejak 2021, dan metode untuk memperoleh kontrol penuh atas RAM kabarnya juga sudah lama dikenal di dalam komunitas

Mengendalikan posisi lompatan lewat pemrosesan input Famicom

  • Peretasan ini bergantung bukan hanya pada cara Tetris mengalami crash, tetapi juga pada struktur input Famicom
  • Famicom versi Jepang, tidak seperti NES versi Amerika, memiliki dua controller yang terhubung tetap ke unit utama, sementara controller pihak ketiga dapat dihubungkan ke port ekspansi di bagian depan
  • Kode Tetris membaca input dari port controller “tambahan” ini
    • Dengan adapter, dua controller NES standar tambahan juga dapat dihubungkan
    • Famicom memang memiliki versi Tetris terpisah dari Bullet-Proof Software, tetapi karakteristik pemrosesan input ini bekerja pada kode NES Tetris
  • Area RAM yang memproses input controller tambahan bertumpang tindih dengan lokasi memori rutin lompatan yang dipakai saat crash
    • Jika crash memutus rutin lompatan, RAM tersebut berisi data yang mewakili tombol yang ditekan pada controller
    • Pemain dapat memakai nilai ini untuk mengendalikan secara presisi ke mana kode game berpindah setelah crash

Membaca tabel skor tertinggi seperti kode yang dijalankan

  • Metode pengendalian lompatan dari Displaced Gamers memerlukan input controller tertentu
    • Tekan up pada controller 3
    • Tekan right, left, dan down pada controller 4
    • Untuk memasukkan left dan right secara bersamaan diperlukan manipulasi controller
  • Input ini mengirim kode lompatan ke area RAM tempat nama dan skor pada daftar skor tertinggi game disimpan
  • Jika (G ditempatkan pada posisi target di tabel skor tertinggi B-Type, game akan melompat lagi ke area lain dalam tabel skor tertinggi
  • Setelah itu, game membaca nama dan skor secara berurutan lalu memprosesnya seperti opcode CPU NES, dengan cara yang oleh Displaced Gamers disebut kode “bare metal”

Kemungkinan dan batasan yang ditunjukkan proof-of-concept

  • Area input nama skor tertinggi hanya mendukung 43 simbol, dan skor hanya dapat berisi 10 digit angka
    • Karena batasan ini, hanya sebagian opcode yang mungkin di NES yang bisa “ditulis” ke dalam tabel skor tertinggi
  • Bahkan dengan input yang terbatas, kode proof-of-concept singkat tetap dimungkinkan
    • Contoh datanya mencakup nama ))"-P) dan skor peringkat 2 A-Type sebesar 8.575
    • Rutin ini membuat dua digit tertinggi dari skor game menjadi 0
    • Ini mengurangi waktu pemrosesan skor sehingga menurunkan penyebab crash, tetapi jika permainan diteruskan skor tetap akan kembali mencapai “zona bahaya” crash
  • NES Tetris standar tidak memiliki media penyimpanan dengan battery backup, jadi setiap kali dinyalakan pemain harus membuat sendiri skor tertinggi dan nama rumit yang diperlukan
  • Ruang tabel skor tertinggi juga terbatas, sehingga sulit menaruh program kompleks langsung di atas kode Tetris yang sesungguhnya
  • HydrantDude menulis bahwa ada pendekatan membuat bootstrapper dari kombinasi nama dan angka skor tertinggi tertentu, lalu membuat bootstrapper lain untuk memperoleh kontrol penuh atas RAM

Kemungkinan pemrograman ulang di luar sekadar menghindari crash

  • Jika kontrol penuh atas RAM dapat diperoleh, pemain papan atas mungkin bisa menulis ulang game agar menambal bug crash di NES Tetris
  • Pendekatan ini bisa sangat membantu bagi pemain yang ingin melampaui level 255
    • Setelah level 255, game kembali ke Level 0
  • Jika prinsip yang sama dikembangkan lebih jauh, modifikasi seperti mengubah Tetris menjadi Flappy Bird, sebagaimana pernah dilakukan speedrunner Super Mario World, juga mungkin terjadi

1 komentar

 
GN⁺ 2024-05-09
Komentar Hacker News
  • Eksploit seperti ini selalu mengingatkanku pada tahap akhir pamungkas peretasan dalam Accelerando karya Stross: “melakukan serangan timing channel terhadap superstruktur komputasional ruang-waktu itu sendiri, untuk menerobos ke sesuatu yang ada di bawahnya”

    • Aku tidak ingin berada di dalam kerucut cahaya orang yang melakukan percobaan yang punya peluang berhasil sekecil apa pun
      Kedengarannya seperti cara yang sangat bagus untuk memicu peluruhan vakum dan membuat alam semesta mengalami blue screen
    • Buku ini bisa diunduh gratis dari blog penulisnya: https://www.antipope.org/charlie/blog-static/fiction/acceler...
    • Aku baru saja menemukan kesalahan sinkronisasi, jadi mungkin ini kasus tepi yang bagus untuk mulai: https://www.science.org/content/article/quantum-paradox-poin...
    • Sepertinya itu biasanya disebut fisika
    • Ruang-waktu? Kenapa dibatasi hanya pada ruang, meta-waktu jauh lebih menarik
  • Aku sangat suka orang-orang seperti ini
    Aku sampai merasa malu karena tidak punya mentalitas hacker yang mencoba hal-hal yang kemungkinan besar tidak berguna hanya demi kesenangan

    • Apakah kebanyakan hacker seperti itu lahir sambil menggigit trust fund? Orang-orang yang masa depannya terjamin dan hanya punya rasa bosan?
      Kami yang lain terlalu sibuk mencari nafkah sampai tidak punya waktu untuk eksploit seperti ini, tanpa maksud bermain kata
  • Kalau tidak ingin membaca seluruh tulisannya tapi penasaran “bukannya kartrid NES berjalan dari ROM?”, benar
    Namun eksploit ini membuat CPU melompat ke RAM untuk menyimpan tabel skor tertinggi. Benar-benar keren

  • Proses mencapai eksekusi kode arbitrer selalu lebih menarik daripada apa yang dilakukan setelahnya
    Kegigihan membongkar game untuk mengetahui kapan dan di mana perilaku seperti itu terjadi, lalu menemukan bagian mana yang harus dimanipulasi agar bisa memasukkan instruksi, sungguh mengagumkan

  • Berapa lama sampai seseorang menjalankan Doom di dalam Tetris?

    • Mungkin itu butuh kartrid ekspansi RAM
  • Waktu yang terbuang dengan benar

    • Apa yang kamu lakukan untuk bersenang-senang? Apakah itu juga kamu anggap buang-buang waktu?
      Aku bertanya dengan tulus. Dulu aku juga menganggap hal-hal menyenangkan sebagai buang-buang waktu, tetapi setelah membayar harga dari kehidupan penuh stres yang berlangsung lama, semakin tua aku semakin berpikir berbeda
  • Aku ingin mencoba ini dengan Factorio
    Membuat komputer raksasa dari belt di dalam Factorio, lalu membuat segmentation fault agar keluar dari game

  • Menemukan eksekusi kode arbitrer di game lama benar-benar memikat
    Ketika melihat hal seperti ini di Super Mario World beberapa tahun lalu, aku sempat sangat terpaku pada bagaimana itu bisa mungkin
    Ini kumaksudkan dengan baik, sebagai pujian, meski mungkin terdengar agak jahat: aku suka melihat orang-orang yang benar-benar pintar mencurahkan banyak sekali waktu dan upaya untuk sesuatu yang sepenuhnya tidak berguna
    Apakah ada alasan langsung untuk menyuntikkan kode ke NES Tetris? Mungkin tidak. Tapi intinya bukan itu, melainkan mencari tahu apa yang mungkin dilakukan dan seberapa jauh kode lama serta komputer primitif bisa dipaksa bekerja
    Dalam pengertian klasik mungkin tidak “berguna”, tetapi begitu juga sudoku, teka-teki silang, atau bermain NES Tetris sejak awal

    • Tertutup oleh detail teknis, tetapi eksploit ini juga punya tujuan praktis
      Ini memungkinkan pemain tingkat tinggi bermain lebih lama dengan menghindari crash yang mencegah permainan setelah titik tertentu
      Bagi pemain rata-rata tidak praktis, tetapi bagi orang yang ingin bersaing mencetak skor tertinggi, ini mengatasi batasan dan membuka kemungkinan kompetisi baru
    • Banyak penemuan ilmiah terjadi karena orang-orang yang benar-benar pintar menghabiskan waktu dan upaya untuk hal-hal yang sepenuhnya tidak berguna
      Teori bilangan dulu juga dianggap tidak berguna, tetapi sekarang pada dasarnya menopang semua kriptografi kunci publik
    • Itu bukan tidak berguna. Mereka menyukai pekerjaan itu
      Kegunaan yang didapat orang lain dari hal yang kulakukan meski tidak kusukai hanyalah hasil sampingan yang beruntung, atau memberi manfaat tidak langsung kepadaku seperti uang atau pengakuan
      Hal yang dilakukan karena disukai menjadi bentuk kegunaan paling langsung bagi orang yang paling penting, yaitu diri sendiri
    • Kanal YouTube orang ini adalah esensi dari hal semacam itu: https://www.youtube.com/@tom7
  • Sejujurnya aku terkejut Tetris baru berhasil ditembus selambat ini
    Sepertinya ini akan membuka era baru run any%. Tujuannya adalah menjalankan adegan akhir atau credit game secepat mungkin
    Contoh favoritku adalah Ocarina of Time, yang sudah punya eksploit ACE sejak beberapa tahun lalu
    Gamenya benar-benar rusak, sehingga dengan memanipulasi memori game dan mengedit warp masuk tertentu, game bisa “ditamatkan” dalam beberapa menit
    Yang lebih menakjubkan adalah orang-orang mengedit memori dengan tangan, hanya memakai beberapa tombol dan joystick analog
    Contoh memunculkan credit dalam 3 menit: https://www.speedrun.com/oot/runs/z1l1627m

    • Aku juga pernah melihat hal serupa di Super Mario
      Saat menemukan cacat pada terowongan warp, itu memicu pembacaan di luar batas, dan sebelumnya mereka sudah menulis byte tepat di luar buffer lewat manipulasi joystick untuk memicu perilaku yang diinginkan
      Di salah satu game Pokemon, untuk menyiapkan memori dengan tepat, mereka harus melakukan banyak transaksi beli/jual, lalu membuat jumlah item overflow untuk memicu jump
      Benar-benar fantastis. Suatu hari kalau alien menyerang, keisengan seperti ini akan menyelamatkan kita
    • Dari membaca artikelnya saja, kemungkinan itu tampak kecil
      ACE ini sepertinya baru sah setelah mencapai kill screen
      Bayangkan ACE di Ocarina of Time baru aktif setelah credit akhir bergulir; karena hanya terjadi setelah berhasil menyelesaikan run, itu tidak bisa memangkas rekor
    • Katamu sejujurnya terkejut Tetris baru berhasil ditembus selambat ini, tapi aku penasaran sebelumnya apa yang membuatmu berpikir eksekusi arbitrer itu mungkin
  • Aku sangat suka pekerjaan semacam ini
    Ini mengingatkanku pada saat orang memprogram Flappy Bird di dalam Super Mario World dengan memanfaatkan glitch. Benar-benar gila
    https://www.youtube.com/watch?v=hB6eY73sLV0