Bagaimana cara menerapkan penyelubungan banyak pemain dengan visual yang menahan peretasan sisi klien?


19

Saya telah berpikir tentang menerapkan stealth dalam game multi-pemain. Ini adalah permainan gaya MOBA, jadi pikirkan League of Legends (LoL) dan Heroes of the Storm (HotS). Beberapa klien terhubung ke satu server, yang menyiarkan kondisi permainan ke semua klien. Klien mengirim data input mereka ke server, yang mungkin menolaknya ketika menemui perintah yang tidak valid, sehingga rendering kecurangan tidak mungkin (well, secara teori).

Sekarang, saya menyebutkan game-game ini dengan sengaja karena keduanya menerapkan stealth secara berbeda. LoL memiliki sembunyi-sembunyi dengan dua kemungkinan status: Anda benar-benar terlihat atau sepenuhnya tidak terlihat. Di sisi lain, HotS mengimplementasikan siluman sedemikian rupa sehingga Anda dapat mengetahui dengan kilau di udara:

Heroes of the Storm tembus pandang

Saya pikir ini adalah mekanik yang rapi, karena mempromosikan / memberi imbalan memperhatikan lingkungan Anda. Namun, ini menjadi permainan multi pemain membuat saya menyadari bahwa ini mungkin terbukti mudah dieksploitasi.

Ketika Anda menerapkan stealth dengan cara 'LoL', Anda bisa berhenti mengirim koordinat pemain ke klien lain. Ketika karakter pemain memecahkan stealth, server dapat menyiarkan lokasi lagi. Namun, dengan model HotS, kilau dapat terlihat di udara di mana karakter bergerak. Ini berarti bahwa server harus mengirim lokasi pemain ke klien lain. Yang berarti bahwa pemain yang mengubah tekstur atau model atau bahkan kode permainan itu sendiri dapat membuat mekanik jubah tidak berguna. Berikut adalah utas di papan HotS tentang hal itu.

Pertanyaan saya adalah apakah ada beberapa cara untuk mengimplementasikan cloaking (dengan 'shimmer', à la HotS), tanpa memiliki masalah bahwa pemain licik dapat memodifikasi game (data) dan 'beat the system'. Apakah ini mungkin, dan jika tidak, bagaimana gim multi-pemain lainnya dengan mekanik ini menangani ini? Apakah gaya kasat mata LoL tidak terlihat?

Saya berpikir tentang meminta server mengirim lokasi 'jubah' palsu sesekali, tetapi ini juga membahayakan pemain adil yang hanya memperhatikan, sehingga tidak akan berhasil.


Terkait adalah tautan , tetapi saya tidak bertanya tentang menabrak orang lain (yang dapat ditangani oleh server) melainkan menampilkan unit terselubung.
Underflow

Ini adalah saran yang buruk, tetapi Anda bisa melakukan semua rendering grafis di server, lalu menyiarkan layar masing-masing pemain ke klien mereka. Mereka hanya mengirim input, Anda hanya mengirim output. Klien adalah cangkang tipis yang hanya menampilkan video dan memutar audio.
user137

Philipp mendapat ide bagus di sana. Saya ingin menambahkan bahwa Anda masih harus mewaspadai kotak pembatas dan persimpangan mereka dengan skillshots dll. Jika Anda mengirim kotak pembatas, seorang pembuat kode yang pintar dapat membalikkan merekayasa karakter apa yang tidak terlihat (jika ada pahlawan yang berbeda). Jika Anda memiliki efek yang memicu pada klik, maka Anda harus mengirim sesuatu seperti kotak atau setidaknya posisi dan skala efek. Ketahuilah bahwa segala sesuatu yang lebih abstrak lebih
Greaka

Anda tidak dapat benar-benar menerapkan cloaking gaya LoL dengan berhenti mengirim koordinat pemain. Sekalipun karakter tidak digambar, mereka masih harus dapat berinteraksi dengan peta (dan pemain lain) dengan cara lain. Tetapi menerapkan siluman "terdeteksi" (jejak kaki, shimmers, dll) menghilangkan banyak insentif untuk melalui kesulitan modding permainan: Anda belajar bagaimana mendeteksi karakter berjubah dan melanjutkan.
The Spooniest

2
@TheSpooniest: dapatkah Anda menjelaskan apa yang Anda maksud dengan Anda tidak dapat benar-benar menerapkan cloaking gaya LoL dengan berhenti mengirim koordinat pemain ? Jika pemain A tidak terlihat dan server tidak mengirim koordinat lagi ke pemain B dan C, server masih dapat menangani mis. Tabrakan antara pemain A dan B dengan menolak untuk memindahkan karakter B di atas A (seolah-olah mereka berjalan ke dinding). Jika A (masih tidak terlihat) menembakkan skill ke B, server hanya dapat mengirim "skill yang ditembakkan dari posisi x, y ke arah d dari A" ke B dan C.
Underflow

Jawaban:


20

Anda tidak dapat menerapkan efek kilau tanpa membuatnya mudah dieksploitasi ... tetapi bagaimana jika Anda menggunakan cara tidak langsung untuk menunjukkan bahwa seseorang ada di sekitar, cara yang juga berlaku untuk pemain yang terlihat?

Sebagai contoh, bagaimana jika pemain meninggalkan jejak kaki, dan pesan "jejak jejak dibuat" dikirim dari server terlepas dari lokasi pemain? Setiap pemain meninggalkan jejak kaki sehingga Anda tidak dapat membuat model jejak lebih terlihat tanpa menutupi arena di dalamnya dan membuat setiap orang cetak kurang terlihat, tetapi jika seorang pemain melihat jejak muncul tanpa karakter yang terlihat mereka tahu ada seseorang di sana.

Anda juga dapat melakukan hal-hal seperti memiliki kerikil kecil yang terguling-guling, gemerisik rumput ketika seseorang berjalan melewatinya, atau riak yang muncul ketika seseorang bergerak melalui air. Jika 'tanda' hanya berlaku untuk lokasi atau bahan tertentu, ini dapat menambah strategi tambahan yang memaksa karakter yang tak terlihat bergerak dengan hati-hati dan menghindari hal-hal yang akan memberikan posisi mereka.


without making it easy to exploit-> Ini berlaku untuk semua mekanik game, bukan hanya yang ini.
S. Tarık Çetin

12
Mengenai paragraf terakhir: Ingatlah bahwa ketika pemain yang tidak terlihat adalah satu - satunya yang menyebabkan hal-hal ini terjadi, maka Anda memberikan informasi yang berguna untuk peretasan. Tetapi Anda juga dapat memicu masing-masing dari waktu ke waktu melalui peristiwa acak atau aksi pemain lainnya. Itu akan menghasilkan suara yang mengganggu retasan dan memiliki efek samping yang bagus untuk membuat lingkungan tampak jauh lebih hidup dan dinamis.
Philipp

2
Ini ide yang sangat menarik, terima kasih! Dalam hal 'jejak kaki', ini bahkan mungkin memberi hadiah kepada pemain sembunyi-sembunyi untuk 'berjalan di dalam' langkah kaki (lama) target mereka, membuat menyelinap ke orang lain lebih realistis (yaitu datang dari belakang). Bahkan jika seseorang membuat tekstur footstep (atau apa pun yang Anda miliki) lebih jelas, melangkah di dalamnya akan (mungkin) hanya menyegarkan durasi tampilan.
Underflow

3
Tentu saja, dalam hal ini peretasan sisi klien dapat dilakukan untuk menunjukkan trek mana yang baru.
Muhd

3
Peretasan sisi klien dapat menyoroti jejak kaki yang dibuat di wilayah yang tidak sesuai dengan lokasi pemain.
Edward Coffey

31

Ketika Anda melihat pertanyaan lain yang tak terhitung jumlahnya tentang mencegah kecurangan dalam permainan multi-pemain yang ada di situs ini, Anda akan dengan mudah melihat bahwa sebenarnya tidak ada langkah teknis untuk mencegah kecurangan dari sisi klien.

Yang bisa Anda lakukan adalah memberikan lebih sedikit informasi tentang entitas berjubah. Semua klien perlu tahu untuk membuat efek distorsi adalah bahwa ada sesuatu yang terselubung pada posisi itu. Tetapi tidak perlu tahu apa-apa tentang itu, seperti apa tepatnya, berapa banyak kesehatan yang tersisa dan apa yang dilakukannya sekarang. Bergantung pada gim Anda, itu saja bisa menjadi defisit informasi yang mengubah gim bagi pemain.


6
Dengan "informasi yang kurang" juga datang "informasi yang kurang akurat". Pilih offset (katakanlah) 10 kaki dalam arah acak tunggal yang disimpan di sisi server dan kirim lokasi itu sebagai gantinya. Dalam pertemuan acak lainnya, tambahkan karakter berkilauan palsu "Apakah Anda melihat itu? Saya pikir saya melihat sesuatu di sana."
Keeta - mengembalikan Monica

2
@Etaeta jika Anda menggunakan ini, Anda akan ingin melakukan smoothing (yaitu, tidak menghasilkan nilai sepenuhnya acak setiap kali) baik dengan filter sinyal atau dengan beberapa jenis Random Walk menuju arah entitas. Jika terlalu gelisah maka itu sangat jelas bagi mata, jadi Anda harus menyeimbangkan kemampuan pemain untuk disembunyikan selama gerakan dan disembunyikan saat tetap diam. Yang terakhir akan dan harus lebih efektif.
Nate Diamond

@NateDiamond Ya, tepatnya. Itu sebabnya saya menyatakan bahwa server membuat offset spesifik dari lokasi sebenarnya. Kemudian, saat aktor sebenarnya bergerak, offset akan menyebabkan shimmer juga bergerak. Dengan memperhatikan dengan cermat kilau saat bergerak, Anda dapat menyimpulkan di mana aktor sebenarnya berada, tetapi itu membutuhkan beberapa pekerjaan. Jika tembus pandang itu nyata, dan menyebabkan kilau ini dalam kehidupan nyata, saya membayangkan fokus ekstra inilah yang dibutuhkan untuk mengatasi tembus pandang itu.
Keeta - mengembalikan Monica

Ada modifikasi yang menarik, dan satu-satunya yang benar-benar berfungsi, dari ioquake3 untuk membuat server anti-dinding . Idenya adalah untuk memeriksa sisi server apakah pemain A dapat melihat pemain B lainnya (yaitu, tidak ada dinding atau pemisahan lain yang menghalangi tampilan) sebelum memutuskan apakah pemain A harus menerima informasi posisi B. Ini telah terbukti sangat efektif terhadap Wallhacks, karena mereka dianggap tidak berguna. Jadi intinya adalah bahwa satu-satunya cara untuk memastikan bahwa tidak ada yang memanipulasi data adalah tidak memberi mereka informasi sama sekali.
Gaborous

@ rumit itu adalah pemeriksaan mahal yang harus dilakukan, terutama untuk setiap pemain di setiap tick. Ini mungkin merupakan pengeluaran yang berharga, tetapi merupakan sesuatu yang harus dipertimbangkan pengembang dalam biaya dan kemampuan server.
Nate Diamond

1

Ya, informasi apa pun yang Anda kirim ke klien, dapat ditampilkan lebih jelas daripada yang Anda maksudkan. Tapi ini triknya:

Mitigasi dampaknya

Tentu, klien mungkin memiliki beberapa informasi, tetapi dengan memikirkan dengan hati-hati informasi apa yang ingin Anda bagikan, dan tentang apa yang dapat dilakukan oleh para pemain, Anda setidaknya dapat mengurangi dampak peretasan klien.

1. Apa yang diamati pemain?

  1. Anda melihat karakter dengan karakteristik di tempat: Dalam hal ini klien akan memiliki semua informasi dan peretasan dapat dengan mudah membatalkan jubah
  2. Anda melihat sesuatu di tempat: Dalam hal ini klien memiliki informasi lokasi. Itu dapat membuat lokasi menjadi jelas tetapi informasi lain masih harus disembunyikan.
  3. Anda mengamati sesuatu tetapi tidak di tempat

Sebuah. Anda melihat sesuatu tetapi tidak di tempat (Bridge atau semak bergerak, tetapi besar sehingga Anda tidak tahu ke mana harus membidik; langkah kaki hanya menjadi terlihat dengan penundaan 2 detik): Dalam hal ini klien hanya tahu bahwa ada sesuatu, tetapi tidak di mana / apa tepatnya.

b. Anda mengamati sesuatu dengan cara yang berbeda (berbunyi jika ada sesuatu di daerah; indikasi kedekatan seperti radar dengan atau tanpa arah)

Tangkapan layar dalam pertanyaan tampaknya berada di antara 1 dan 2 karena mungkin didasarkan pada informasi yang terbatas, tetapi Anda masih melihat garis besar yang dapat memberikan beberapa informasi.

2. Apa yang bisa dilakukan pemain?

Misalkan Anda berpikir seseorang berada di koordinat XY, apa yang dapat Anda lakukan? Berikut ini beberapa pilihan umum:

Menyerang

  1. Anda dapat menyerangnya seolah dia tidak berjubah
  2. Anda dapat menyerangnya dengan serangan / perangkap AOA yang tidak membuka dirinya atau tidak
  3. Anda dapat secara aktif membuka jubahnya dan hanya menyerangnya setelah itu
  4. Anda tidak bisa menyerangnya sama sekali

Bergerak

  1. Ketika Anda mulai bergerak, Anda melihat bahwa mesin secara misterius membawa Anda pada jalan memutar
  2. Anda mulai berjalan menuju tujuan Anda secara normal, tetapi ketika Anda mencapai karakter tersembunyi Anda bergerak di sekelilingnya atau berhenti
  3. Anda tidak diblokir oleh karakter tersembunyi

Jika pemilihan rute biasanya dilakukan sisi klien


Terima kasih atas masukan Anda. Saya berencana membiarkan orang 'menabrak' karakter yang tidak terlihat, karena itu adalah sesuatu yang dapat dihitung dan ditangani oleh server. Gagasan bunyinya rapi, dan mengubah bunyi dengan cara yang halus (ketegangan, pikirkan Rahang ) akan keren tetapi bukankah itu juga dapat dengan mudah diganti dengan misalnya file suara yang lebih keras atau bahkan file suara yang mengatakan BEBERAPA SATU TUTUP ADALAH TERTUTUP ?
Underflow

1
Gagasan lain di sepanjang garis 'a': Kilau bisa muncul secara acak muncul di suatu tempat di dekat pemain berjubah, tetapi tidak di lokasi yang tepat. Jika server hanya mengirim posisi shimmer, klien tidak bisa melakukan banyak rekayasa terbalik. Bahkan, bahkan jika pemain berjubah benar-benar terlihat ini masih akan berfungsi sebagai mekanik.
Jezzamon

1
@ Jozzamon ya, semacam mekanik 'perpindahan' juga akan keren. Namun, dalam situasi jubah yang tidak akan berhasil: Saya tidak ingin menghukum pemain yang mencari berkilauan; mereka harus memiliki lokasi 'tepat' berkilauan untuk mengarahkan misalnya skillshots.
Underflow

-2

Efek riak dapat dilakukan melalui kode shader. Anda dapat menonaktifkan penggunaan tekstur dalam mode ini sehingga perubahan tekstur sederhana tidak lagi menjadi masalah.

Dalam 3D, ketika model mulai dimainkan, Anda masih bisa mengubah shader menjadi yang mensimulasikan refraksi, menggunakan permukaan model saja, membuang warnanya. Bahkan ketika model diganti entah bagaimana, efeknya tetap ada.

Memodifikasi shader yang telah dikompilasi sebelumnya akan sama sulitnya dengan memodifikasi kode gim dan saya pikir ini satu tingkat lebih sulit daripada beberapa pencarian tekstur dalam file gim.


3
Anda melewatkan pertanyaan aktual. Itu bukan tentang bagaimana membuat efek distorsi seperti itu secara teknis. Itu tentang bagaimana memberi klien informasi di mana memberikannya tanpa memberikan informasi yang bermanfaat yang bisa diungkapkan kepada pemain.
Philipp

1
Yah, aku alamat ini: Which means that players that change the texture or model or even the game code itself could render the cloak mechanic useless. Dan saya tidak mengerti mengapa saya melewatkan pertanyaan itu whether there is some way to implement cloaking (with a 'shimmer', à la HotS), without having the issue that crafty players can modify the game (data) . A: Ini iklan terselubung dengan shimmer, B: lebih sulit untuk memodifikasi daripada perubahan tekstur sederhana. DI MANA untuk membuat sebenarnya adalah sisi lain. Jika posisi adalah satu-satunya hal yang kita perlukan untuk menerapkan efek riak sekitar, itu harus menjadi satu-satunya data yang dikirim ke pemain.
Mars

2
Saya telah mengembangkan peretasan sisi klien di masa lalu. Gagasan bahwa lebih sulit untuk memodifikasi shader sangat, sangat menyesatkan. Ya itu menghentikan bentuk serangan paling mendasar yang mungkin, tetapi siapa pun dengan Google-fu yang layak bisa mengetahuinya dalam satu sore. Sekarang gabungkan permainan Anda dengan peretas yang baik dan lihat berapa lama sampai mereka memenuhi kebaikan klien.

Salin dan tempel komentar Anda ke setiap jawaban di sini, karena apa pun sisi klien dapat dieksploitasi. Saya tahu itu tidak sulit untuk memodifikasi kode (ada bot, retas, mod dalam game AAA), tetapi saya merasa lebih mudah untuk mencari tekstur semi-transparan dalam file game daripada mencari instruksi spesifik dari efek riak shader. Tentu saja jika file shader berupa teks biasa dan nyaris tidak di-zip, maka bahkan anak kecil pun dapat merusaknya. Saya hanya memberikan jawaban, yang dapat dikombinasikan dengan "lebih sedikit data yang dikirimkan ke pemain" satu untuk memberikan tingkat keamanan yang layak. Saya benar-benar tidak tahu apa yang salah dengan itu, karena memberikan solusi yang sebenarnya
Mars

@Thebluefish dalam keadilan, ini karena pengembang pindah dari menghabiskan sumber daya yang mencoba berhenti curang, dan alih-alih menghabiskan sumber daya pada metode yang sangat rumit, tidak jelas, dan dibangun dengan baik untuk mendeteksi cheat dan langsung melarang pemain yang menyinggung dari platform mereka ... (jelas lihat sistem seperti Steam's VAC).
Trotski94
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.