Jak mogę wdrożyć maskowanie dla wielu graczy za pomocą elementów graficznych odpornych na hakowanie po stronie klienta?

19

Zastanawiałem się nad wprowadzeniem skradania w grze wieloosobowej. To gra w stylu MOBA, więc pomyśl o League of Legends (LoL) i Heroes of the Storm (HotS). Wielu klientów łączy się z jednym serwerem, który nadaje stan gry wszystkim klientom. Klienci wysyłają swoje dane wejściowe do serwera, który może je odrzucić w przypadku napotkania nieprawidłowych poleceń, uniemożliwiając w ten sposób oszustwo (teoretycznie).

Teraz wspominam o tych grach celowo, ponieważ obie implementowały podstępnie inaczej. LoL ma podstęp z dwoma możliwymi stanami: jesteś albo całkowicie widoczny, albo całkowicie niewidoczny. Z drugiej strony HotS implementuje podstęp w taki sposób, że migotanie w powietrzu pozwala stwierdzić:

Niewidzialność Heroes of the Storm

Myślę, że to fajna mechanika, ponieważ promuje / nagradza zwracając uwagę na twoje otoczenie. Jednak ta gra wieloosobowa uświadomiła mi, że można ją łatwo wykorzystać.

Po zastosowaniu ukrycia w „LoL” możesz po prostu przestać wysyłać współrzędne gracza do innych klientów. Gdy postać gracza przerywa skradanie się, serwer może ponownie nadać lokalizację. Jednak w modelu HotS migotanie można zobaczyć w powietrzu, w którym porusza się postać. Oznacza to, że serwer musi wysyłać lokalizację gracza do innych klientów. Co oznacza, że ​​gracze, którzy zmieniają teksturę lub model, a nawet sam kod gry, mogą uczynić mechanikę płaszcza bezużyteczną. Oto wątek na płytach HotS na ten temat.

Moje pytanie brzmi: czy istnieje jakiś sposób na wdrożenie maskowania (z „migotaniem”, à la HotS), bez problemu, że przebiegli gracze mogą modyfikować grę (dane) i „pokonać system”. Czy to możliwe, a jeśli nie, jak radzą sobie z tym inne gry wieloosobowe z tą mechaniką? Czy tylko styl niewidzialności LoL jest nie do pokonania?

Myślałem o tym, aby serwer co jakiś czas wysyłał fałszywe lokalizacje „peleryny”, ale szkodzi to również uczciwym graczom, którzy tylko zwracają uwagę, więc nie zrobi tego.

Niedomiar
źródło
Powiązany jest link , ale nie pytam o wpadanie na innych (które może obsłużyć serwer), ale raczej wyświetlanie ukrytych jednostek.
Niedomiar
Jest to zła sugestia, ale można wykonać wszystkie renderowanie graficzne na serwerze, a następnie przesłać ekran każdego gracza do jego klientów. Wysyłają tylko dane wejściowe, a Ty tylko dane wyjściowe. Klient jest cienką powłoką, która po prostu wyświetla wideo i odtwarza dźwięk.
użytkownik137
Philipp ma tam bardzo dobry pomysł. Chcę dodać, że nadal musisz być świadomy granic pól i ich przecinania z umiejętnościami itp. Jeśli wysyłasz ramki granic, inteligentny koder może odwrócić inżynier, która postać jest niewidoczna (jeśli są różni bohaterowie). Jeśli masz jakieś efekty, które aktywują się przy trafieniu, będziesz musiał wysłać cokolwiek takiego jak pudełko lub przynajmniej pozycję i skalę efektu. Pamiętaj, że wszystko bardziej abstrakcyjne to więcej
Greaka
Nie możesz faktycznie wdrożyć maskowania w stylu LoL, zaprzestając wysyłania współrzędnych gracza. Nawet jeśli postacie nie zostaną narysowane, nadal muszą mieć możliwość interakcji z mapą (i innymi graczami) na inne sposoby. Ale wdrożenie „wykrywalnego” ukrycia (ślady stóp, migotanie itp.) Usuwa większość bodźców, by przejść przez trud modyfikowania gry: uczysz się, jak wykrywać ukryte postacie i iść dalej.
Spooniest
2
@TheSpooniest: czy możesz wyjaśnić, co masz na myśli? Tak naprawdę nie możesz wdrożyć maskowania w stylu LoL, zaprzestając wysyłania współrzędnych gracza ? Jeśli gracz A jest niewidoczny, a serwer nie wysyła już współrzędnych do graczy B i C, serwer nadal może poradzić sobie np. Z kolizją między graczami A i B, odmawiając przeniesienia postaci B na A (tak jakby szli w ścianę). Jeśli A (wciąż niewidoczny) strzela umiejętnością do B, serwer może po prostu wysłać „umiejętność wystrzeloną z pozycji x, y w kierunku d z A” do B i C.
Niedomiar

Odpowiedzi:

20

Nie możesz wdrożyć efektu migotania bez ułatwienia wykorzystania ... ale co, jeśli użyjesz pośredniego sposobu pokazania, że ​​ktoś jest w pobliżu, środka, który dotyczy również widocznych graczy?

Na przykład, co jeśli gracze zostawiają ślady stóp, a wiadomości „utworzone ślady stóp” są wysyłane z serwera niezależnie od lokalizacji gracza? Każdy gracz pozostawia ślady, więc nie można uczynić modelu śladu bardziej widocznym bez zasłonięcia areny i uczynienia każdego pojedynczego wydruku mniej zauważalnym, ale jeśli gracz zobaczy ślad śladu bez widocznej postaci, wie, że ktoś tam jest.

Możesz także robić rzeczy, takie jak przewracane małe kamyki, szeleszcząca trawa, gdy ktoś przez nią przechodzi, lub zmarszczki, które pojawiają się, gdy ktoś porusza się w wodzie. Jeśli „znaki” odnoszą się tylko do niektórych lokalizacji lub materiałów, może to dodać dodatkową strategię, która zmusza niewidzialne postacie do ostrożnego poruszania się i unikania rzeczy, które zdradzą ich pozycje.

IndigoFenix
źródło
without making it easy to exploit-> Dotyczy to całej mechaniki gry, nie tylko tej konkretnej.
S. Tarık Çetin
12
Odnośnie ostatniego akapitu: pamiętaj, że gdy niewidzialny gracz jest jedyną rzeczą, która powoduje, że tak się dzieje, wówczas podajesz informacje przydatne w przypadku włamań. Możesz jednak od czasu do czasu aktywować każde z nich poprzez losowe zdarzenia lub inne działania gracza. Powoduje to generowanie hałasu, który odwraca uwagę hacka i ma przyjemny efekt uboczny, sprawiając, że środowisko wydaje się o wiele bardziej żywe i dynamiczne.
Philipp
2
To bardzo ciekawy pomysł, dzięki! W przypadku „śladów stóp” może to nawet nagradzać graczy ukrywających się za „wejście do środka” (starych) kroków celu, dzięki czemu skradanie się do innych jest bardziej realistyczne (tj. Wychodzenie z tyłu). Nawet jeśli ktoś sprawi, że tekstury kroków (lub coś takiego) będą bardziej oczywiste, wejście w nie może (być może) tylko odświeżyć czas wyświetlania.
Niedomiar
3
Oczywiście w tym przypadku można wykonać hack po stronie klienta, aby pokazać, które utwory są świeże.
Muhd
3
Hack po stronie klienta może uwidocznić ślady stóp tworzone w regionach, które nie odpowiadają położeniu gracza.
Edward Coffey,
31

Gdy spojrzysz na niezliczone inne pytania dotyczące zapobiegania oszustwom w grach dla wielu graczy, które są na tej stronie, łatwo zauważysz, że tak naprawdę nie ma technicznego środka, aby zapobiec oszustwom po stronie klienta.

Wszystko, co możesz zrobić, to podać mniej informacji o zamaskowanej istocie. Aby uzyskać efekt zniekształcenia, klient musi tylko wiedzieć, że w tej pozycji jest coś ukrytego. Ale nie musi wiedzieć o tym nic konkretnego, jak dokładnie to, ile pozostało zdrowia i co robi teraz. W zależności od gry sam ten może stanowić przełomowy dla gracza deficyt informacji.

Philipp
źródło
6
„Mniej informacji” oznacza także „mniej dokładne informacje”. Wybierz odsunięcie (powiedzmy) 10 stóp w jednym losowym kierunku, który jest utrzymywany po stronie serwera i wyślij tę lokalizację zamiast tego. W przypadkowych innych spotkaniach dodaj fałszywe migoczące postacie „Widziałeś to? Myślałem, że coś tam widziałem”.
Keeta
2
@Keeta, jeśli z tego skorzystasz, będziesz chciał wykonać pewne wygładzenie (tj. Nie generować za każdym razem całkowicie losowej wartości) albo z filtrem sygnału, albo z jakimś przypadkowym przejściem w kierunku kierunku bytu. Jeśli jest zbyt roztrzęsiony, jest to naprawdę oczywiste dla oka, więc musisz zrównoważyć zdolność gracza do ukrywania się podczas ruchu i ukrywania się podczas pozostawania w bezruchu. Ten ostatni będzie i powinien być bardziej skuteczny.
Nate Diamond
@NateDiamond Tak, dokładnie. Dlatego twierdzę, że serwer tworzy określone przesunięcie rzeczywistej lokalizacji. Następnie, gdy porusza się prawdziwy aktor, przesunięcie spowoduje również przesunięcie migotania. Ostrożnie obserwując migoczący ruch, możesz wydedukować, gdzie jest aktualny aktor, ale to wymaga trochę pracy. Gdyby niewidzialność była prawdziwa i spowodowała migotanie w prawdziwym życiu, wyobrażam sobie, że to dodatkowe skupienie jest dokładnie tym, co byłoby potrzebne do pokonania niewidzialności.
Keeta
Była ciekawa modyfikacja ioquake3, jedyna, która faktycznie działała, aby stworzyć serwer odporny na uderzenia w ścianę . Chodziło o sprawdzenie po stronie serwera, czy gracz A może zobaczyć innego gracza B (tj. Brak ścian lub innego podziału blokującego widok) przed podjęciem decyzji, czy gracz A powinien otrzymać informacje o pozycji B. To okazało się bardzo skuteczne przeciwko hacki do murów, ponieważ stały się bezużyteczne. Najważniejsze jest to, że jedynym sposobem, aby upewnić się, że nikt nie manipuluje danymi, nie jest udzielanie im żadnych informacji.
gaboryczny
@ gaborous jest to jednak kosztowny czek, szczególnie dla każdego gracza przy każdym tyknięciu. Może to być bardzo kosztowny wydatek, ale deweloper będzie musiał wziąć pod uwagę koszt i możliwości serwera.
Nate Diamond,
1

Tak, wszelkie informacje, które wysyłasz do klienta, mogą być pokazywane w bardziej oczywisty sposób niż zamierzałeś. Ale oto sztuczka:

Łagodź wpływ

Jasne, klient może mieć pewne informacje, ale uważnie zastanawiając się, jakie informacje chcesz udostępnić i co gracze mogą z nimi zrobić, możesz przynajmniej złagodzić wpływ włamań do klienta.

1. Co obserwuje gracz?

  1. Na miejscu widzisz postać o charakterystyce: w tym przypadku klient będzie miał wszystkie informacje, a hacki mogą po prostu cofnąć płaszcz
  2. Widzisz coś na miejscu: w tym przypadku klient ma informacje o lokalizacji. Może to uczynić lokalizację oczywistą, ale inne informacje powinny być nadal ukryte.
  3. Obserwujesz coś, ale nie jest to na miejscu

za. Widzisz coś, ale nie jest to na miejscu (most lub krzak porusza się, ale jest duży, więc nie wiesz, gdzie celować; kroki stają się widoczne tylko z 2-sekundowym opóźnieniem): W tym przypadku klient wie tylko, że istnieje coś, ale nie gdzie / co dokładnie.

b. Obserwujesz coś w inny sposób (dźwięk, jeśli coś znajduje się w okolicy; wskazanie bliskości jak radar z kierunkiem lub bez)

Zrzut ekranu w pytaniu wydaje się mieć wartość od 1 do 2, ponieważ prawdopodobnie opiera się na ograniczonych informacjach, ale nadal widzisz zarys, który mógłby dostarczyć pewnych informacji.

2. Co może zrobić gracz?

Załóżmy, że uważasz, że ktoś koordynuje XY. Co możesz zrobić? Oto kilka typowych wyborów:

Napadający

  1. Możesz go zaatakować, jakby nie był ukryty
  2. Możesz atakować go atakami / pułapkami AOA, które go odblokowują lub nie
  3. Możesz aktywnie odblokować go i zaatakować go później
  4. Nie możesz go w ogóle zaatakować

W ruchu

  1. Kiedy zaczynasz się poruszać, zauważysz, że silnik w tajemniczy sposób zabiera cię do objazdu
  2. Zaczynasz normalnie podchodzić do celu, ale po dotarciu do ukrytej postaci poruszasz się wokół niej lub zatrzymujesz
  3. Nie zostaniesz zablokowany przez ukrytą postać

Jeśli wybór trasy odbywa się zwykle po stronie klienta

Dennis
źródło
Dzięki za wkład. I tak planowałem pozwolić ludziom „wpaść” w niewidzialne znaki, ponieważ jest to coś, co serwer może obliczyć i obsłużyć. Pomysł na dźwięk jest schludny, a subtelna zmiana dźwięku (napięcie, myślę o szczękach ) byłaby fajna, ale czy nie można go łatwo zastąpić np. Głośniejszym plikiem dźwiękowym lub nawet plikiem głosowym informującym, że NIEKTÓRE ZAMKNIĘCIE JEST STALOWANE ?
Niedomiar
1
Kolejny pomysł w stylu „a”: migotanie może pojawić się losowo gdzieś w pobliżu ukrytego gracza, ale nie w jego dokładnej lokalizacji. Jeśli serwer po prostu wyśle ​​pozycję migotania, klient nie może tak naprawdę zrobić dużo inżynierii wstecznej. W rzeczywistości, nawet jeśli ukryty gracz byłby całkowicie widoczny, nadal działałby jako mechanik.
Jezzamon
1
@Jezzamon tak, mechanika „przemieszczenia” też byłaby fajna. Jednak w sytuacji maskowania, która nie działałaby: nie chcę karać graczy, którzy szukają migotania; musieliby mieć „dokładną” lokalizację migotania, aby celować np. umiejętności.
Niedomiar
-2

Efekt falowania można uzyskać za pomocą kodu modułu cieniującego. Możesz wyłączyć użycie tekstury w tym trybie, aby prosta zmiana tekstury nie była już problemem.

W trybie 3D, gdy model wchodzi w grę, nadal możesz po prostu zmienić moduł cieniujący na taki, który symuluje załamanie, używając samej powierzchni modelu, odrzucając kolor. Nawet po zmianie modelu efekt pozostaje.

Modyfikowanie wstępnie skompilowanego modułu cieniującego byłoby tak samo trudne jak modyfikowanie kodu gry i myślę, że jest o jeden poziom trudniejszy niż wyszukiwanie tekstur w plikach gry.

Mars
źródło
3
Przegapiłeś właściwe pytanie. Nie chodziło o to, jak technicznie stworzyć taki efekt zniekształceń. Chodziło o to, jak przekazać klientowi informacje, gdzie go wyrenderować, bez podawania użytecznych informacji, które może ujawnić graczowi.
Filip
1
Cóż, kieruję to: Which means that players that change the texture or model or even the game code itself could render the cloak mechanic useless. I nie rozumiem, dlaczego przegapiłem pytanie 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) . Odp .: Reklamuje maskowanie migotaniem, B: trudniej jest zmodyfikować niż zwykłą zmianę tekstury. GDZIE faktycznie renderować jest inna strona. Jeśli pozycja jest jedyną rzeczą, którą musimy zastosować efekt tętnienia, powinny to być jedyne dane wysyłane do gracza.
Mars
2
W przeszłości opracowywałem hacki po stronie klienta. Myśl, że trudniej jest modyfikować shadery, jest bardzo, bardzo myląca. Tak, to powstrzymuje najbardziej podstawową możliwą formę ataku, ale każdy z przyzwoitym Google-fu może to rozgryźć po południu. Teraz zmierz się z przyzwoitym hakerem i zobacz, ile czasu zajmuje mu wypełnienie pożytecznej dobroci po stronie klienta.
Skopiuj i wklej swój komentarz do każdej odpowiedzi tutaj, ponieważ można wykorzystać wszystko po stronie klienta. Wiem, że modyfikacja kodu nie jest trudna (w grach AAA są boty, hacki, mody), ale łatwiej jest mi znaleźć półprzezroczystą teksturę w plikach gry niż poszukać szczegółowych instrukcji dotyczących efektu falowania cieniowania. Oczywiście, jeśli pliki modułu cieniującego są zwykłym tekstem i są ledwo skompresowane, to nawet dziecko może je złamać. Właśnie dałem odpowiedź, którą można połączyć z „mniejszą ilością danych przekazywanych do odtwarzacza”, aby zapewnić przyzwoity poziom bezpieczeństwa. Naprawdę nie wiem, co jest z nią nie tak, ponieważ zapewnia faktyczne rozwiązanie
Mars
@Thebluefish w uczciwości, z tego powodu programiści odeszli od wydawania zasobów próbujących przestać oszukiwać, a zamiast tego wydawali zasoby na bardzo zawiłe, niejasne i dobrze zbudowane metody wykrywania oszustw i wprost zakazujące obrażania graczy z ich platform ... (oczywiście odnoszą się do systemów takich jak VAC Steam).
Trotski94,