Przejdź do treści
Blog

Dupowanie itemów i pieniądze od cheatera: jak cofnąć bazę FiveM

Ktoś zdupował itemy albo wbił sobie miliony? Znajdź moment, w którym to się zaczęło, wybierz kopię sprzed niego i cofnij bazę, tracąc jak najmniej.

Autor: PK

7 min czytania
  • Backups
  • Rollback
  • Dupes
  • Economy
Na tej stronie

Kiedy gracz zdupuje itemy albo cheater wbije sobie pieniądze na twoim serwerze FiveM, najczystszym rozwiązaniem jest przywrócenie bazy z kopii zrobionej tuż przed tym, jak to się zaczęło. Ręczne usuwanie kopii rzadko działa, bo zanim to zauważysz, pieniądze i przedmioty są już u innych graczy. W tym wpisie piszę, jak zwykle dochodzi do takich exploitów, jak znaleźć właściwy punkt przywracania, kiedy cofać wszystkich, a kiedy tylko kilku graczy, i jak robią to kopie zapasowe FiveDocka prosto z panelu.

Większość serwerów trafia do FiveDocka przez CDN, po obrazki do ox_inventory i zdjęcia z telefonu. FiveDock robi też kopie zapasowe bazy twojego serwera, w każdym planie, także w darmowym, i to właśnie one ratują sytuację w noc, w którą ktoś rozwala ekonomię.

Jak wygląda dup albo exploit na pieniądze

Zwykle zaczyna się od wiadomości na Discordzie. Ktoś sprzedaje karabiny za pół ceny, nowy gracz kupił pierwszego dnia trzy supersamochody albo na rynku nagle pełno jest przedmiotu, który miał być rzadki. Sprawdzasz i okazuje się, że jedna postać ma 40 milionów w banku, a następna najbogatsza 200 tysięcy.

Prawie zawsze stoi za tym jedna z tych rzeczy:

  • Event serwerowy, który ufa klientowi. Skrypt pracy wypłaca tyle, ile przyśle klient, a ktoś z cheat menu wywołuje ten event z kwotą 9 999 999 zamiast 450.
  • Wyścig w ekwipunku. Dwóch graczy przesuwa ten sam stack w tej samej chwili, wymiana kończy się dokładnie wtedy, gdy jeden z nich się rozłącza, albo serwer pada po przeniesieniu przedmiotu, ale przed kolejnym zapisem. Przedmiot ląduje w obu miejscach.
  • Sklep albo crafting, który płaci, zanim sprawdzi. Najpierw wypłaca pieniądze, a dopiero potem próbuje zabrać przedmiot, albo przyjmuje ujemną ilość.
  • Błąd kogoś z administracji. /givemoney o trzy zera za dużo albo konto admina, do którego dostał się ktoś obcy.

Dlaczego ręczne sprzątanie rzadko działa

Pierwszy odruch to wyzerować cheaterowi konto i dać bana. To naprawia jeden wiersz. Zanim się zorientujesz, pieniądze zwykle są już w autach, domach i u innych graczy, a zdupowane itemy zostały sprzedane, schowane w schowkach i rozdane znajomym. Każde z tych miejsc to kolejny wiersz w kolejnej tabeli i część na pewno przeoczysz.

Kopia sprzed exploita nie ma żadnej z tych rzeczy. Przywracasz ją i kopie znikają wszędzie naraz, także tam, gdzie nigdy byś nie zajrzał.

Znajdź właściwy punkt przywracania

Punkt przywracania to najnowsza kopia zrobiona przed początkiem exploita. Kopia zrobiona później ma już w sobie zdupowane rzeczy. Żeby ją znaleźć:

  1. Znajdź pierwsze podejrzane zdarzenie. Logi pieniędzy, historia gracza w txAdminie albo godzina alertu powiedzą ci mniej więcej, kiedy pojawił się pierwszy dziwny przelew albo przedmiot.
  2. Wybierz ostatnią kopię sprzed tej chwili, a nie ostatnią kopię sprzed momentu, w którym to zauważyłeś.
  3. Zanim jej użyjesz, sprawdź, czy jest czysta. Wczytaj ją do osobnej bazy obok żywej i porównaj stany kont.
terminal
mysql -u root -p -e "CREATE DATABASE restore_check"
mysql -u root -p restore_check < fivem-2026-10-23-2000.sql

Potem zobacz, kto zyskał najwięcej od czasu tej kopii. Na QBCore i Qbox:

QBCore · Qbox
SELECT live.citizenid,
  CAST(JSON_EXTRACT(old.money, '$.bank') AS SIGNED) AS bank_then,
  CAST(JSON_EXTRACT(live.money, '$.bank') AS SIGNED) AS bank_now,
  CAST(JSON_EXTRACT(live.money, '$.bank') AS SIGNED)
    - CAST(JSON_EXTRACT(old.money, '$.bank') AS SIGNED) AS gained
FROM fivem.players AS live
JOIN restore_check.players AS old ON old.citizenid = live.citizenid
ORDER BY gained DESC
LIMIT 20;

Na ESX pieniądze siedzą w kolumnie accounts tabeli users:

ESX
SELECT live.identifier,
  CAST(JSON_EXTRACT(old.accounts, '$.bank') AS SIGNED) AS bank_then,
  CAST(JSON_EXTRACT(live.accounts, '$.bank') AS SIGNED) AS bank_now,
  CAST(JSON_EXTRACT(live.accounts, '$.bank') AS SIGNED)
    - CAST(JSON_EXTRACT(old.accounts, '$.bank') AS SIGNED) AS gained
FROM fivem.users AS live
JOIN restore_check.users AS old ON old.identifier = live.identifier
ORDER BY gained DESC
LIMIT 20;

Zamień $.bank na $.cash (na ESX $.money), żeby sprawdzić gotówkę. Postaci utworzonych po zrobieniu kopii nie będzie na tej liście, więc przejrzyj je osobno. Jeśli w kopii stan konta cheatera wygląda normalnie, to dobry punkt przywracania. Jeśli już tam jest ogromny, cofnij się o jedną kopię dalej.

To samo zapytanie pokaże ci, komu cheater przelał pieniądze. Gracz, który w godzinę zarobił kilka milionów bez pracy, która tyle płaci, to zwykle miejsce, gdzie poszedł hajs.

Dlaczego częstotliwość kopii decyduje, ile stracisz

Cofnięcie bazy przenosi każdego gracza do chwili zrobienia kopii, więc wszystko, co zrobił od tamtej pory, też przepada. Przy jednej kopii na noc o 4:00 i exploicie wykrytym o 21:00 całe miasto traci 17 godzin gry. Przy kopii co godzinę traci mniej niż godzinę.

Dlatego czas między exploitem a chwilą, w której go zauważysz, liczy się tak samo jak sama kopia. Alerty, które dają znać w ciągu kilku minut, sprawiają, że cofnięcie jest krótkie.

Cofnąć wszystkich czy tylko kilku graczy

Cofnij całą bazę, gdy kopie się rozeszły: zamieszanych jest wielu graczy, bug uderzył w całą ekonomię albo nie wiesz, kto co ma. Wszyscy tracą te same kilka godzin, ale ekonomia znowu jest czysta.

Przywróć tylko kilku graczy, gdy zrobiła to jedna czy dwie osoby, a kopie nie poszły daleko. Wstawiasz ich wiersze z kopii i nikt inny nic nie traci. Jak to zrobić, z gotowym SQL dla ESX i QBCore, pokazuje wpis o przywracaniu ekwipunku jednego gracza.

Przywrócenie samego cheatera, gdy jego kopie leżą w ekwipunkach innych graczy, zostawia dupa w grze. Zanim wybierzesz tę drogę, sprawdź, gdzie poszły przedmioty i pieniądze.

Jak radzą sobie z tym kopie FiveDocka

FiveDock robi to wszystko z panelu, przez agenta, który i tak działa na twoim serwerze dla CDN i całej reszty. Każda kopia jest szyfrowana na twojej maszynie kluczem, którego nigdy nie widzimy.

  • Kopie w każdym planie. Free robi kopię raz dziennie i trzyma 7 dni, City raz dziennie przez 30 dni. Metro robi kopię co godzinę i trzyma ostatnie 24 godziny godzina po godzinie, potem jedną dziennie przez 30 dni i jedną tygodniowo przez 12 tygodni.
  • Kopia w chwili alertu. Alerty pieniężne, w każdym planie, piszą na Discorda, gdy pojedynczy przelew przekroczy próg albo gracz zarabia za szybko. Alerty o duplikatach na Metro łapią ten sam unikalny przedmiot w dwóch miejscach albo stack, który rośnie bez powodu. Każdy alert robi kopię w tej samej sekundzie i podpina ją pod znalezisko, więc masz zamrożony zapis tego, kto co miał w chwili wykrycia.
  • Podgląd, zanim cokolwiek się zmieni. Wybierasz kopię i widzisz, co cofnięcie zmieni, zanim je potwierdzisz. Całą bazę albo cały serwer przywrócisz w każdym planie, jedną tabelę albo jednego gracza na Metro.
  • Najpierw kopia bezpieczeństwa. Przed każdym cofnięciem FiveDock robi kopię obecnego stanu. Wybrałeś złą godzinę? Wracasz tam, gdzie byłeś.
  • Framework nie nadpisze twojej pracy. Cofnięcie bazy zostanie odrzucone, dopóki działa ESX, QBCore albo Qbox, bo framework zapisałby graczy trzymanych w pamięci z powrotem na przywróconą bazę. Przywrócenie gracza zostanie odrzucone, dopóki ten gracz jest na serwerze. Jedno i drugie da się wymusić, jeśli wiesz, co robisz.
  • Cofać może tylko właściciel, a każde cofnięcie trafia do logu audytu. Usunięta kopia jest zablokowana przez 30 dni, więc nawet przejęte konto admina nie wymaże ci historii.

Ceny i pełną listę tego, co jest w którym planie, znajdziesz w cenniku. Jeśli chcesz zobaczyć, jak robi się i testuje takie kopie ręcznie, zajrzyj do wpisu o kopii zapasowej serwera FiveM.

Zanim znowu odpalisz serwer

Najpierw załataj dziurę. Jeśli exploit wziął się ze skryptu, zatrzymaj ten zasób albo go popraw przed restartem, bo inaczej za godzinę będzie powtórka. Przy evencie z pieniędzmi o kwocie zawsze decyduje serwer, nigdy klient:

server.lua
-- Exploitable: the client decides how much it gets paid
RegisterNetEvent('delivery:pay', function(amount)
  local xPlayer = ESX.GetPlayerFromId(source)
  xPlayer.addMoney(amount)
end)

-- Safe: the server decides the amount and checks the job was done
local PAY = 450
local onDelivery = {} -- set by the server when it hands out a job

RegisterNetEvent('delivery:finish', function()
  local src = source
  if not onDelivery[src] then return end
  onDelivery[src] = nil
  ESX.GetPlayerFromId(src).addMoney(PAY)
end)
  1. Zbanuj cheatera po licencji i pozostałych identyfikatorach, które pokazuje txAdmin, a nie tylko jego postać.
  2. Napisz graczom, do której godziny cofnąłeś serwer i dlaczego. Ludzie dużo łatwiej przełkną stracony wieczór, kiedy wiedzą, że winny był cheater, a nie ty.
  3. Zachowaj na jakiś czas kopię bezpieczeństwa i kopię z alertu. Pokażą, co się stało, jeśli ktoś będzie się odwoływał od bana.

Częste pytania

Do kiedy cofnąć serwer FiveM po dupie?

Do najnowszej kopii zrobionej przed pierwszym podejrzanym zdarzeniem, a nie przed chwilą, w której to zauważyłeś. Najpierw wczytaj ją do osobnej bazy i sprawdź, czy stan konta i przedmioty cheatera wyglądają tam normalnie.

Czy gracze stracą postępy, jeśli cofnę bazę?

Tak, wszystko od chwili zrobienia kopii. Przy kopiach co godzinę to mniej niż godzina, przy jednej kopii na noc może to być prawie cały dzień. Jeśli zamieszanych było tylko kilku graczy, przywróć zamiast tego tylko ich wiersze.

Cheater dał sobie pieniądze. Wystarczy mu je zabrać?

Tylko jeśli pieniądze nigdy nie wyszły z jego postaci. Zwykle są już w autach, domach albo na kontach innych graczy, a zabranie ich z jednego wiersza zostawia resztę. Cofnięcie do kopii sprzed exploita jest szybsze i łapie wszystko.

Czy txAdmin potrafi cofnąć bazę danych?

Nie. txAdmin zarządza procesem serwera, banami i historią graczy, ale nie robi kopii ani nie przywraca twojej bazy MySQL czy MariaDB. Do tego potrzebujesz mysqldump uruchamianego według harmonogramu albo narzędzia takiego jak FiveDock.

Czy kopie zapasowe FiveDocka są w darmowym planie?

Tak. Free robi kopię raz dziennie, trzyma ją 7 dni i potrafi przywrócić całą bazę. Kopie co godzinę, alerty o duplikatach i przywracanie jednego gracza są na Metro.

Wszystkie artykuły