Browser dan gim seluler umumnya memiliki tabel skor global tertinggi. Itu juga umum untuk tabel-tabel itu berisi skor 2.147.483.647 - di mana orang telah menemukan panggilan layanan web yang melaporkan skor dan menggunakannya untuk mencatat skor fiktif.
Untuk permainan puzzle sederhana, kita dapat bertahan melawan hal ini dengan memasukkan catatan setiap gerakan yang dilakukan pemain (dan setiap benih acak yang digunakan untuk menghasilkan level) dengan panggilan pelaporan skor. Seluruh permainan kemudian dapat direproduksi dan diverifikasi di server.
Namun, ini dengan cepat menjadi tidak layak untuk sesuatu yang lebih besar dari Pac-man.
Bagaimana lagi cara curang seperti ini bisa dicegah?
mobile
web
security
leaderboards
anti-cheat
Teedyay
sumber
sumber
Jawaban:
Sistem internal yang kami gunakan untuk Moblox (kemudian diganti dengan OpenFeint) bekerja seperti ini:
Untuk memecahkan sistem, Anda harus menemukan string ajaib ini. Mungkin dengan teknik terbalik, tapi menyakitkan.
OpenFeint, ScoreLoop dan CocosLive semuanya menggunakan trik yang sama, tetapi dengan HTTPS. Sangat mudah diimplementasikan.
sumber
Meskipun Anda benar bahwa tidak selalu layak untuk mengirim seluruh replay ke server untuk permainan yang kompleks, sistem serupa dapat digunakan dengan meminta server secara berkala (dan semi-acak) meminta klien untuk beberapa bagian dari keadaannya, sementara itu game sedang berjalan.
Misalnya, dalam FPS, setiap menit Anda bisa bertanya "Berapa banyak pembunuhan yang Anda miliki?", "Di mana semua musuh?", Dll. Jika klien tidak kembali dengan jawaban yang masuk akal untuk sebuah tantangan dalam sebuah jumlah waktu yang wajar, mereka curang.
Tentu saja, ini hanya berfungsi jika game online selama seluruh sesi bermain. Karena tujuan di sini adalah untuk dapat mengunggah ke papan peringkat online, saya pikir itu masuk akal - jangan menendang pemain keluar dari permainan jika mereka salah menjawab, jangan biarkan mereka masuk dalam daftar skor.
Namun saya ingin Anda mempertimbangkan untuk mengirim replay. Yang Anda butuhkan hanyalah input acak awal dan timestamped. Ini seharusnya benar-benar beberapa ratus KB. Banyak game arcade sudah melakukan ini untuk menyimpan replay untuk keperluan ulasan pemain; memiliki server Anda memvalidasi ini mungkin tidak sepele, tetapi mencegah semua jenis kecurangan kecuali botting.
sumber
Anda dapat membatasi pelanggaran yang paling mencolok dengan memantau hasil tertinggi di tabel skor teratas. Bergantung pada gim Anda, Anda mungkin memiliki "skor sempurna", di mana skor apa pun pasti curang. Jika tidak, Anda dapat menghitung "skor mustahil" yang terendah; dapatkah pemain menembak 10 tembakan per detik, permainan berlangsung 1 menit, dan setiap musuh yang terbunuh bernilai 100 poin? Maka skor apa pun yang lebih tinggi dari 60.000 harus curang.
Anda juga dapat membantu mengurangi masalah dengan mengirimkan beberapa metadata; bukan riwayat permainan lengkap, seperti yang Anda gambarkan, tetapi hanya komponen yang membentuk skor. Katakan: skor 60000, 500 musuh terbunuh, dan satu item bonus diraih. Anda kemudian dapat melakukan pemeriksaan sederhana. Ini adalah "keamanan melalui ketidakjelasan," dan karena itu tidak aman sama sekali, tetapi membantu menghilangkan penyerang yang paling naif.
sumber
Pada akhirnya Anda hanya dapat mengesampingkan skor yang sangat tinggi, karena sisanya (menurut definisi) hanya tidak masuk akal, dan dengan demikian mungkin menjadi pemain yang sah (dan mengagumkan).
Kalau tidak, Anda harus mengandalkan teknik kebingungan (seperti enkripsi, dan mengirim statistik lain di luar skor).
Anda juga dapat mengirim skor secara berkala saat permainan dimainkan, yang akan menambah tingkat kerumitan lain pada kecurangan - yaitu server dapat memutuskan apakah permainan telah dimainkan cukup lama untuk menjamin skor tertentu, dan juga memastikan bahwa cukup laporan perantara diterima selama waktu bermain (hanya saja tidak membuatnya 100% atau kereta yang masuk ke terowongan dalam perjalanan pulang akan mengakibatkan saya membuang telepon ke luar jendela).
Pada akhirnya seseorang akan menemukan cara untuk melanggarnya, jadi jangan bunuh diri dengan mencoba menghentikannya.
sumber
Saya menambahkan tabel skor tinggi cepat / kotor ke proyek saya beberapa waktu lalu dan sama sekali tidak berpengalaman dalam keamanan internet / dll ternyata semacam cacat. Anehnya, dengan hampir 1.200.000 skor yang tercatat, saya hanya mungkin memiliki 5 atau 6 kali batch dengan skor yang sangat salah mencapai puncak papan. Sebagian besar skor bahkan tampak lebih seperti kesalahan dalam permainan, daripada "peretasan" yang sebenarnya.
Jadi saya kira satu poin penting adalah: pastikan sistem penilaian game Anda kedap udara , atau setidaknya lakukan pengecekan kelayakan skor yang sangat baik; sekarang, game ini yang saya bicarakan adalah entri Ludum Dare 48 jam, jadi itu bukan hal yang paling stabil di sekitar .. tetapi secara keseluruhan saya pikir itu lebih sering terjadi bahwa pemain biasa akan menemukan / mengeksploitasi kesalahan ingame daripada memiliki seseorang yang secara langsung "meretas" papan peringkat.
Yang mengatakan, saya sedang mengerjakan penulisan ulang proyek ini sekarang, dan saya akan keluar dengan kebingungan. Saya tidak akan membahas terlalu banyak detail, tetapi pada dasarnya saya memiliki semua skor mengirimkan nilai kunci berdasarkan pada sekelompok nilai acak dan hashing dan string ajaib, lalu skor apa pun yang lolos dari pemeriksaan itu dan cukup tinggi untuk menghasilkan yang sebenarnya " Papan peringkat Top X "harus melewati babak validasi lainnya (kali ini dengan nilai kunci kedaluwarsa yang dihasilkan di server, dan pemeriksaan kelayakan yang lebih teliti).
Saya juga menyarankan menggunakan pelacak paket untuk menguji hal-hal apa yang terlihat (saya awalnya melakukan verifikasi yang lebih sederhana yang berarti seseorang dapat menggunakan pelacak paket untuk menemukan dan menggandakan permintaan http skor yang diunggah, tanpa mengetahui string ajaib atau apa pun (berarti Anda membutuhkan skor yang sah terlebih dahulu, tetapi Anda dapat mengirim duplikat skor sebanyak yang Anda inginkan ..)). Saya menggunakan Wireshark untuk menguji ini.
Huh, ini agak lama, tapi mudah-mudahan ini membantu ...
sumber
Saya bukan ahli dalam bidang ini, tetapi jika saya adalah Anda, saya akan mencoba mengenkripsi skor dengan kunci yang tertanam dalam kode Anda. Orang-orang itu perlu menerapkan rekayasa balik atas kode Anda alih-alih teks biasa yang digunakan untuk layanan web.
sumber
Speedruns pada dasarnya merekam setiap keystroke, dan mereka merekam tentang game SELURUH. Jadi, ya, Anda bisa merekam seluruh permainan, itu tidak mustahil. Setiap cara lain untuk melakukannya adalah crackable melalui reverse engineering (saya tidak bisa stres cukup: Anda tidak menambahkan keamanan, Anda menambahkan ketidakjelasan).
Namun, bahkan jika Anda melakukannya dengan cara ini mereka sebenarnya bisa mengirimkan speedrun. Anda tidak dapat melakukan apa pun untuk mencegahnya.
sumber
Saat Anda melakukannya, ada pertanyaan apakah skor tinggi hanyalah pemain yang menemukan exploit (misalnya, jika beberapa hal dalam permainan memberikan penalti skor, dan bug menyebabkan skor negatif untuk "membungkus" menjadi sangat positif ... atau hanya pemain yang menemukan kondisi permainan tertentu seperti tempat aman di papan di mana mereka bisa duduk di sana dan tidak perlu khawatir kehilangan, tanpa batas waktu).
Untuk mengetahui perbedaan antara retasan dan eksploitasi game, mengunggah setidaknya beberapa data permainan akan bagus. Itu akan membantu Anda memperbaiki eksploit, setidaknya.
Untuk beberapa game (terutama yang berbasis giliran), Anda sebenarnya dapat memainkan game melalui server, di mana semua logika game ada di sisi server dan klien hanyalah sebuah antarmuka. Ini tidak hanya membuat peretasan skor jauh lebih sulit, tetapi juga memungkinkan Anda untuk mencatat semua tindakan pemain di server secara sepele, dan dengan demikian memutar ulang permainan apa pun kapan saja. Saya menyadari untuk sesuatu seperti penembak aksi kedutan, ini mungkin tidak praktis.
sumber
Buat semua asal keacakan dari satu seed dan simpan input untuk setiap frame. Setiap kali Anda memiliki skor tinggi yang diklaim (katakanlah 50 besar), kirim seed dan input lengkap ke server. Mainkan ulang game di server dan perbarui leaderboard jika Anda mendapatkan skor tinggi.
Jika Anda menganggap ini tidak mungkin untuk game yang lebih canggih karena ukuran permintaan, lihat contoh ini.
Katakanlah game memiliki 8 input tombol (1 pad dan 4 tombol) dan berjalan pada 60fps. Input game satu jam dapat dikirim dengan 3.6KB tanpa kompresi. Sesi Anda mungkin akan memiliki kurang dari satu jam dan kompresi harus menyusut banyak, karena input manusia memiliki banyak redundansi.
Tantangannya adalah membuat game menjadi deterministik, dapat dimainkan dari input yang direkam dan dapat dieksekusi di server.
sumber
Belum pernah mengimplementasikan ini sebelumnya tetapi ...
Kirim skor secara bertahap dengan stempel waktu. Ini memberi Anda log untuk melihat seberapa sering skor meningkat serta cara untuk melacak "momentum" skor tinggi itu.
Anda kemudian akan menetapkan tonggak / kriteria untuk skor Anda.
Misalnya: Skor yang lebih besar dari 20.000 tidak dapat tiba dalam 20 detik pertama dalam suatu game. Skor lebih besar dari 250.000 tidak dapat tiba tanpa entri lebih dari 200.000.
Ini tidak persis sama dengan mengirim status permainan, tetapi mendekati itu.
Manfaat Samping: Pikirkan semua statistik permainan yang berguna yang akan Anda dapatkan dari ini. Seseorang mungkin membayar uang baik untuk itu.
sumber