Mod menu-uri RedM: cum se încarcă și cum le vezi fără să le știi numele
Ce face de fapt un mod menu pe un server RedM, cele trei semnale care îl trădează fără listă neagră sau nume cunoscut, și ce nu va vedea niciun anticheat.
Un mod menu RedM nu se anunță. Nu apare în nicio listă de resurse, nu ridică nicio eroare la pornire, iar jucătorul care îl folosește se comportă normal trei sferturi din sesiune. Când în sfârșit observi, de obicei este pentru că un alt jucător a filmat ceva imposibil. Acest articol explică pe unde intră meniul, ce primește cel care îl plătește și ce semnale îl identifică, fără să fie nevoie vreodată să știi cum se numește.
Pe unde intră meniul
Prima etapă este un program extern. Pornește înainte sau în timpul jocului, deschide procesul și își scrie propriul cod în spațiul de memorie al jocului. Din acel moment meniul nu mai este un software aflat lângă joc: este în interiorul lui, cu aceleași drepturi asupra jocului pe care le are jocul asupra lui însuși. Poate apela funcții ale motorului, poate citi Lua-ul tău de client odată ce a ajuns pe mașină și poate înapoia controlul fără ca ceva să se fi oprit vizibil. Loader-ele serioase sunt protejate (binare împachetate, funcții ale jocului rezolvate prin simbolurile lor de debug) tocmai pentru ca această etapă să nu lase nicio urmă lizibilă.
A doua etapă este cea interesantă pentru noi, pentru că atinge serverul tău. Ca să ruleze Lua cu drepturile unei resurse, și deci să poată declanșa evenimentele tale de rețea, să-ți apeleze exporturile, să treacă drept codul tău, meniul deturnează o resursă care rulează deja. Își împinge propriile valori în spațiul global al acelei resurse, iar codul lui se trezește acolo ca și cum ar fi aparținut dintotdeauna. Un caz real pe care l-am observat: meniul depune patru variabile (un id de utilizator, un token, o cheie) în tabela globală a unei resurse legitime, înainte ca propriul său strat de obfuscare să pornească. Cele patru variabile sunt mânerul ușii lui, și sunt și semnătura lui comportamentală.
Există și o a treia cale, mult mai zgomotoasă: pornirea unei resurse proprii. Aceasta cere acces la server, nu la client. Dacă un meniu rulează ca resursă declarată, problema ta nu este un trișor, ci un membru al staff-ului.
Odată intrat, iată ce primește cumpărătorul:
Starea personajului: invincibilitate, muniție infinită, mers prin pereți, viteză. Sunt apeluri de funcții ale motorului, gratuite odată ce ești pe dinăuntru.
Spawn-ul: pedi, cai, vehicule, obiecte, în rafale. Este neplăcerea vizibilă, cea pentru care comunitatea ta se plânge la tine.
Evenimentele tale de rețea: meniul îți citește scripturile de client, extrage numele evenimentelor de server și le redă cu orice argumente vrea. De departe cel mai costisitor pentru tine (bani, iteme, roluri), și nu arată ca trișat în loguri, ci ca propria ta economie.
Dump-ul: citirea și exfiltrarea resurselor tale. Meniul nu încearcă doar să trișeze, încearcă să-ți copieze serverul.
De ce o listă neagră de nume nu valorează nimic
Reacția firească este să ții o listă: nume de meniuri cunoscute, nume suspecte de resurse, nume de evenimente, hash-uri de fișiere. Prinde prima versiune, pentru o săptămână. Apoi autorul redenumește lucrurile. Unele meniuri afișează explicit un buton „schimbă numele”, altele trag un nume aleator la fiecare lansare, iar valorile depuse în spațiul global sunt generate pe loc. O listă neagră nu descrie o capacitate, ci o ortografie, iar ortografia este cel mai ieftin lucru din lume de schimbat.
Trei semnale care nu depind de nume
1. Apelantul anonim. Pe RedM, fiecare apel de funcție a motorului vine dintr-un context. Când codul apelant aparține unei resurse care rulează, motorul știe care. Când este cod injectat, nu există nicio resursă de numit: apelantul este necunoscut. Principiul încape într-o propoziție: nu funcția apelată este suspectă, ci faptul că nicio resursă nu și-o asumă. A crea un cal, a seta invincibilitatea, a deveni invizibil: un server de roleplay face toate trei toată ziua, dar întotdeauna dintr-un script identificabil.
Acest semnal singur ar face stricăciuni, așa că îl temperăm: cerem observații separate înainte ca o alertă să plece, ignorăm o fereastră de toleranță cât jucătorul se încarcă (când motorul însuși apelează fără context), iar ecranul negru al unui fast travel dezarmează temporar familia „stare”. Valorile rămân în interior: publicate, ar deveni marja în care se strecoară meniul.
Nepublicat/Pragurile de detecție nu sunt publicate niciodată: o valoare cunoscută este o valoare sub care se reglează un cheat.
2. Scrierea în spațiul global al altei resurse. Acesta este chiar gestul de încărcare. O resursă nu scrie în tabela globală a altei resurse: nu așa comunică resursele între ele și niciun framework de roleplay nu are vreun motiv să o facă. Așa că supraveghem acea scriere. Pe partea noastră este înghițită: valoarea este acceptată în aparență, apoi înapoiată coruptă, păstrând aceeași formă, astfel încât loader-ul crede că a reușit și se prăbușește mai departe pe traseu, iar tokenul original urcă în dosarul cazului. Acel token nu este anonim: este contul care a plătit meniul.
3. Citirea în masă a fișierelor de resurse. Un dump nu se ascunde prea bine: citește mult, repede, și citește lucruri pe care niciun script nu le deschide în joc. Măsurăm rafala, nu fișierul, și plantăm fișiere care nu au niciun motiv să fie citite: un script legitim le ignoră, un dumper le înghite odată cu restul și se dă singur de gol. Limita este clară și o spunem: această gardă trăiește în interiorul jocului, deci vede dump-urile care trec prin joc. Un instrument care îți copiază cache-ul de pe disc, în afara procesului, nu o va întâlni niciodată. Singurul răspuns real la aceasta este contractual, nu tehnic.
Ce nu vede această familie de detecție
Tot ce precede presupune că cheat-ul vorbește cu motorul. Un cheat complet extern nu o face: citește memoria jocului dintr-un alt proces, uneori de pe o a doua mașină, nu apelează nicio funcție, nu scrie în nicio stare Lua și doar desenează pe ecranul tău sau îți mișcă mouse-ul. Niciunul dintre cele trei semnale ale noastre nu se declanșează și niciun anticheat care rulează în interiorul jocului nu poate pretinde altceva. Un ESP doar-citire se află în aceeași situație: nu schimbă nimic, deci nu se contrazice nicăieri.
Ce rămâne atunci este efectul: un foc care urmează o traiectorie pe care niciun om nu o produce, o țintire care sare și îngheață, cunoașterea unor poziții pe care jucătorul nu ar trebui să le aibă. Nu mai detectezi programul, detectezi urma lui: acesta este subiectul articolului nostru despre silent aim. Și, pentru că întrebarea revine mereu: da, decizia finală trebuie luată în alt loc decât pe mașina jucătorului, ceea ce este toată discuția client versus server.
Dacă vrei să vezi cum arată un dosar de încărcare a unui meniu (apelantul necunoscut, tokenul recuperat, marcajul de timp), panoul demo este deschis fără înregistrare, anticheat-ul nostru RedM arată unde se situează această familie printre celelalte, iar principiile generale sunt expuse în cum funcționează un anticheat RedM.