Apa sajakah cara untuk mencegah atau mengurangi kecurangan dalam game multiplayer online? [Tutup]

19

Punkbuster ada hanya untuk mencegah kecurangan, namun kecurangan adalah hal biasa dalam permainan yang mendukung punkbuster. Modern Warefare 2 secara serius dikunci dari pengguna akhir yang menjalankan server mereka sendiri atau membuat mod, dan kecurangan terjadi terus-menerus.

Untuk permainan multipemain di mana setiap klien berjalan pada PC, apa yang bisa dilakukan untuk mengurangi atau menghilangkan kecurangan?

kevin42
sumber
1
Ini bukan jawaban yang lengkap sehingga saya tidak akan mencantumkannya sebagai jawaban, tetapi jika Anda menambahkan sejumlah nilai ke akun pemain selain metode anti cheat tradisional, saya yakin ini bisa membantu. Sebagai contoh jika pemain baru diturunkan ke server "noob" sampai mereka memperoleh cukup pengalaman untuk mengakses sisa permainan, itu membuat para peretas sangat kesulitan untuk meratakan kembali akun mereka setelah dilarang setiap waktu. Mungkin masih ada beberapa peretas yang dapat melewati itu, tetapi mengamankan server akun / perjodohan Anda jauh lebih mudah daripada mengamankan klien.
Lewis Wakeford

Jawaban:

18

Itu tergantung bagaimana mereka curang, berfokus pada salah satu cara utama untuk menciptakan cheat, proses lain yang menempel pada aplikasi Anda dan memodifikasinya - Anda dapat menghitung melalui semua proses lainnya, dan mengaitkan metode manipulasi memori mereka, dan emulasi keyboard / mouse mereka metode.

Wallhacks biasanya ditulis dengan menyuntikkan kode antara proses Anda dan perpustakaan DirectX / GL untuk mengatur transparansi pada materi sehingga mereka dapat dilihat. Anda dapat menambahkan beberapa kode ke sistem scenegraph / culling Anda untuk secara khusus tidak menarik pemain lain / entitas yang berguna jika mereka berada di balik dinding (untuk mencegah kecurangan seperti itu).

Jika Anda ingin multipemain dan ingin mencegah paket-paket dimodifikasi antara klien / server, maka buat sebuah checksum dari data yang Anda kirim melalui beberapa algoritma Anda sendiri dan memeriksa ini ketika datang di sisi lain bisa efektif. (Anda mungkin akhirnya akan melakukan ini untuk berbagai keperluan QA).

Hal yang sama berlaku untuk sebagian besar sumber daya dalam memori Anda, membuat checksum di awal bingkai, dan memverifikasinya pada berbagai tahap dapat menghasilkan beberapa deteksi manipulasi memori yang cukup berguna.

Ini adalah topik yang cukup terlibat, tapi mudah-mudahan ini membuat Anda ke arah yang agak dapat diterima.

Rob Ashton
sumber
Atau bahkan lebih baik daripada menyembunyikan benda di balik dinding (yang masih bisa diretas), tidak memberikan informasi klien tentang lokasi pemain sama sekali (atau hanya yang diperlukan untuk misalnya efek suara 3d terdengar bagus)
Bart van Heukelom
17

Pada solusi paling ekstrem, Anda pada dasarnya tidak pernah mempercayai klien. Untuk gim seperti MMO, pengguna tidak menjalankan server mereka, dan logika permainan apa pun ditangani pihak server. Jangan pernah memberi klien wewenang untuk mengatakan "Saya memiliki kesehatan X" atau "Saya memiliki amunisi X", dll.

Tetrad
sumber
4
Itu bagus jika Anda benar-benar memiliki sumber daya untuk menjalankan server khusus, tetapi cara ini cukup sederhana untuk melihatnya. Kemungkinan besar Anda masih akan melakukan banyak logika pada klien dan subset minimal logika di server, dengan sinkronisasi sesekali untuk menegakkan aturan dasar. Itu juga tidak selalu mencegah terhadap semua cheat sisi klien seperti wallhacks / manipulasi memori untuk membodohi klien agar mengungkapkan informasi yang berguna / etc
Rob Ashton
10

Jika Anda memiliki sistem di mana logika itu mahal dan harus dilakukan sebagian besar pada klien untuk menghemat siklus server, Anda dapat menerapkan sistem deteksi cheat probabilistik. Setiap beberapa menit ia memilih beberapa pemain berbeda untuk memeriksa dengan cermat dan memeriksa konsistensi di server. Sejak curang jarang membatasi kecurangan mereka untuk jangka waktu yang singkat dan langka waktu, mereka akan ditangkap pada akhirnya.

Manfaat lain dari hal ini adalah mereka tidak akan memiliki siklus turnaround yang cepat untuk pengembangan - jika dibutuhkan rata-rata 10 jam gameplay untuk server memperhatikan Anda, maka itu siklus turnaround 10 jam setiap kali Anda ingin melihat jika sesuatu berhasil. Dan jika memang bekerja, itu bahkan lebih lama karena mereka tidak akan tahu jika server telah memberi mereka acungan jempol atau hanya belum sempat mereka.

ZorbaTHut
sumber
+1 Dalam hal kinerja, pendekatan stokastik seperti ini adalah satu-satunya jawaban realistis untuk masalah yang lebih luas, IMO. Selain OnLive, yaitu, jika Anda hanya menargetkan AS.
Insinyur
5

Ada juga banyak jenis hack bertujuan-bantu untuk penembak orang pertama yang juga bekerja dengan menghubungkan ke panggilan perpustakaan grafis. OGC Hook untuk Counter-Strike / HL1 memiliki banyak pilihan selain membuat dinding transparan.

Jika info lokasi untuk musuh pada suatu titik diteruskan ke pustaka tingkat yang lebih rendah yang memiliki kode yang tersedia secara luas, panggilan tersebut dapat dihubungkan ke dan lokasi, skala, rotasi, dll. Data dapat digunakan untuk secara tepat menghitung vektor terbaik untuk menembak pada musuh itu. Sistem anti-cheat seperti PunkBuster sering menyertakan deteksi tipe heuristik (seberapa sering pemain ini mendapatkan pukulan yang sempurna, seberapa sering mereka berputar 180 derajat untuk mendaratkan satu tembakan bunuh, dll.) Di samping memori dan pemantauan proses.

Pada akhirnya tugas mencegah kecurangan dalam game multi-pemain adalah permainan kucing dan tikus. Ketika cheat baru dikembangkan, metode anti-cheat baru dibuat, dan kemudian cheat baru dibuat untuk menghindari teknologi anti-cheat baru.

Seperti yang dikatakan Tetrad dalam jawabannya, satu-satunya aturan keras dan cepat untuk "keamanan game" adalah untuk memberikan informasi sesedikit mungkin kepada klien, dan untuk mempercayai klien sesedikit mungkin. Jenis permainan yang berbeda akan memiliki persyaratan yang berbeda yang dapat memengaruhi seberapa baik Anda dapat mematuhi aturan-aturan ini.

Dalam gim FPS, karena kecepatan gimnya sangat cepat, seringkali tidak mungkin hanya menyediakan data kepada klien yang seharusnya diketahui tentang instan ini. Jika Anda tidak memberi tahu klien bahwa ada musuh di tikungan dan pemain tidak pergi ke sudut itu, Anda tiba-tiba harus mengirimi mereka informasi itu dalam hitungan milidetik atau berisiko membuat pemain dibunuh oleh musuh yang tidak mereka miliki. pernah melihat.

Satu-satunya "perbaikan" untuk masalah ini yang saat ini tersedia mungkin adalah OnLive. Karena layanan itu hanya mengirimkan konten audio dan video dari klien yang berjalan dengan aman di pusat data, satu-satunya cara untuk curang adalah dengan membuat AI manusia yang dapat menganalisis aliran video yang masuk dan mengambil tindakan berdasarkan itu - tugas yang sedikit, jika ada, curang sudah maksimal.

Charles Ellis
sumber
3

Semua jawaban di atas bagus, tetapi saya akan menambahkan satu lagi:

Beberapa game memiliki fitur replay yang sangat solid, yang memungkinkan untuk menyimpan replay setiap game setelah akhir game dalam format yang ringkas, dan menontonnya dengan berbagai cara - perspektif pemain yang berbeda, UI statistik waktu nyata, dan sebagainya.

Contoh yang sangat saya kenal: Starcraft 2. Salah satu cara Blizzard memblokir peretas adalah dengan menerima bukti curang sebagai permainan ulang.

Contoh untuk penggunaan dalam FPS adalah: jika Anda bermain gim dan Anda curiga bahwa orang lain curang dengan hack dinding, Anda menonton tayangan ulang, dan kemudian melihat bahwa dalam penglihatan replay yang normal, ia tidak mungkin bisa melihatmu dan melemparkan granat ke sudut, atau apa pun.

Anda kemudian melaporkannya dengan tayangan ulang, dan jika bukti terhadapnya cukup bagus, dia dilarang. Sejauh yang saya tahu, perusahaan yang melakukan hal ini hanya mengambil bukti serius, atau berbagai sumber bukti dengan perilaku yang sama sebelum melarang.

Jadi ini bukan teknik anti-debugging, ini adalah sistem laporan pengguna yang memungkinkan bukti kecurangan yang dibantu manusia yang nyaman.

SirKnigget
sumber
0

Ini mungkin bukan jawaban yang lengkap, tetapi saya punya beberapa masukan di sini. Salah satu cara terbaik untuk mencegah kecurangan adalah kebingungan atau menggunakan C / C ++. Ini mencegah orang dari memodifikasi kode klien.

LiquidFeline
sumber
Perlu disebutkan bahwa ada banyak deobfuscator di luar sana. Juga game .Net (C #, XNA) dapat dimodifikasi menggunakan Refleksi. Dari yang saya tahu, saya kira C / C ++ benar-benar adalah salah satu cara untuk membuatnya sulit untuk merusak kode.
user1306322
Ya. Maksud saya adalah bahwa kebingungan mencegah kode mudah didekompilasi menjadi tidak dapat dibaca dan C / C ++ tidak mudah dikompilasi, mereka berdua pilihan yang baik.
LiquidFeline
Juga, jika Anda sering menambal game Anda dan mengganti offset biner di executable atau menyisipkan NOP acak, tidak ada
retasan yang
@CPP_Person: Sebenarnya C cukup terkenal karena sangat mudah dikompilasi. Ini masalah yang sama sekali berbeda untuk C ++, yang memang bahasa yang cukup kompleks dari perspektif kompiler. Namun saya tidak mengerti, mengapa itu penting, betapa mudahnya mengkompilasi bahasa pemrograman tertentu - Anda ingin mencegah orang dari menulis alat cheat, bukan dari menulis kompiler yang baik - mereka tetap menggunakan kompiler C ++ yang sudah ada - membuat Dekompilasi keras sepertinya lebih menarik bagi saya daripada membuat kompilasi menjadi sulit.
Kaiserludi