Dlaczego jedna warstwa nie wystarcza
Większość anticheatów na FiveM opiera się na jednej warstwie wykrywania: albo na stosie klienckim, który wypatruje wstrzykniętych DLL-i, podpiętych API i znanych sygnatur menu, albo na stosie serwerowym, który waliduje eventy i odrzuca niemożliwe zmiany stanu gry. Każda warstwa ma znany sposób zawodzenia. Anticheat wyłącznie kliencki przegrywa w chwili, w której cheat ukryje swój loader przed sprawdzaniem sygnatur. Anticheat wyłącznie serwerowy przegrywa w chwili, w której cheat trzyma się legalnej powierzchni eventów, ale korzysta z hacków po stronie klienta (silent aim, ESP, wallhacki), które nigdy nie wywołują eventu na serwerze. Dwie warstwy oznaczają, że ta, która cheat widzi, łapie go, a ta, która go nie widzi, i tak zostawia sygnał behawioralny do przejrzenia przez adminów.
Czego pilnuje warstwa kliencka
Po stronie klienta Raven monitoruje wstrzyknięte moduły, podpięte funkcje silnika, stan NUI DevTools, integralność własnych plików resource oraz obecność znanych loaderów cheatów w czasie działania gry. Sygnatury najbardziej aktywnych rodzin mod menu (Eulen, Redengine, HamMafia, Susano, TZ, TZX, Skript, Phaze, Lumia) są utrzymywane na bieżąco w cyklu wydań co 1–7 dni (zobacz /changelog). Gdy zadziała znana sygnatura, zbierane są dowody (zrzut ekranu + ślad detekcji) i wysyłane do panelu w chmurze. Gdy sygnatura nie zadziała, ale pojawią się anomalie, trust score gracza spada, a gracz trafia na mapę na żywo do przeglądu przez adminów.
Czego pilnuje warstwa serwerowa
Po stronie serwera Raven przepuszcza przez walidację każdy event serwerowy wywołany przez gracza. Nazwy eventów, które nigdy nie powinny przyjść od klienta, są blokowane od razu. Payloady eventów przekraczające sensowne granice (liczba przedmiotów, zmiany pieniędzy, liczba spawnów pojazdów na minutę) są odrzucane i logowane. Sekwencje eventów pasujące do znanych wzorców exploitów, jak łańcuch eventów używany przez warianty Redengine, są blokowane na poziomie wzorca. Wykrywanie po stronie serwera działa nawet wtedy, gdy każda kontrola po stronie klienta zostanie ominięta, i dlatego pokrycie serwerowe nie podlega negocjacjom.
Jak obie warstwy współpracują
Warstwy spina pętla heartbeatu. Klient okresowo raportuje na serwer podpisany hash kluczowego stanu w czasie działania. Jeśli heartbeat ustanie, serwer traktuje klienta jako zmanipulowanego i stosuje skonfigurowaną reakcję (ostrzeżenie, kick albo automatyczny ban). Jeśli heartbeat nadal przychodzi, ale jego payload przestaje zgadzać się z oczekiwanymi wartościami, serwer loguje rozbieżność i podaje ją do modelu trust score. Tak czy inaczej serwer ma ciągły podgląd na to, czy warstwa kliencka nadal działa, więc cheat, który wyłącza warstwę kliencką, natychmiast staje się widoczny od strony serwera.
Dlaczego to ma znaczenie dla „odporności na bypass”
Żaden anticheat nie jest w 100% odporny na bypass. Ominięcie anticheata jednowarstwowego wymaga pokonania jednego stosu. Ominięcie dwuwarstwowego Ravena wymaga pokonania dwóch stosów naraz, plus heartbeatu, plus modelu trust score, który wyciąga na wierzch anomalie behawioralne. Koszt skutecznego, niewykrytego bypassu jest zauważalnie wyższy, a czas do wypuszczenia łatki krótszy, bo warstwa, która cheat zauważyła, przekazuje zebrane dane zespołowi szykującemu kolejną aktualizację sygnatur.