Dalam permainan jaringan multi-pemain, teknik apa yang ada untuk memastikan bahwa pengguna terhubung dengan aplikasi klien resmi, dan bukan beberapa aplikasi klien yang diretas?
Saya menyadari mungkin tidak ada cara pasti untuk melakukan ini, tetapi saya tertarik pada teknik yang dapat digunakan untuk mengurangi masalah.
Saya terutama tertarik pada teknik apa pun yang dapat digunakan untuk game berbasis web, tetapi saya membayangkan sebagian besar dapat diterapkan secara umum.
Terima kasih!
networking
multiplayer
security
UpTheCreek
sumber
sumber
Jawaban:
Itu masalah yang menarik, tapi saya pikir Anda mengajukan pertanyaan yang salah di sini. Biarkan saya mulai mendeteksi pendekatan klien yang diretas:
Jika klien Anda dieksekusi di sisi pengguna, ia dapat melakukan apa pun yang ia inginkan dengan kode Anda (sampai terlalu rumit baginya, tetapi akan selalu ada seseorang yang lebih pintar di barisan). Segala sesuatu yang dapat Anda lakukan seperti enkripsi kode yang sulit dari pesan antara klien dan server, membuat sertifikat klien, atau bahkan membuat klien untuk menghitung checksumnya, dapat dan diberi waktu yang cukup, akan diurai dan di-crack. Saya telah melihat sebuah perangkat lunak yang datang dengan dongle, dongle ini memiliki bagian dari kode aplikasi, tetapi untuk dapat menjalankannya, dongle pertama-tama memeriksa crc aplikasi jika tidak marah .. tentu saja setelah beberapa waktu dongle diretas juga .. ditambah jika Anda membuat pembaruan perangkat lunak, Anda perlu mengirim ulang dongle ..
Selain itu, pengguna dapat menggunakan klien Anda sendiri untuk menipu - dengan mensimulasikan gerakan mouse dan klik misalnya.
Jadi pertanyaannya seharusnya - bagaimana mendeteksi pemain bot?
Di sini Anda memiliki beberapa opsi - mengukur waktu antara klik, mengukur kecepatan gerakan mouse - apakah mouse bergerak persis dari titik A ke titik B berkali-kali dan mengenai coord yang persis sama? Apakah gerakan pengguna dapat diulang? Jika ketika sumber daya yang dikumpulkan pengguna sudah habis, apakah pengguna pergi ke tindakan lain atau dia menunggu di tempat selama berjam-jam? Pada akhirnya Anda akhirnya menulis kode pengenalan pola.
sumber
Saya tidak berpikir ini adalah cara yang tepat untuk mendekati ini atau setidaknya bukan satu-satunya hal yang harus Anda perhatikan.
Pastikan Anda hanya mengirim informasi spesifik klien ke setiap klien (mis. Klien tidak perlu tahu apa yang bisa dijatuhkan monster, misalnya, kirim informasi setelah membunuhnya, dan hanya ke klien yang ditentukan)
Lakukan sebagian besar perhitungan di sisi server (posisi dll.). Klien melakukan perhitungan sendiri, tetapi TAPI tidak pernah bisa mengirim nilainya sendiri hanya tindakannya. Server harus memeriksa apakah tindakan ini valid dan bagaimana hal itu akan mempengaruhi permainan.
1 dan 2 biasanya dikombinasikan dengan prediksi. Klien dan server mencoba untuk memprediksi perilaku tertentu. Klien misalnya menggerakkan pemain tetapi setiap x detik atau ms. menerima koreksi oleh server
Mengisi daya pengguna untuk akun mereka bukan untuk klien, dengan cara ini pengguna dapat memperoleh versi yang retak tetapi tidak bisa bermain tanpa akun.
Dengan 2 Anda dapat memastikan tidak ada peretasan uang, peretasan posisi atau peretasan dinding dll. Tetapi bot selalu menjadi masalah bagi banyak perusahaan. Bahkan nama perusahaan besar seperti badai salju punya masalah dengan itu. Yang bisa Anda lakukan adalah membatasi waktu bermain per akun, sehingga seseorang tidak bisa online selama lebih dari 540 jam per bulan. Saya ingat bot yang menggunakan nilai warna input monster + mouse untuk menjalankan XP. Cara lain adalah dengan menyediakan program tambahan yang memeriksa aplikasi lain yang sedang berjalan dan akses memori tetapi ini membawa beberapa masalah baru.
Edit:
Artikel yang ditulis dengan sangat baik untuk pemula: http://gafferongames.com/networking-for-game-programmers/what-every-programmer-need-to-know-about-game-networking/
sumber
Tidak ada cara yang sangat mudah untuk menjamin bahwa "klien resmi" sedang berjalan; mekanisme semacam itu akan bergantung pada kode validasi yang mengkomunikasikan kembali semacam "rahasia" ke server, yang dapat direkayasa balik, diberikan waktu yang cukup. Ini pada dasarnya adalah apa yang terjadi ketika perangkat lunak anti-peretasan memberi tahu server bahwa klien itu OK.
Sunting: untuk sedikit menguraikan di atas, pertimbangkan kode yang memvalidasi sisi klien. Ini memiliki dua pekerjaan yang sangat sulit: memeriksa bahwa kode asli sedang digunakan (dan tidak ada yang hadir yang dapat mengganggu kode asli secara dinamis / saat runtime (!)), Dan mengkomunikasikan hasil ini kembali ke server, sedemikian rupa bahwa komunikasi ini tidak dapat dipalsukan. Sementara bagian pertama sangat sulit, bagian kedua benar-benar mustahil.
Jika Anda dapat memperbarui klien dan server secara teratur, maka Anda dapat mengganti rahasia secara teratur, dengan harapan menyulitkan cracker untuk mengikutinya. Akan tetapi, dalam semua kemungkinan, kecuali jika Anda mengubah cara rahasia dikodekan / diimplementasikan, itu dapat dipecahkan dengan sangat cepat lagi. Jadi pada dasarnya, ini adalah perlombaan senjata antara Anda dan siapa pun yang ingin memecahkannya - yang memiliki lebih banyak waktu dan uang untuk mengatasi masalahnya.
Setelah menerima bagian itu, adakah yang bisa kita lakukan? Di dunia yang sempurna, dengan daya komputasi dan bandwidth tak terbatas, Anda dapat dengan mudah mentransfer status antara klien dan server, dan membuat server menjalankan simulasi sempurna tentang apa yang terjadi pada klien. Model ini kemudian dapat digunakan untuk memvalidasi tindakan yang diklaim klien untuk dibuat. Ini tidak akan mendeteksi apakah manusia atau bot sedang bermain, tetapi ia akan dapat memvalidasi apakah klien mengklaim tembakan terjadi melalui dinding, atau tindakan lain yang tidak dapat dibayangkan.
Memiliki cukup data di server juga merupakan langkah pertama dalam mendeteksi perilaku tidak teratur - dengan tujuan itu mungkin terlalu cepat untuk manusia, dll. Jelas situasi simulasi yang sempurna umumnya tidak layak, tetapi beberapa jenis yang diperkecil, model yang diperkirakan dapat digunakan dalam banyak situasi.
sumber
Anda tidak menentukan jenis gim, jadi saya akan lebih condong ke gim RPG / MMO. Tetapi banyak dari ini bisa dan tidak berlaku untuk FPS, Strategi, dan game Aksi. Cara perusahaan game multi-pemain besar seperti Blizzard menangani masalah ini dalam game mereka adalah:
Mereka kemudian muncul dalam permainan (jika itu mungkin, untuk game yang sama seperti Starcraft 2 tidak) atau menonton / berbicara dengan pemain tentang tindakan mereka sebagai 'pemeriksaan manusia'. Atau setidaknya begitulah seharusnya ditangani. Blizzard cukup bagus tentang ini tetapi secara historis perusahaan MMO lainnya belum.
Memeriksa bot yang tidak jelas tidak mudah, tetapi beberapa aturan dasar yang harus diikuti termasuk
Masalahnya adalah bahwa semakin populer permainan Anda, dan bot yang lebih bermanfaat dapat mengurangi kebosanan dalam permainan Anda, semakin besar kemungkinan orang akan menggunakan dan membuat bot ini. Dan itu sepele untuk membatasi kecepatan gerakan mouse, menambahkan variasi humanistik acak untuk klik, bahkan membuat bot melakukan kesalahan pada tingkat manusia, membuka dan menutup bagian menu, menekan tombol yang salah dan kemudian menutup jendela, beralih antara keyboard dan kerja mouse seperti manusia lakukan untuk mengurangi kelelahan tangan. (Anda bahkan tidak menyadari Anda melakukannya)
Jadi langkah terakhir ketika seseorang atau bot melakukan sesuatu yang berulang untuk waktu yang sangat lama benar-benar harus menjadi mod manusia yang datang ke pemain dan berbicara dengan mereka. Jika mereka ada di sana dan merespons dengan jawaban manusia, mereka adalah manusia. Biasanya mod akan meminta pemain untuk berhenti sebentar, atau mengikuti mereka di suatu tempat dan melakukan beberapa tindakan lain, simpai menjadi lebih kompleks dengan waktu.
Tanget
Tentu saja, pada akhirnya seseorang akan membuat bot yang tidak bisa dibedakan dari orang sungguhan, melewati tes Turing. Dan ada banyak penulis bot di luar sana yang bertujuan untuk melakukan hal itu.
Saya sendiri, memiliki daya tarik yang lewat dengan ide ketika saya pertama kali memulai pemrograman dan menciptakan bot tidak berguna untuk Ultima Online yang akan berdiri di kota dan meniru NPC. Perintah-perintahnya sangat sederhana sehingga mudah dibuat, cukup menekan tombol untuk melangkah ke arah yang berbeda, dan menonton log obrolan untuk namanya sendiri dan menyalurkan pesan ke ALICE melalui versi web AI. Saya tidak ingat yang mana dan mungkin tidak ada lagi.
/Garis singgung
Intinya adalah, Anda harus memutuskan di mana menarik garis. Jika Anda tidak mampu membeli pasukan moderator untuk berbicara dengan orang-orang yang diidentifikasi oleh sistem Anda sebagai bot, Anda mungkin lebih baik membiarkan komunitas menandai orang sebagai bot, dan kemudian ketika cukup banyak melakukannya, tendang pemain sekitar satu jam. Bukan larangan, cukup tendang. Masalah sebenarnya bagi sebagian besar pemain adalah bahwa bot memiliki sumber daya yang dapat digunakan oleh pemain manusia lainnya. Jika massa langka, seperti halnya masalah dengan Ragnarok Online, maka bot yang berkeliaran dan membersihkan seluruh area musuh saat mengambil item (atau tidak) adalah hal biasa, dan mereka merusak permainan untuk orang lain. Jadi, Anda dapat mengurangi biaya pasukan admin dengan cara itu.
Terakhir, Anda juga dapat hidup dengan bot sebagai realitas ruang permainan Anda dan mendorong penggunaannya. Ini membutuhkan perancangan gim Anda seputar penggunaan bot, pelatih, dan program pembantu yang umum dan akhir. Saya ingin mengatakan ada MMO yang melakukan ini sekitar 10 tahun yang lalu, tetapi saya tidak ingat yang mana itu. Itu berarti akhir permainan, karena MMO sangat berat dan itu berarti bahwa 95% pemain kami menjauh dari keyboard mereka pada waktu tertentu dan menghancurkan komunitas. Jika Anda melewati rute ini, berhati-hatilah.
sumber
hindari memiliki fitur permainan yang dapat dimenangkan pengguna dengan melakukan tugas yang berulang , terutama dalam game yang mirip browser. fitur gim yang menyebabkan tugas berulang tidak hanya menyebabkan pengguna lain marah karena mereka tidak punya waktu untuk melakukannya, tetapi juga membuat gim ini lebih mudah di-botable (dan jauh lebih tidak menyenangkan!)
Jika fitur game tertentu bisa botable, mengapa ada fitur pada game itu ?? Fitur itu jelas memanggil pengguna untuk membuat bot.
Permainan ini dimaksudkan untuk dimainkan dengan memberikan pemain sejumlah hiburan yang wajar, biasanya dengan serangkaian pilihan yang tidak sepele. Kemampuan untuk memutuskan menghadapi pilihan-pilihan non-sepele memisahkan manusia dari bot. Pada akhirnya, alih-alih mencari bot, cari di game Anda di mana bot dapat diimplementasikan, dan implementasikan Anda sendiri untuk digunakan oleh semua orang. Dengan melakukan itu, Anda menghemat waktu untuk pemain game dengan menghindarinya melakukan tugas-tugas yang membosankan, saat Anda melawan bot dari root: jika tidak ada fitur permainan botable, bagaimana mungkin ada bot?
Intinya saya adalah: Saya akan mengatakan bahwa ada ambang batas pada jumlah minimum kompleksitas yang dibutuhkan sebuah game agar tidak dapat di-botable. Buat game Anda di atas ambang itu dengan menambahkan pilihan non-sepele yang pada akhirnya akan meningkatkan pengalaman pengguna.
Ngomong-ngomong, mungkin paradigma ini tidak lagi berlaku pada hari-hari ini ... tapi saya masih percaya ini yang membuat permainan bagus.
sumber
Jawaban yang ada sudah bagus, tetapi saya ingin menunjukkan bahwa jika cek Anda mahal (mis: menjalankan seluruh sisi server game untuk memastikan klien tidak curang), maka Anda dapat memilih untuk hanya melakukannya sebagian saja. waktu .
Misalnya, Anda hanya dapat memeriksa tindakan di wilayah tertentu atau oleh pemain tertentu (berubah secara acak setelah beberapa waktu), atau hanya memiliki antrean tindakan dan memilih secara acak tindakan mana yang akan divalidasi (dan abaikan yang lain). Mungkin muncul dengan heuristik tentang siapa yang cenderung selingkuh (pada dasarnya mencari orang-orang yang paling sukses) dan memvalidasi tindakan mereka di server.
Pastikan server tidak memberikan ketika validasi tindakan dan ketika tidak. Selalu kirim respons standar Anda sampai Anda siap untuk mengambil tindakan (dan jangan memberikannya dengan mengambil lebih lama untuk mengirim respons ketika Anda memvalidasi dan ketika Anda tidak).
Dengan cara ini Anda bisa mendapatkan perlindungan yang cukup baik terhadap kecurangan, hanya menggunakan daya server yang dapat Anda manfaatkan (meskipun jelas semakin dekat Anda dengan memvalidasi setiap tindakan, semakin baik perlindungan dari kecurangan).
sumber
Yah, saya tidak berpikir ada "the-Ultiamte-soltution". Anda bisa meng-encode Datapackages, dan memberi server yang menerima paket beberapa aturan. Sebagai contoh, Anda dapat mengatur bahwa langkah realistis / diizinkan terbesar adalah +1 dan tidak seperti penipu / peretas yang akan mengaturnya menjadi 5 atau lebih tinggi hanya untuk menjadi lebih cepat. Pikirkan saja apa yang bisa dilakukan seorang peretas untuk menjadi lebih baik daripada pemain lain dan tetapkan aturan untuk itu.
sumber
Cara paling sederhana adalah pada dasarnya membuat klien terminal bodoh. Semuanya dilakukan di server, dan klien hanya mengirim perintah ke server. Dengan cara ini server sepenuhnya mengendalikan segalanya.
Namun, ini mungkin bukan kasus yang paling cocok untuk Anda, karena server harus melakukan lebih banyak perhitungan, dan pengalaman pengguna akan lebih buruk. Jadi semakin banyak logika yang Anda serahkan kepada klien untuk tampil, semakin baik pengalaman pengguna, tetapi semakin sedikit keamanan yang ada. Jadi, Anda harus menemukan jalan tengah yang dapat diterima untuk Anda.
Juga, hanya kirim klien apa yang "harus" ketahui. Misalnya, jika pemain musuh ada di balik tembok, jangan kirimkan informasi itu ke klien, atau klien yang diretas akan dapat melihat informasi ini (baca: wallhack).
sumber
EDIT: Saya salah paham pertanyaannya. Saya menafsirkannya sebagai "mencegah kunci bajakan / diretas" alih-alih "perangkat lunak yang diretas yang dapat mengirim pesan untuk menghasilkan 1 miliar emas untuk pemain."
Sebagian besar game saat ini memiliki nilai yang dikaitkan dengan akun dalam database karena apa pun yang dapat dikirim klien ke server dapat dimodifikasi. Ini mungkin metode paling sederhana dan paling efektif.
Dengan prevalensi internet berkecepatan tinggi dan transfer file P2P, perusahaan telah beralih dari kunci-cd yang disimpan secara lokal di klien ke kunci yang ditautkan ke akun di server mereka. Tidak ada lagi perangkat lunak klien "resmi" atau "tidak resmi" karena siapa pun dapat mengunduh klien. Tetapi Anda hanya bisa bermain jika Anda memiliki akun dengan akses untuk bermain.
Ini juga bermanfaat bagi perusahaan karena mereka tidak perlu menghabiskan sebanyak mungkin untuk menghasilkan salinan fisik perangkat lunak.
sumber