İstemci tarafındaki saldırılara direnen görsellerle çok oyunculu gizlemeyi nasıl uygulayabilirim?


19

Çok oyunculu bir oyunda gizliliği uygulamayı düşünüyorum. Bu bir MOBA tarzı oyun, bu yüzden League of Legends (LoL) ve Heroes of the Storm (HotS) düşünün. Birden çok istemci, oyun durumunu tüm istemcilere yayınlayan tek bir sunucuya bağlanır. İstemciler giriş verilerini sunucuya gönderir, bu da geçersiz komutlarla karşılaştığında reddedebilir ve böylece hile yapmayı imkansız hale getirir (teoride).

Şimdi, bu oyunlardan bilerek bahsediyorum çünkü ikisi de gizliliği farklı uyguladı. LoL iki olası durumla gizlidir: tamamen görünür veya tamamen görünmezsiniz. Öte yandan HotS, gizliliği havada bir ışıltı ile anlatabileceğiniz şekilde uygular:

Fırtına Kahramanları Görünmezliği

Bence bu çevrenize dikkat ederek düzgün bir mekaniktir. Ancak, bu çok oyunculu bir oyun, bunun kolayca sömürülebileceğini fark etmemi sağladı.

Gizliliği 'LoL' tarzında uyguladığınızda, diğer istemcilere oyuncu koordinatları göndermeyi durdurabilirsiniz. Oyuncunun karakteri gizliliği bozduğunda, sunucu konumu yeniden yayınlayabilir. Ancak, HotS modelinde, karakterin hareket ettiği havada bir parıltı görülebilir. Bu, sunucunun oynatıcının konumunu diğer istemcilere göndermesi gerektiği anlamına gelir. Bu, dokuyu veya modeli veya oyun kodunun kendisini değiştiren oyuncuların pelerin mekaniğini işe yaramaz hale getirebileceği anlamına gelir. İşte bu konuda HotS panolarında bir konu .

Benim sorum, kurnaz oyuncuların oyunu (verileri) değiştirebileceği ve 'sistemi yenebileceği' sorunu olmadan, gizleme ('ışıltı', à la HotS ile) uygulamanın bir yolu olup olmadığıdır . Bu mümkün mü ve eğer değilse, bu tamirciyle diğer çok oyunculu oyunlar bununla nasıl başa çıkıyor? Sadece LoL görünmezlik tarzı ölçülemez mi?

Sunucunun ara sıra sahte 'pelerin' konumları göndermesini düşündüm, ancak bu aynı zamanda sadece dikkat eden adil oyunculara da zarar veriyor, bu da olmayacak.


İlgili bağlantı , ama başkalarına (sunucu tarafından ele alınabilir) darbeleme hakkında değil, daha ziyade pelerinli birimleri görüntüleme hakkında soruyorum.
Underflow

Bu kötü bir öneri, ancak sunucudaki tüm grafik oluşturma işlemlerini yapabilir, ardından her oyuncu ekranını istemcilerine yayınlayabilirsiniz. Sadece girdi gönderiyorlar, sadece çıktı gönderiyorlar. İstemci, yalnızca videoyu görüntüleyen ve sesi çalan ince bir kabuktur.
user137

Philipp'in çok iyi bir fikri var. Hala sınırlayıcı kutular ve bunların beceri görüntüleri vb. İle kesişiminin farkında olmanız gerektiğini eklemek istiyorum. Sınırlayıcı kutular gönderiyorsanız, akıllı bir kodlayıcı hangi karakterin görünmez olduğunu tersine çevirebilir (farklı kahramanlar varsa). İsabetle tetiklenen herhangi bir efektiniz varsa, kutu gibi bir şey veya en azından efektin konumu ve ölçeği göndermeniz gerekir. Daha soyut olan her şeyin daha fazla olduğunu unutmayın
Greaka

Oyuncu koordinatlarını göndermeyi durdurarak aslında LoL tarzı gizleme uygulayamazsınız. Karakterler çizilmese bile harita ile (ve diğer oyuncularla) başka şekillerde etkileşime girebilmeleri gerekir. Ancak "algılanabilir" gizlilik (ayak izleri, ışıltılar, vb.) Uygulamak, oyunu yine de modifiye etme derdinden kurtulmak için teşvikin çoğunu ortadan kaldırır: gizlenmiş karakterleri nasıl tespit edeceğinizi ve nasıl ilerleyeceğinizi öğrenirsiniz.
Spooniest

2
@TheSpooniest: Ne demek istediğini açıklayabilir misin Oyuncu koordinatlarını göndermeyi durdurarak aslında LoL tarzı gizlemeyi uygulayamazsın ? A oyuncusu görünmezse ve sunucu artık koordinatları B ve C oyuncularına göndermiyorsa, sunucu yine de B karakterini A'nın üstüne taşımayı reddederek (A yürüdüğü gibi) A ve B oyuncuları arasındaki çarpışmayı kaldırabilir. bir duvara). Bir (hala görünmez) B bir beceri patlar, sunucu sadece "beceri konumu ateş gönderebilir x, y yönünde , d B ve C A"
Boşalması

Yanıtlar:


20

Sömürmeyi kolaylaştırmadan bir ışıltı efekti uygulayamazsınız ... ama ya birinin etrafta olduğunu göstermek için dolaylı bir araç kullandıysanız, görünür oyuncular için de geçerli olan bir araç ne olacak?

Örneğin, oyuncular ayak izlerini terk ederse ve "ayak izi oluşturuldu" mesajları, oynatıcı konumundan bağımsız olarak sunucudan gönderilirse ne olur? Her oyuncu ayak izleri bırakır, böylece ayak izi modelini içlerindeki arenaları örtmeden ve her bireysel baskıyı daha az farkedilir hale getiremezsiniz, ancak bir oyuncu bir ayak izi görürse görünür bir karakter olmadan birisinin orada olduğunu bilir.

Ayrıca, çalınan küçük çakıl taşları, biri yürürken çimin hışırdaması veya birisi suyun içinde hareket ettiğinde ortaya çıkan dalgalanmalar gibi şeyler de yapabilirsiniz. Eğer 'işaretler' sadece belirli konumlar veya materyaller için geçerliyse, bu görünmez karakterleri dikkatli hareket etmeye zorlar ve konumlarını bozacak şeylerden kaçınır.


without making it easy to exploit-> Bu sadece bu oyun için değil, tüm oyun mekanikleri için geçerlidir .
S. Tarık Çetin

12
Son paragrafla ilgili olarak: Görünmez bir oyuncu bu şeylerin gerçekleşmesine neden olan tek şey olduğunda, o zaman hack'ler için yararlı olan bilgileri sağladığınızı unutmayın. Ancak, rastgele olaylarla veya diğer oyuncu eylemleriyle de her birini tetikleyebilirsiniz. Bu, saldırıyı dağıtan ve ortamın çok daha canlı ve dinamik görünmesini sağlamak için güzel bir yan etkiye sahip olan gürültü üretecektir.
Philipp

2
Bu çok ilginç bir fikir, teşekkürler! 'Ayak izleri' durumunda, bu gizli oyuncuları hedeflerinin (eski) ayak izlerini 'içinde yürümek' için ödüllendirebilir ve diğerlerine gizlice girmeyi daha gerçekçi hale getirir (yani arkadan gelir). Birisi ayak sesi dokularını (veya neyin var) daha belirgin hale getirmiş olsa bile, onlara adım atmak sadece belki de görüntüleme süresini yenileyecektir.
Boşalma

3
Tabii ki, bu durumda, hangi parçaların taze olduğunu göstermek için bir müşteri tarafı kesmek yapılabilir.
Muhd

3
İstemci tarafındaki saldırı, bir oynatıcının konumuna karşılık gelmeyen bölgelerde oluşturulan ayak izlerini vurgulayabilir.
Edward Coffey

31

Bu sitede bulunan çok oyunculu oyunlarda hile önleme ile ilgili sayısız diğer sorulara baktığınızda, müşteri taraflı hile yapmayı önlemek için gerçekten teknik bir önlem olmadığını kolayca göreceksiniz.

Tek yapabileceğiniz gizlenmiş varlık hakkında daha az bilgi sağlamaktır . Bozulma etkisini yaratmak için tüm müşterinin bilmesi gereken , bu konumda gizlenmiş bir şey olmasıdır. Ancak, bunun tam olarak ne olduğu, ne kadar sağlık kaldığı ve şu anda ne yaptığı gibi belirli bir şey bilmesine gerek yok. Oyununuza bağlı olarak, bu tek başına oyuncu için oyunu değiştiren bir bilgi açığı olabilir.


6
"Daha az bilgi" ile "daha az doğru bilgi" de gelir. Sunucu tarafında tutulan rastgele bir yönde 10 feet ofset (diyelim) seçin ve bunun yerine bu konumu gönderin. Rasgele başka karşılaşmalarda, sahte parıldayan karakterler ekleyin. "Bunu gördün mü? Orada bir şey gördüğümü sanıyordum."
Keeta - Monica

2
@Keeta bunu kullanırsanız, bir sinyal filtresi veya varlığın yönüne doğru bir çeşit Rastgele Yürüyüş ile bir miktar düzleştirme (yani her seferinde tamamen rastgele bir değer üretmemek) isteyeceksiniz. Çok gerginse, göz için gerçekten açıktır, bu nedenle oyuncunun hareket sırasında gizlenebilme ve hareketsiz kalırken gizlenebilme yeteneğini dengelemeniz gerekir. İkincisi daha etkili olacak ve olmalıdır.
Nate Diamond

@NateDiamond Evet, kesinlikle. Bu yüzden sunucunun gerçek konumun belirli bir ofsetini oluşturduğunu belirtiyorum. Ardından, gerçek aktör hareket ettikçe, ofset ışıltıyı da hareket ettirecektir. Pırıltıyı hareket ederken dikkatlice izleyerek, gerçek aktörün nerede olduğunu çıkarabilirsiniz, ancak bu biraz çalışma gerektirir. Görünmezlik gerçek olsaydı ve gerçek hayatta bu ışıltıya neden olsaydı, bu ekstra odağın, görünmezliğin üstesinden gelmek için tam olarak gerekli olan şey olduğunu hayal ediyorum.
Keeta - Monica

Wallhack korumalı bir sunucu yapmak için ioquake3'te ilginç bir değişiklik yapıldı ve gerçekten işe yarayan tek şey vardı . Fikir, A oyuncunun B'nin konum bilgisini alıp almayacağını karar vermeden önce A oyuncunun başka bir B oyuncusunu (ör., Duvarları veya başka bir ayrımı görüp göremediğini) kontrol etmekti. işe yaramaz hale getirildiklerinden. Sonuç olarak, hiç kimsenin verileri manipüle etmemesini sağlamanın tek yolu onlara hiç bilgi vermemektir.
gaborous

@gaborous, özellikle her kene için her oyuncu için pahalı bir çek. Bu çok değerli bir masraf olabilir, ancak geliştiricinin sunucunun maliyeti ve yeteneklerinde dikkate alması gereken bir şeydir.
Nate Diamond

1

Evet, müşteriye gönderdiğiniz tüm bilgiler istediğinizden daha açık bir şekilde gösterilebilir. Ama işte püf noktası:

Etkiyi azaltın

Elbette, müşterinin bazı bilgileri olabilir, ancak hangi bilgileri paylaşmak istediğinizi ve oyuncuların onunla neler yapabileceğini dikkatli bir şekilde düşünerek en azından istemci saldırılarının etkisini azaltabilirsiniz.

1. Oyuncu ne gözlemliyor?

  1. Yerinde karakterleri olan karakteri görüyorsunuz: Bu durumda müşteri tüm bilgilere sahip olacak ve hackler pelerini geri alabilir
  2. Yerinde bir şey görüyorsunuz: Bu durumda istemcinin konum bilgileri vardır. Konumu belirginleştirebilir, ancak diğer bilgiler hala gizlenmelidir.
  3. Bir şey gözlemliyorsun ama o noktada değil

a. Bir şey görüyorsunuz ama yerinde değil (Köprü veya çalı hareket ediyor, ancak büyük, nerede nişan alacağınızı bilmiyorsunuz; ayak sesleri sadece 2 saniyelik bir gecikmeyle görünür hale geliyor): Bu durumda müşteri yalnızca bir şey, ama tam olarak nerede / ne değil.

b. Bir şeyi farklı bir şekilde gözlemlersiniz (bölgede bir şey varsa ses; yönlü veya yönsüz bir radar gibi yakınlık göstergesi)

Sorgudaki ekran görüntüsü muhtemelen sınırlı bilgiye dayalı olduğu için 1 ile 2 arasında görünüyor, ancak yine de bazı bilgileri verebilecek anahatları görüyorsunuz.

2. Oyuncu ne yapabilir?

Birisinin XY koordinatında olduğunu düşündüğünüzü varsayalım, ne yapabilirsiniz? İşte bazı tipik seçenekler:

saldırma

  1. Gizlenmiş gibi ona saldırabilirsiniz
  2. Onu açıp kapatan AOA saldırıları / tuzakları ile ona saldırabilirsiniz
  3. Aktif olarak kilidini açabilir ve daha sonra ona saldırabilirsiniz
  4. Ona saldıramazsın

Hareketli

  1. Hareket etmeye başladığınızda, motorun gizemli bir şekilde sizi dolambaçlı yoldan aldığını fark ettiniz
  2. Normalde hedefinize doğru yürümeye başlarsınız, ancak gizli karaktere ulaştığınızda onun etrafında hareket edersiniz veya durursunuz
  3. Gizli karakter tarafından engellenmiyorsun

Rota seçimi normalde istemci tarafında yapılırsa


Giriş için teşekkürler. İnsanların görünmez karakterlere 'çarpmalarına' izin vermeyi planlıyordum, çünkü bu sunucunun hesaplayabileceği ve işleyebileceği bir şey. Ses fikri düzgün ve ince bir şekilde sesi değiştirmek (gerginlik, Jaws düşünün ) serin olurdu, ancak bu aynı zamanda kolayca daha yüksek ses dosyası veya hatta bir ses dosyası ile söylenemez mi?
Underflow

1
'A' çizgisi boyunca başka bir fikir: Bir ışıltı, gizlenmiş oyuncunun yakınında bir yerde rastgele görünebilir, ancak tam olarak yerinde olmayabilir. Sunucu ışıltı konumunu gönderirse, istemci bu konuda çok fazla ters mühendislik yapamaz. Aslında, gizlenmiş oyuncu tamamen görünse bile bu hala bir tamirci olarak işlev görür.
Jezzamon

1
@Jezzamon evet, bir tür 'yer değiştirme' tamircisi de harika olurdu. Ancak, işe yaramayacak pelerin durumunda: Parıldama arayışında olan oyuncuları cezalandırmak istemiyorum; örneğin beceri görüntülerini hedeflemek için parıldayanın 'tam' konumuna sahip olmaları gerekir.
Underflow

-2

Dalgalanma etkisi gölgelendirici kodu ile yapılabilir. Bu modda doku kullanımını devre dışı bırakabilirsiniz, böylece basit doku değişikliği artık sorun olmaz.

3D'de, model oyuna girdiğinde, gölgelendiriciyi sadece modelin yüzeyini kullanarak rengi atarak kırılmayı simüle eden biriyle değiştirebilirsiniz. Model bir şekilde değiştirilse bile, etki devam eder.

Önceden derlenmiş gölgelendiriciyi değiştirmek oyun kodunu değiştirmek kadar zor olurdu ve oyun dosyalarındaki bazı doku aramalarından bir seviye daha zor olduğunu düşünüyorum.


3
Asıl soruyu kaçırdınız. Teknik olarak böyle bir çarpıtma etkisinin nasıl oluşturulacağıyla ilgili değildi. Müşteriye, oyuncuya gösterebileceği yararlı bilgiler vermeden nerede bilgi verileceği bilgisini vermekle ilgiliydi.
Philipp

1
Eh, bu adrese: Which means that players that change the texture or model or even the game code itself could render the cloak mechanic useless. Ve soruyu neden özlediğimi anlamıyorum 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: Işıltı ile gizleme reklamlar, B: değiştirmek basit doku değişiminden daha zordur. NEREDE yaratılacağı başka bir taraf. Etrafa dalgalanma efekti uygulamak için ihtiyacımız olan tek şey konum ise, oyuncuya gönderilen tek veri olmalıdır.
Mars

2
Geçmişte müşteri tarafı korsanlıkları geliştirdim. Gölgelendiricileri değiştirmenin daha zor olduğu fikri çok ama çok yanıltıcıdır. Evet, mümkün olan en temel saldırı biçimini durdurur , ancak iyi Google-fu'ya sahip herkes öğleden sonra bunu çözebilir. Şimdi oyununuzu iyi bir hacker'a karşı oynayın ve istemci tarafı hileli iyiliği dolana kadar ne kadar sürdüğünü görün.

İstemcinin istediği herhangi bir şeyden yararlanabileceğiniz için yorumunuzu her cevaba kopyalayıp yapıştırın. Kod değiştirmenin o kadar zor olmadığını biliyorum (AAA oyunlarında botlar, hackler, modlar var), ancak oyun dosyalarında yarı saydam doku aramayı gölgelendirici dalgalanma efektinin belirli talimatlarını aramaktan daha kolay buluyorum. Elbette gölgelendirici dosyaları düz metinse ve zar zor sıkıştırılmışsa, bir çocuk bile onu kırabilir. Sadece iyi bir güvenlik seviyesi sağlamak için "oyuncuya daha az veri geçti" ile birleştirilebilen bir cevap verdim.Gerçek bir çözüm sağladığı için gerçekten neyin yanlış olduğunu bilmiyorum
Mars

@ Adaletteki balıklar, bunun nedeni, geliştiricilerin hileyi durdurmaya çalışan kaynakları harcamaktan uzaklaşmaları ve bunun yerine kaynakları hileleri tespit etmek ve oyuncuları platformlarından açıkça yasaklayan açıkça kıvrık yöntemlerle harcamak ... (açıkçası) Steam'in VAC gibi sistemlerine başvurunuz).
Trotski94
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.