•  

    Hej.

    Dziś porozmawiamy sobie od strony technicznej czemu cheaty i boty istnieją.

    Większość z nas narzeka na cheaterów, ale czy ktoś z was się zastanowił czemu ten problem istnieje? Zacznijmy od strony twórców gry. Dla zobrazowania problemu zastanówmy się dlaczego cheaty typu wallhack/ESP istnieją. Przykładowo jak to jest możliwe, że ktoś nas widzi przez ściany? Wytłumaczenie tego jest bardzo proste. Serwer przesyła wszystkie dane na temat graczy, gdzie są, jaką mają broń, ile mają punktów życia itp. Z racji, że my mamy dostęp do tych wszystkich danych nie stanowi to teraz dla nas żadnego problemu, żeby te dane odczytać. Albo czemu ktoś potrafi się teleportować w inne miejsce na mapie? Po prostu wysyła się nową pozycję do serwera, a jak serwer tego nie zweryfikuje i jesteśmy w nowym miejscu. Oczywiście przykładów mogłoby być dużo więcej wszystko zależy na co gra pozwala. Jednak można zadać pytanie teleportacja graczy rzadko jest spotykana, czym to może być spowodowane? A no tym, że to jest weryfikowane przez serwer, czyli mogą być dwie możliwości wysyłamy pozycję i serwer sprawdza czy od ostatniego razu zdążylibyśmy przejść taką odległość, albo gra przesyła informację, że idziemy albo biegniemy i serwer na podstawie tego aktualizuje naszą pozycję. Zatem pojawia się pytanie skoro nie można się teleportować, to czemu można znać pozycje wszystkich graczy. Spójrzmy na to od strony serwera, pierwszą rzeczą, którą by trzeba było zrobić to obliczyć odległość pomiędzy innymi graczami, jeśli jakiś gracz byłby od nas za daleko można by było nie przesyłać jego pozycji. Kolejnym i zarazem najtrudniejszym krokiem byłoby sprawdzenie czy jest możliwe, żebyśmy zobaczyli jakiegoś gracza, uwzględniając naszą pozycję, pozycję innego gracza, nasze pole widzenia, oraz przeszkody, które mogą zasłonić przeciwnika. W przypadku map nazwijmy to dynamicznych, gdzie można budować tak jak w Fortnite, ilość możliwych budowli, które mogą zasłonić innych graczy się zwiększa. Jeszcze by pozostawał fakt, przeciwnik jest obok nas, ale zasłania go ściana, no i teraz serwer by musiał wysłać informację w stylu, że w pokoju obok ktoś biega. Dlatego biorąc pod uwagę wydajność serwera, łatwiej, prościej i szybciej jest wysłać pozycje wszystkich graczy i niech po stronie klienta to zostanie odpowiednio przeliczone, kto powinien się pokazać itp. Dlatego twórcy używają anti-cheatów. Wystarczy podać dwa anti-cheaty jakie obecnie są używane BattlEye i VAC. Jednakże są to dwa różne światy. W przypadku BattlEye ciężko spotkać jakiegoś cheatera w grze. Lista gier tutaj https://www.battleye.com które używają tego AC. Natomiast w przypadku VAC jak sama nazwa wskazuje Valve allows cheats, kiedyś się to nazywało Valve Anti-Cheat( ͡° ͜ʖ ͡°). Stąd też tyle cheaterów w takim CS:GO szczególnie, że od niedawna jest za darmo. Ogólnie zadania AC to uniemożliwić zapis i odczyt do/z pamięci gry, oraz modyfikację pakietów sieciowych. W przypadku VAC podobno wystarczy użyć tych funkcji https://msdn.microsoft.com/en-us/library/windows/desktop/ms680553(v=vs.85).aspx i https://msdn.microsoft.com/en-us/library/windows/desktop/ms681674(v=vs.85).aspx to by też wyjaśniało ilość cheaterów w tej grze. Jak to wygląda w przypadku innych AC można przeczytać tutaj https://blog.esea.net/esea-hardware-cheats/ Czyli widać kolosalną różnicę w porównaniu do takiego VAC. Na koniec można zadać pytanie czy da się wyeliminować problem cheaterów? Tutaj nasuwa się odpowiedź streamowanie obrazu gry, ale czy to rozwiąże problem? Czy wtedy komputery będą na tyle wydajne, że będą wstanie przetworzyć obraz i dźwięk i cheaterzy dalej będą mieli wszystkie potrzebne informacje? Czas pokaże.

    #gry #csgo #fortnite #pubg #mmorpg #programowanie #gamedev #bezpieczenstwo #security #makelifegreatagain

    •  

      Komentarz usunięty przez autora

    •  

      @MakeLifeGreatAgain: sorry, ale wymiękłem po kilku zdaniach. Tego się nie da czytać, weź sam spróbuj po napisaniu chociaż raz swoje wypociny przeczytać. Mnóstwo powtórzeń i błędów gramatycznych, stylistyka też leży i kwiczy. Nawet nie chciało Ci się tego na paragrafy rozdzielić...

    •  

      @asunez: No OP nie jest dziennikarzem, ale jesteśmy na wypoku, halo! Serio jesteś aż tak wrażliwy i nie możesz tego czytać przez powtórzenia?

    •  

      @xedarr: Tak, serio. Jeśli by to były sporadyczne błędy to słowem bym się nie zająknął, gdyby to był #gownowpis też. Zakładam jednak, że OP chce prowadzić swego rodzaju bloga, a moje komentarze nie są z palca wyssane i są w stanie pomóc mu pisać lepiej. Nie wiedziałem, że to coś złego pisać konstruktywną krytykę.

    •  

      @MakeLifeGreatAgain:

      Większość z nas narzeka na cheaterów, ale czy ktoś z was się zastanowił czemu ten problem istnieje?

      Bo cheaterzy mają małe ptaszki i muszą się dowartościować. #takaprawda

    •  

      Tutaj nasuwa się odpowiedź streamowanie obrazu gry, ale czy to rozwiąże problem? Czy wtedy komputery będą na tyle wydajne, że będą wstanie przetworzyć obraz i dźwięk i cheaterzy dalej będą mieli wszystkie potrzebne informacje? Czas pokaże.

      @MakeLifeGreatAgain: Nie ma nawet takiej opcji bo byłyby to ogromne pakiety danych przesyłane przez sieć i grałbyś co najwyżej z 1 fpsem jak nie gorzej.
      Jedyny sposób to możliwość zablokowania czytania/edycji pamięci i plików gry. Widać, że coś tam na studiach miałeś o sieciach, ale pewnie nigdy nawet nie napisałeś prostej gry 2D.
      Wszystkie obecne gry sieciowe opierają się na systemie wymyślonym w czasach quake z poprawką wprowadzoną przez twórców CSa tak zgrubsza.

    •  

      @arnoldvon: Technologia się rozwija internet będzie miał coraz lepszą przepustowość i szybkość. Druga sprawa to jak byś chciał zablokować możliwość czytania pamięci? W takim systemie Windows masz warstwy bardziej uprzywilejowane i często są właśnie używane przy pisaniu bypassów. Nie ma gry której nie da się zhackować.

    •  

      @asunez to proszę Cię pokaż parę przykładów gdzie robię błędy i jak je mam poprawić. Bo to, że ktoś powie, że robię błędy mi to nic nie mówi, bo nie wiem, gdzie je robię i jak ja mam wyeliminować. A jak ktoś mi tego nie pokaże, nie wytłumaczy to ja się nie domyślę.

      +: zabrzo
    •  

      @Mazowia: Zablokowanie czytania pamięci jest dużo bardzie realne niż strumieniowanie obrazu. Czemu?
      Wyobraź sobie teraz sytuacje, gdzie na serverze jest 16 graczy. Tylko 16 graczy! Server dla każdego z nich musiałby wyrenderować klatkę kumasz? Ze wszystkimi shaderami w odpowiedniej rozdzielczości. Dla każdego z graczy musiałby liczyć światło, cienie, ewentualnie jakieś cube mapy bo np. w canalsach jest odbicie w wodzie i inne takie rzeczy w zaleśności od frustum view. Jaka technologia by była do tego potrzebna to nie wiem, ale nie masz szans czegoś takiego obecnie zrobić, a jak już ktoś wpadnie na taki pomysł to najpierw puknie się w łeb, bo programowanie opiera się na jak najlepszym i najbardziej optymalnym działaniu i algorytmach. Dobrym przykładem tego typu rzeczy w grach są na przykład Volumetric clouds czy raytracing. Kiedyś nie było kompa, który by płynnie odpalał te demka. Dzisiaj, 15 lat później mamy lepsze komputery, a i tak Volumetric clouds potrafią robić spadki FPSów w grach i dlatego mało gier je w ogóle obsługuje. Także masz odpowiedź.

    •  

      @Mazowia: Już nie wspomnę tutaj o przesyłaniu tekstury w full hd przez sieć. Ok jest to realne, ale póki co przy strumieniowaniu obrazów z kamer można maksymalnie osiągnąć max 2 fpsy.

    •  

      @arnoldvon: daj spokój, strumieniowanie gier już od dawna działa, onlive, geforce now i pewnie jeszcze kilka innych. Serwer może robić dokładnie to samo co teraz ale gra nie działa u ciebie, więc i cheatów nie uruchomisz. W ogóle to nie rozwiązuje problemu, ale skutecznie go omija. Z tym, że przez opóźnienia słabo to się nadaje do szybkich gier multiplayer.

      +: zabrzo
    •  

      @Wu70: A czytałeś jakie są opóźnienia tam? Wielu programistów narzeka, że CSGO jest nadal zbytnio losowy przez opóźnienia nawet na lanie, a Ty proponujesz coś co ma jeszcze większe opóźnienia...

    •  

      @arnoldvon: nie proponuję a mówię, że to już działa i nie trzeba kosmicznej technologii tak jak się rozpisałeś.
      A o opóźnieniach czytałem i testowałem, dlatego napisałem o tym w ostatnim zdaniu.

    •  

      @arnoldvon: Kurła to jest przyszłość i tak będzie. Będziesz płacił za czas i grał na highendowym sprzęcie w przyszłości jak na automatach. Do tego czasu już powstaną cheaty analizujące obraz na bazie ml. Mój pierwszy internet to było marne 8kb/s i ciężko mi było wyobrazić sobie 200mbit/s.

    •  

      @Wu70: No niby działa, ale nie do końca tak jak napisałeś. Żeby to było w ogóle do użytku to potrzebny by był server dla gry + chmura dla graczy, czyli producent musiałby zainwestować sporo kasy żeby wydać w ogóle grę co na pewno nie ma szans. Lepszą opcją byłoby analizowanie każdej klatki gracza na jego komputerze i jest to wykonalne. Pozbycie się spin botów to nie jest jakaś wyższa informatyka tylko proste liczenia i porównywanie jak w podstawówce. W ogóle usunięcia aima z gry jest naprawdę realną i prostą rzeczą.
      Lepszą opcją tutaj pewnie by było właśnie zrobić server który renderuje obraz dla wszystkich graczy jednocześnie i teoretycznie jesteśmy to już w stanie robić od OpenGLa chyba 4.3 albo 4.4, gdzie jest możliwość wywołania compute shadera działającego i liczącego wiele rzeczy jednocześnie - patrz tiled light rendering (lub forward+), więc jak już to bardziej bym kombinował w tą stronę.
      @Mazowia: Nie ma na razie podstaw żeby od razu wysuwać taki wniosek. Jak masz jakąś grę online która działa na zasadzie chmury to daj znać, chętnie zobacze (grę w której producent zapewnia chmure!). Co do renderowania wielo frustumowego mam już potrzebną technologię tylko trzeba ją jeszcze trochę ulepszyć i zwiększyć szybkość internetu.

Gorące dyskusje ostatnie 12h