2 poin oleh GN⁺ 2024-11-08 | 1 komentar | Bagikan ke WhatsApp
  • Ecco the Dolphin: Defender of the Future untuk Dreamcast ternyata menyimpan cheat tersembunyi yang aktif lewat input inisial pada file save, dan selain GYUGYU+XXX yang sudah dikenal, beberapa input khusus lain juga telah teridentifikasi
  • Analisis dilakukan dengan memuat snapshot memori flycast ke Ghidra untuk menemukan buffer input dan fungsi pemrosesnya, lalu menelusuri struktur yang membandingkan hasil transformasi dengan 6 nilai khusus
  • Penentuan cheat tidak dilakukan berdasarkan string input itu sendiri, melainkan berdasarkan kunci yang didekripsi dengan passphrase dan nilai yang melewati perhitungan checksum, sehingga sulit ditemukan hanya dengan membaca string secara langsung
  • Dengan brute force Python, input 1~8 karakter diperiksa dan dikonfirmasi bahwa SOCCER, EXBBERX, QQRIQ, XYZZYX, POPELY dan lainnya terhubung dengan stage bonus, mode abadi, tampilan FPS, dan tampilan waktu
  • Input yang menghasilkan efek yang sama tidak terpaku pada satu bentuk; NNSET, SOCCER, ADEMVSSF semuanya membuka game sepak bola bonus, dan AFTJSXOT juga membuka semua stage seperti GYUGYU

Cheat tersembunyi yang aktif lewat nama file save

  • Ecco the Dolphin: Defender of the Future adalah game Ecco terakhir yang dirilis secara resmi, dan sekuelnya kemudian dibatalkan
  • Cheat yang sebelumnya dikenal menggunakan cara memilih New Game di layar VMU, memasukkan GYU sebagai inisial, lalu tanpa menekan End memasukkan lagi GYU dan tiga huruf acak
    • Setelah memasukkan dalam bentuk GYU GYU XXX lalu keluar dari menu, semua stage bisa dipilih di Load game
  • Input khusus yang terkonfirmasi beserta efeknya adalah sebagai berikut
    • GYUGYU+XXX: membuka semua level
    • SOCCER+XXX: membuka stage bonus
    • EXBBERX+XXX: mode abadi
    • QQRIQ+XXX: tampilan FPS
    • XYZZYX+XXX: tampilan waktu
    • POPELY+XXX: efek tidak diketahui

Melacak rutinitas pemrosesan input dengan Ghidra

  • Dari snapshot memori emulator flycast, dipastikan bahwa sebagian inisial yang terlihat di layar disimpan di buffer 8cfffb34
  • Saat input diteruskan, karakter yang dimasukkan lebih dulu terdorong ke buffer 8c3abf18, dan area inilah yang dipakai untuk penentuan cheat
  • Setelah snapshot dimuat ke Ghidra, ditemukan bahwa fungsi di alamat 8c0334d8 membaca buffer tersebut
  • Fungsi ini mentransformasikan buffer, lalu memeriksa apakah hasilnya cocok dengan salah satu dari 6 daftar nilai khusus
    • GYU GYU XXX ditransformasikan menjadi 9388D627 dan cocok dengan nilai khusus pertama dalam daftar

Mekanisme transformasi dan struktur checksum

  • Alur fungsi transformasi yang dikonfirmasi lewat dekompilasi Ghidra adalah sebagai berikut
    • Membaca passphrase
    • Mendekripsi kunci 1024 byte dengan passphrase
    • Menghitung checksum buffer input menggunakan kunci tersebut
    • Mengenkripsi kembali kunci itu
  • Karena checksum adalah fungsi satu arah, input yang menghasilkan nilai khusus sulit dibalik secara langsung hanya dengan melihatnya
  • Dalam pembaruan berikutnya, metalliczx dan SideQuark mengonfirmasi bahwa setelah dekripsi, strukturnya merupakan polinomial checksum CRC32 standar
    • Karena itu, ada cara yang lebih efisien untuk mendapatkan nilai target dibanding brute force

Nilai input yang ditemukan lewat brute force Python

  • GYUGYU terdiri dari 6 huruf, dan kombinasi 6 huruf yang mungkin berjumlah 26^6 = 308,915,776
  • Untuk 7 huruf jumlahnya naik menjadi 8 miliar kombinasi, dan 8 huruf mencapai 208 miliar kombinasi, skala yang cukup berat untuk laptop
  • Implementasi Python memeriksa input dengan prosedur berikut
    • Menyalin blok memori yang berisi buffer input yang belum diinisialisasi, passphrase, dan kunci
    • Mendekripsi kunci dengan passphrase
    • Memasukkan urutan 1~8 huruf ke buffer input
    • Menghitung checksum dari tiap input
    • Membandingkan hasil perhitungan dengan nilai target
  • Seluruh kode dipublikasikan di gist
  • Bahkan versi single-thread saja sudah menghasilkan output yang dibutuhkan, dan hasilnya muncul sebelum versi paralel selesai ditulis

Pemetaan yang ditemukan dan efek nyatanya

  • Kolom terakhir pada hasil output menunjukkan kecocokan dengan nilai khusus tertentu
    • NNSET, SOCCER, ADEMVSSF semuanya cocok dengan nilai yang sama dan membuka game sepak bola bonus
    • AFTJSXOT membuka semua stage seperti GYUGYU
  • Jika SOCCER+XXX dimasukkan sebagai inisial, Bonus Game akan terbuka dan pemain bisa memainkan sepak bola bawah air
    • Ini mengatur bit 0x2 pada flag di 8c3ac00c
  • EXBBERX+XXX menampilkan Immortality Enabled pada layar Options
    • Saat aktif, pemain tidak akan tenggelam atau mati
    • Ini mengatur bit 0x400 pada flag 8c3abe48 dan bit 0x4 pada flag 8c3abb00
  • QQRIQ+XXX menampilkan framerate game dan beberapa nilai debugging
  • XYZZYX+XXX menampilkan nilai jam saat ini
    • Kedua input tersebut mengubah nilai di alamat 8c35659c dan 8c3565a4
  • Efek POPELY+XXX belum berhasil dipastikan
    • Diduga dimaksudkan untuk mengaktifkan flag di 8c3b0e44, tetapi flag ini tampaknya hanya menampilkan pesan Cheats Enabled tanpa efek lain yang terlihat

1 komentar

 
GN⁺ 2024-11-08
Komentar Hacker News
  • Hash-nya hanyalah CRC32, tepatnya memakai polinomial ini (0x77073096, kodenya salah)

    https://web.mit.edu/freebsd/head/sys/libkern/crc32.c

    Integer yang didekripsi dalam tulisan itu adalah konstanta dari CRC32 ini. Jika tahu bahwa itu CRC32 dan mengetahui polinomialnya, jawabannya bisa dihitung mundur dalam waktu logaritmik, bukan waktu eksponensial, dengan memakai matematika modular pada ring polinomial

    • Katanya Binwalk mengenali tabel polinomial CRC; saya penasaran apakah tabel ini juga bisa ditemukan

      Seseorang perlu mengintegrasikan Binwalk dan Ghidra. Keduanya sangat cocok

    • Saya penasaran apakah ada tips untuk mengetahui bahwa nilainya adalah hasil CRC32, atau polinomial/nilai awal yang digunakan

  • Saat Ecco orisinal keluar untuk Megadrive (Genesis), saya membelinya dengan seluruh uang yang susah payah saya kumpulkan. Gim itu luar biasa sulit, dan karena kesal saya duduk sepanjang sore dengan pena dan kertas, lalu entah bagaimana berhasil memecahkan sistem password-nya

    Saya teleport ke level terakhir dan menyelesaikannya keesokan harinya, tetapi kemudian merasa bersalah karena menghabiskan seluruh harta saya untuk gim yang selesai dalam dua hari

    • Memecahkan sistem password dengan pena dan kertas itu menarik; kalau masih ingat sesuatu, saya ingin dengar lebih banyak

    • Secara filosofis, saya rasa itu tidak bisa disebut menamatkan gim tersebut

      Anda melewati banyak level, dan hanya melihat sebagian dari konten, gameplay, serta cerita yang dimaksudkan. Gim, termasuk Ecco the Dolphin, pada umumnya lebih tentang perjalanan daripada tujuan. Anda melewatkan tema dan pengalaman seperti isolasi, berteman dengan kelompok luar, konservasi, perjalanan waktu, berinteraksi dengan dinosaurus, dan tentu saja perjalanan luar angkasa

      Jadi sebenarnya tidak perlu merasa begitu bersalah

    • Meski begitu, level terakhir memang hebat. Saya penasaran apakah Anda terkejut saat melihatnya setelah melewati sebagian besar gim

    • Dengan cheat atau tidak, Anda mungkin satu-satunya orang di dunia yang pernah menamatkan gim ini

  • QQRIQ adalah bentuk singkatan fonetik dari “kukuriku”, dan dalam bahasa Hungaria serta beberapa bahasa lain berarti suara kokok ayam jantan. Contohnya ada “kukuryku” dalam bahasa Polandia dan “קוקוריקו” dalam bahasa Ibrani

    Saya jadi penasaran seperti apa proses memilih password-nya

    • Gyugyu juga bisa jadi rujukan ke film Hungaria “The Fifth Seal”

      “Bayangkan Anda akan mati dan bereinkarnasi sebagai salah satu dari dua orang. Seorang budak dan seorang tuan kaya. Budak itu disiksa oleh tuannya, kehilangan lidah dan satu matanya, serta istri dan anaknya juga dibunuh. Ia terus hidup sambil percaya bahwa dirinya orang baik, karena ia tidak pernah melakukan hal-hal mengerikan dan sadistis kepada orang lain seperti tuannya. Tuan kaya itu sama sekali tidak memiliki keraguan moral. Ia tidak menganggap perbuatannya salah, dan percaya bahwa budak itu memang pantas dihukum. Anda harus memilih apakah menjadi budak miskin tetapi benar, atau tuan kaya tetapi bejat.”

      Gyugyu adalah nama budak itu

      https://www.imdb.com/title/tt0075467

    • Karena programmer gim ini berada di Budapest, itu dugaan yang cukup masuk akal

    • Popely yang mengandung “ly” dalam bahasa Hungaria juga merupakan petunjuk

    • Dalam bahasa Prancis, bentuknya Cocorico, jadi sangat mirip

    • Saya juga teringat desa Kakariko di Zelda, yang selalu ada ayamnya

  • Sebagai tambahan menarik, pengembang Ecco, Ed Annunziata, saat ditanya tentang inspirasinya menjawab, “Saya tidak pernah memakai LSD, tetapi saya banyak membaca John C. Lilly.” Lilly dikenal atas karya perintisnya di bidang kecerdasan hewan, psikoterapi ketamin, tangki deprivasi sensorik, dan eksplorasi kesadaran

    Nama “Ecco” adalah rujukan ke ECCO (Earth Coincidence Control Office) milik Lilly. John berhipotesis bahwa ada basis supranatural/alien di sisi jauh bulan untuk mengoordinasikan semua “kebetulan” di Bumi. Ia adalah salah satu orang pertama yang menyadari betapa cerdasnya lumba-lumba, dan begitu terobsesi mencari cara berkomunikasi dengan mereka sampai ia menenggelamkan separuh rumahnya di Karibia agar bisa tinggal bersama mereka. Itu baru puncak gunung es; kalau tertarik, saya sangat merekomendasikan autobiografinya, The Center of the Cyclone. Ia benar-benar sosok yang memesona

  • Saya penasaran apakah ada materi untuk mulai melakukan reverse engineering gim Dreamcast. Ada beberapa hal yang ingin saya coba dengan Skies of Arcadia, dan akan bagus kalau ada teknik yang lebih sistematis daripada “melihat nilai apa yang berubah di antara snapshot memori”

    • Untuk menemukan lokasi nilai di RAM, cara itu pada dasarnya cukup mendekati teknik standar. Dalam praktiknya cukup berhasil

      Beberapa emulator seperti Dolphin memiliki alat semacam itu bawaan. Alat hacking gim lama seperti Gameshark untuk N64 juga memakai teknik yang sama lewat UI konsol. Saya tidak tahu apakah emulator Dreamcast punya alat seperti itu

      Saya menulis artikel yang memakai teknik ini di Dolphin, dan artikel lanjutannya juga membahas hacking gim konsol dengan Ghidra: https://www.smokingonabike.com/2021/01/17/hacking-super-monk...

    • Saya pernah sedikit melihat gim itu. Trik utamanya adalah men-dump snapshot memori ke file lalu mengimpornya ke Ghidra. Ada banyak cara untuk melakukan dump, dan banyak orang menyukai Cheat Engine

      Ghidra bisa menganalisis machine code prosesor SuperH secara native, jadi menjalankan analisis otomatis saja sudah akan memunculkan banyak fungsi

  • Dalam beberapa tahun terakhir saya jadi jauh lebih tertarik pada gim lama, dan entah ungkapan ini masuk akal atau tidak, rasanya jauh lebih berjiwa

    Dan soal mobil itu menyedihkan. Terima kasih atas peringatannya; mulai sekarang saya tidak akan membiarkannya idle di driveway

    • Anda yakin tidak merindukan fitur modern seperti koneksi jaringan wajib dan microtransaction?
    • Saya tidak tahu apa yang terjadi pada mobilnya. Saya tidak melihatnya di artikel atau komentar
  • Saya selalu penasaran harus mulai belajar reverse engineering dari mana. Kebanyakan orang menyarankan belajar assembly dulu, tetapi setelah itu tampaknya tidak banyak informasi konkret di internet

    Entah apakah caranya hanya perlahan belajar pola-pola umum di x86, arm, dan platform arcade lewat coba-coba. Sulit menemukan diskusi online yang membahas detailnya

    • Ini mirip debugging. Anda mungkin pernah harus mengambil alih codebase yang asing dan memahaminya; bedanya, alih-alih source code, yang ada adalah binary

Dengan alat seperti Ghidra, kita bisa mencocokkan sumber sedikit demi sedikit, tetapi pada akhirnya tetap harus menalar dengan cara yang sama seperti saat memahami codebase yang asing. Bedanya kali ini tidak ada komentar sama sekali, meski cukup banyak juga proyek open source yang tidak memiliki komentar

Bisa dibilang kita sudah setengah jalan, dan tentu saja terbiasa dengan kode assembly akan membantu
  • Untuk contoh yang lebih mendekati dunia nyata, ada baiknya mencoba menyelesaikan http://microcorruption.com atau https://crackmes.one/

  • Secara pribadi, saya banyak belajar dengan mengutak-atik Cheat Engine. Dulu saya terutama memakainya saat kecil lalu tidak pernah melihatnya lagi, jadi saya tidak tahu bahwa ternyata alat ini jauh lebih kuat daripada yang saya kira

    Disassembler-nya cukup bagus, dan karena kita bisa menulis apa yang disebut “assembly scripts”, ini bagus untuk mempelajari dasar-dasar patch memori dengan assembly x86. Dari situ, kita bisa mulai membuat utilitas sendiri untuk mem-patch game sesuai keinginan

    Dengan Cheat Engine saja pun kita bisa mem-patch game dan membuat cheat yang benar-benar gila

  • Saya pernah belajar sedikit di sekolah, tetapi menjalankan video game yang saya ingat dari masa kecil selangkah demi selangkah dengan debugger mengajarkan ilmu komputer jauh lebih baik daripada apa yang saya pelajari di kelas

  • Ingin melihat video yang menunjukkan cheat sepak bola bawah air benar-benar berfungsi

  • Menarik bahwa game-game serupa mencocokkan checksum dengan konstanta integer. Pitfall: The Lost Expedition juga menggunakan cara yang sangat mirip: mengubah input tombol menjadi string ASCII dari tombol input, lalu menghitung CRC

    Pendekatannya juga hampir berupa brute force dengan Python lalu membandingkannya dengan hash cheat yang diekstrak. Tabel CRC32 tersembunyi di dalam decrypted_ints juga terlihat. Tabel yang sudah dibuat sebelumnya terlalu mudah dicari. Alih-alih membuat tabel baru dengan polinomial sendiri, saya jadi bertanya-tanya mengapa tabel-tabel itu sering ditemukan dalam keadaan terobfuskasi untuk membuatnya lebih sulit

  • Mengejutkan ada blog yang berfokus pada Sega Saturn

    Beberapa waktu lalu saya menemukan sebuah Saturn dan beberapa CD game kecil di lemari rumah orang tua. Saya tidak ingat pernah memilikinya, jadi saya menduga adik saya mendapatkannya setelah saya masuk kuliah. Bagaimanapun, saat saya coba sambungkan, semua game berjalan dengan baik. Namun selain itu, saya benar-benar tidak tahu harus melakukan apa dengannya. Tentu saja membuangnya bukan pilihan