Teknik untuk mencegah klien tidak resmi dalam permainan jaringan?


22

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!


Beberapa percaya cloud gaming umum sudah dekat. Ini semacam memecahkan pertanyaan ini sepenuhnya.
Laurent Couvidou

Jawaban:


13

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.


4
Teknik pengecekan bot Anda dapat dikalahkan dalam beberapa menit dengan menambahkan beberapa kebisingan di sekitar tindakan bot.
AsTeR

Beri +1 pada ini; mengingat bahwa pencegahan itu tidak mungkin (dan jika seseorang benar-benar bertekad mereka bahkan bisa bertindak terlalu jauh untuk meretas driver mereka, yang seharusnya menggarisbawahi fakta itu) fokus Anda seharusnya pada deteksi sebagai gantinya. Saya juga menambahkan bahwa setiap komunitas yang masuk akal yang dapat membangun di sekitar permainan kemungkinan akan berakhir dengan menjaga dirinya sendiri, jadi Anda juga dapat menempatkan beberapa pekerjaan dalam menyediakan alat yang membantu dalam hal itu.
Maximus Minimus

2
Pencegahan terprogram saja tidak mungkin, itulah sebabnya game seperti WoW memiliki banyak admin yang memeriksa orang-orang yang melakukan hal-hal berulang dan mengajukan pertanyaan kepada mereka untuk membuktikan bahwa mereka adalah manusia.
DampeS8N

1
@ ASTeR Itu hanya beberapa ide untuk mendorong ke arah yang benar. Ada banyak artikel dan presentasi yang menangani masalah ini lebih dalam, seperti yang ini misalnya: iis.sinica.edu.tw/~swc/pub/bot_trajectory.html
Kamil

5
"Jadi pertanyaannya seharusnya - bagaimana mendeteksi pemain bot?" Saya tidak setuju, ada beberapa cara untuk menipu tanpa memiliki bot. Misalnya membiarkan klien mendapatkan terlalu banyak info atau mempercayai klien.
Matsemann

9

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 tidak berpikir ini adalah cara yang tepat untuk mendekati ini atau setidaknya bukan satu-satunya hal yang harus Anda perhatikan.

  1. 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)

  2. 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.

  3. 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

  4. 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/


Ya, saya setuju itu bukan satu-satunya hal yang harus kita perhatikan. Kami sudah melakukan sebagian besar dari hal-hal ini, tetapi beberapa elemen terbuka di sisi klien tidak dapat dihindari.
UpTheCreek

@UpTheCreek Bisakah Anda memberi tahu kami apa yang paling Anda pedulikan? Bot, mengubah data, jenis informasi apa yang dikirim ke klien atau dari klien yang perlu dilindungi. Karena Anda sudah tahu membuat crack klien aman bukanlah tugas yang mudah, tetapi mungkin kami dapat membantu Anda sedikit lebih baik dengan pergi ke akar kekhawatiran Anda.

Bagi kami ini adalah kasus penyeimbangan pemeriksaan sisi server / simulasi dengan biaya server. Kami tidak dapat memasukkan semua yang kami inginkan. Saya sudah memikirkan hal ini cukup banyak, tetapi saya ingin melihat apakah ada trik cerdik di luar sana untuk melindungi klien dengan lebih baik :) Klien berbasis javascript, sehingga Anda dapat membayangkan bahwa ini bahkan lebih mudah daripada biasanya bagi pengguna untuk meretas !
UpTheCreek

4

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.


+1. Saya datang ke sini untuk menyebutkan ide untuk sering mengganti rahasia, yang berarti para peretas harus mengulangi pekerjaan mereka. Rahasia kompleks akan membuatnya lebih baik, misalnya. yang berubah berdasarkan apa yang dikirim server.
Kylotan

4

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:

  1. Melakukan semua perhitungan dan sisi server aksi permainan, klien hanya terminal bodoh dan mesin grafis. Jadi, jika para pemain menggunakan klien yang berbeda, itu benar-benar tidak masalah dalam hal permainan, mereka tidak bisa menipu fisika permainan.
  2. Memeriksa program / klien bot yang jelas dengan mencari tindakan komputer yang jelas seperti pengulangan sempurna peristiwa klik dan gerakan mouse.
  3. Memeriksa program / klien bot yang tidak jelas dan memperingatkan moderator dalam game untuk masalah ini.

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

  • Mencari pemain yang, dengan sedikit variasi, melakukan tindakan yang sama berulang kali. Ini mungkin duduk di node sumber daya dalam MMO dan menanamnya ketika respawns, atau mungkin berjalan dalam lingkaran antara paket kesehatan / amunisi dalam FPS dan tidak pernah menyimpang dari jalur tertentu dan selalu menggunakan senjata yang sama. (Bot sub-optimal dalam FPS jarang terjadi, tetapi jika permainan Anda memiliki tangga untuk naik di mana jumlah permainan lebih penting daripada talenta pemain seperti yang dimiliki beberapa FPS modern, bot menjadi berharga lagi)
  • Mencari pemain yang melakukan rush atau strategi yang sama berulang-ulang dalam RTS. Ada pesanan pesanan tertentu di Starcraft yang hampir tidak terkalahkan ketika dilakukan oleh bot.
  • Mencari pemain yang telah mengumpulkan banyak sumber daya dan sekarang tanpa henti menggali satu item. Ini adalah masalah besar di Ultima Online.

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.


3
Pada paragraf terakhir Anda, Galaksi Star Wars SOE adalah contoh MMO dengan bahasa skrip / makro yang cukup kuat, namun tidak memiliki banyak masalah bot. Apa yang akhirnya terjadi adalah bahwa beberapa kebutuhan permainan yang membosankan dibuat (kebanyakan starports memiliki antrian pemain di depan bot penyembuh penyembuh otomatis, misalnya), dan penggilingan XP tingkat rendah sering dilakukan dengan cara ini terlalu. IMO ini semua ditambahkan secara besar-besaran ke dalam game, yang membunuh itu adalah beberapa keputusan yang sangat buruk dan perubahan game, dengan sedikit peringatan atau komunikasi.
GAT Diambil

3

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.


1
+1 Satu-satunya cara efektif melawan kecurangan adalah mendesain gim dengan cara yang tidak semula efektif.
API-Beast

Kalimat terakhir saya benar karena saya heran tidak ada yang menganggapnya sebagai kemungkinan ...
Jorge Leitao

2

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).


1

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.


0

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).


-1

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.


Saya bukan orang yang mengecewakan Anda, tetapi bagi saya ini tidak benar-benar memberikan perlindungan. Sepertinya Anda hanya berbicara tentang membiarkan pengguna yang sah terhubung - itu mudah ditangani. Tetapi masalahnya adalah tidak akan ada apa pun untuk menghentikan seseorang dengan akun yang valid, merekayasa balik pengiriman pesan, dan menulis klien saya yang diretas.
UpTheCreek

-1 ini tidak menjawab pertanyaan, memiliki akun online tidak mencegah seseorang terhubung dengan klien yang diretas yang, misalnya, mengotomatiskan tindakan dalam game. wow sepenuhnya berbasis online dan masih terus diretas. untuk mencegah badai salju ini menggunakan perangkat lunak anti-cheat "sipir" mereka, yang merupakan contoh menangani masalah yang dipermasalahkan
dreta

Arg, kamu benar. Saya salah paham pertanyaannya.
Orin MacGregor
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.