Zum Inhalt springen
Blog

FiveM-Dupe oder Geld-Exploit mit einem Backup rückgängig machen

Jemand hat Items gedupt oder sich Geld gecheatet? Finde den Beginn, nimm das Backup davor und setz die Datenbank zurück, ohne mehr als nötig zu verlieren.

Von PK

8 Min. Lesezeit
  • Backups
  • Rollback
  • Dupes
  • Economy
Auf dieser Seite

Wenn ein Spieler auf deinem FiveM-Server Items dupt oder ein Cheater sich Geld gibt, ist der sauberste Weg, die Datenbank aus einem Backup von kurz davor zurückzuspielen. Die Kopien von Hand zu löschen klappt selten, denn bis du es merkst, sind Geld und Items längst bei anderen Spielern. Dieser Beitrag zeigt, wie solche Exploits meistens entstehen, wie du den richtigen Wiederherstellungspunkt findest, wann du alle zurücksetzt und wann nur ein paar Spieler, und wie die Backups von FiveDock das direkt aus dem Panel erledigen.

Die meisten Server kommen über das CDN zu FiveDock, für ox_inventory-Bilder und Handyfotos. FiveDock sichert aber auch die Datenbank deines Servers, in jedem Plan, auch im kostenlosen. Und genau das rettet dich in der Nacht, in der jemand die Wirtschaft kaputt macht.

Woran du einen Dupe oder Geld-Exploit erkennst

Meistens fängt es mit einer Nachricht auf Discord an. Jemand verkauft Gewehre zum halben Preis, ein neuer Spieler hat sich am ersten Tag drei Supersportwagen gekauft, oder der Markt ist plötzlich voll mit einem Item, das selten sein sollte. Du schaust nach, und ein Charakter hat 40 Millionen auf dem Konto, während der nächstreichste bei 200.000 liegt.

Dahinter steckt fast immer eines davon:

  • Ein Server-Event, das dem Client vertraut. Ein Job-Skript zahlt so viel aus, wie der Client schickt, und jemand mit Cheat-Menü ruft das Event mit 9.999.999 statt 450 auf.
  • Eine Race Condition im Inventar. Zwei Spieler verschieben im selben Moment denselben Stack, ein Handel wird fertig, während einer von beiden die Verbindung trennt, oder der Server stürzt ab, nachdem ein Item verschoben wurde, aber vor dem nächsten Save. Das Item landet an beiden Orten.
  • Ein Shop- oder Crafting-Skript, das zahlt, bevor es prüft. Es zahlt das Geld aus und versucht erst danach, das Item zu entfernen, oder es nimmt eine negative Menge an.
  • Ein Fehler im Team. Ein /givemoney mit drei Nullen zu viel oder ein Admin-Account, in den jemand anderes eingedrungen ist.

Warum Aufräumen von Hand selten klappt

Der erste Reflex ist, dem Cheater das Geld wegzunehmen und ihn zu bannen. Damit ist eine Zeile repariert. Bis du davon erfährst, steckt das Geld meist schon in Autos, Häusern und den Taschen anderer Spieler, und die gedupten Items sind verkauft, in Stashes gelagert und an Freunde verteilt. Jedes davon ist eine weitere Zeile in einer weiteren Tabelle, und ein paar davon übersiehst du.

Ein Backup von vor dem Exploit enthält nichts davon. Spielst du es zurück, sind die Kopien überall gleichzeitig weg, auch an Orten, an die du nie gedacht hättest.

Den richtigen Wiederherstellungspunkt finden

Der Wiederherstellungspunkt ist das neueste Backup, das vor Beginn des Exploits entstanden ist. Ein späteres enthält die Kopien schon. So findest du es:

  1. Finde das erste ausgenutzte Ereignis. Deine Geld-Logs, die Spielerhistorie in txAdmin oder die Uhrzeit eines Alerts zeigen dir ungefähr, wann die erste seltsame Überweisung oder das erste seltsame Item auftauchte.
  2. Nimm das letzte Backup vor diesem Moment, nicht das letzte vor dem Moment, in dem du es bemerkt hast.
  3. Prüf, ob es sauber ist, bevor du es benutzt. Lade es in eine separate Datenbank neben der Live-Datenbank und vergleiche die Kontostände.
terminal
mysql -u root -p -e "CREATE DATABASE restore_check"
mysql -u root -p restore_check < fivem-2026-10-23-2000.sql

Dann lass dir anzeigen, wer seit diesem Backup am meisten dazugewonnen hat. Auf QBCore und 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;

Auf ESX liegt das Geld in der Spalte accounts der Tabelle 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;

Mit $.cash statt $.bank (auf ESX $.money) prüfst du das Bargeld. Charaktere, die nach dem Backup erstellt wurden, tauchen in dieser Liste nicht auf, schau sie dir also extra an. Sieht der Kontostand des Cheaters im Backup normal aus, ist es ein guter Wiederherstellungspunkt. Ist er dort schon riesig, geh ein Backup weiter zurück.

Dieselbe Abfrage zeigt dir auch, wohin der Cheater das Geld geschickt hat. Ein Spieler, der in einer Stunde ein paar Millionen verdient hat, ohne einen Job, der so viel zahlt, ist meistens der Ort, an dem es gelandet ist.

Warum die Backup-Frequenz bestimmt, wie viel du verlierst

Ein Rollback setzt jeden Spieler auf den Zeitpunkt des Backups zurück, also ist alles, was seitdem passiert ist, ebenfalls weg. Mit einem Backup pro Nacht um 04:00 und einem Exploit, den du um 21:00 entdeckst, verliert die ganze Stadt 17 Stunden Spielzeit. Mit einem Backup pro Stunde ist es weniger als eine.

Deshalb zählt die Zeit zwischen dem Exploit und dem Moment, in dem du ihn bemerkst, genauso viel wie das Backup selbst. Alerts, die dich innerhalb von Minuten warnen, halten den Rollback kurz.

Alle zurücksetzen oder nur ein paar Spieler

Setz die ganze Datenbank zurück, wenn sich die Kopien verbreitet haben: Viele Spieler sind beteiligt, der Bug hat die ganze Wirtschaft getroffen, oder du kannst nicht sagen, wer was hat. Alle verlieren dieselben paar Stunden, aber die Wirtschaft ist wieder sauber.

Stell nur ein paar Spieler wieder her, wenn es ein oder zwei Leute waren und die Kopien nicht weit gewandert sind. Du spielst ihre Zeilen aus dem Backup zurück, und sonst verliert niemand etwas. Wie das geht, mit SQL für ESX und QBCore, steht in Inventar eines Spielers wiederherstellen.

Wenn du nur den Cheater wiederherstellst, während seine Kopien in den Inventaren anderer Spieler liegen, bleibt der Dupe im Spiel. Prüf, wohin Items und Geld gegangen sind, bevor du diesen Weg wählst.

Wie die Backups von FiveDock damit umgehen

FiveDock erledigt das alles aus dem Panel, über den Agent, der für das CDN und den Rest sowieso auf deinem Server läuft. Jedes Backup wird auf deiner Maschine mit einem Schlüssel verschlüsselt, den wir nie sehen.

  • Backups in jedem Plan. Free sichert einmal am Tag und behält 7 Tage, City einmal am Tag für 30 Tage. Metro sichert jede Stunde und behält die letzten 24 Stunden Stunde für Stunde, danach eins pro Tag für 30 Tage und eins pro Woche für 12 Wochen.
  • Ein Backup in dem Moment, in dem ein Alert auslöst. Geld-Alerts posten in jedem Plan nach Discord, wenn eine einzelne Überweisung eine Schwelle überschreitet oder ein Spieler zu schnell Geld bekommt. Die Duplikat-Alerts auf Metro erkennen dasselbe einzigartige Item an zwei Orten oder einen Stack, der ohne Erklärung wächst. Jeder Alert nimmt in derselben Sekunde ein Backup und hängt es an den Fund, so hast du einen eingefrorenen Stand davon, wer was hatte, als es aufgefallen ist.
  • Eine Vorschau, bevor sich etwas ändert. Du wählst ein Backup und siehst, was der Rollback ändern wird, bevor du bestätigst. Die ganze Datenbank oder den ganzen Server stellst du in jedem Plan wieder her, eine Tabelle oder einen Spieler auf Metro.
  • Zuerst ein Sicherheits-Backup. Vor jedem Rollback sichert FiveDock den aktuellen Stand. Falsche Stunde erwischt? Dann gehst du einfach dorthin zurück, wo du warst.
  • Das Framework macht deine Arbeit nicht zunichte. Ein Datenbank-Rollback wird abgelehnt, solange ESX, QBCore oder Qbox läuft, weil das Framework die Spieler aus seinem Speicher über die Wiederherstellung schreiben würde. Die Wiederherstellung eines Spielers wird abgelehnt, solange dieser Spieler verbunden ist. Beides lässt sich erzwingen, wenn du weißt, was du tust.
  • Nur Owner können zurücksetzen, und jeder Rollback landet im Audit-Log. Ein gelöschtes Backup bleibt 30 Tage gesperrt, also kann auch ein gestohlener Team-Account deine Historie nicht löschen.

Preise und die volle Liste, was in welchem Plan steckt, findest du unter Preise. Wie man solche Backups von Hand macht und testet, zeigt Backup eines FiveM-Servers.

Bevor du den Server wieder startest

Schließ zuerst die Lücke. Kam der Exploit aus einem Skript, stopp diese Ressource oder patch sie vor dem Neustart, sonst passiert es innerhalb einer Stunde wieder. Bei einem Geld-Event entscheidet immer der Server über den Betrag, nie der Client:

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. Bann den Cheater über seine Lizenz und die anderen Identifier, die txAdmin anzeigt, nicht nur seinen Charakter.
  2. Sag den Spielern, auf welche Uhrzeit du zurückgesetzt hast und warum. Einen verlorenen Abend nehmen die Leute viel besser hin, wenn sie wissen, dass es ein Cheater war und nicht du.
  3. Behalte das Sicherheits-Backup und das Alert-Backup eine Weile. Sie zeigen, was passiert ist, falls jemand gegen den Bann Einspruch erhebt.

Häufige Fragen

Wie weit setze ich einen FiveM-Server nach einem Dupe zurück?

Auf das neueste Backup von vor dem ersten ausgenutzten Ereignis, nicht von vor dem Moment, in dem du es bemerkt hast. Lade es zuerst in eine separate Datenbank und prüf, ob Kontostand und Items des Cheaters dort normal aussehen.

Verlieren Spieler Fortschritt, wenn ich die Datenbank zurücksetze?

Ja, alles seit dem Backup. Mit stündlichen Backups ist das weniger als eine Stunde, mit nächtlichen kann es fast ein ganzer Tag sein. Waren nur ein paar Spieler beteiligt, stell stattdessen nur ihre Zeilen wieder her.

Ein Cheater hat sich Geld gegeben. Soll ich es einfach entfernen?

Nur wenn das Geld seinen Charakter nie verlassen hat. Meistens steckt es schon in Autos, Häusern oder auf den Konten anderer Spieler, und wenn du es aus einer Zeile entfernst, bleibt der Rest. Ein Rollback auf ein Backup von davor geht schneller und erwischt alles.

Kann txAdmin die Datenbank zurücksetzen?

Nein. txAdmin verwaltet den Serverprozess, Banns und die Spielerhistorie, sichert deine MySQL- oder MariaDB-Datenbank aber nicht und stellt sie auch nicht wieder her. Dafür brauchst du mysqldump nach Zeitplan oder ein Tool wie FiveDock.

Sind die Backups von FiveDock im kostenlosen Plan enthalten?

Ja. Free macht ein tägliches Backup, behält es 7 Tage und kann die ganze Datenbank wiederherstellen. Stündliche Backups, Duplikat-Alerts und die Wiederherstellung einzelner Spieler gibt es auf Metro.

Alle Artikel