Pular para o conteúdo
Blog

Dupe ou exploit de dinheiro no FiveM: desfaça com um backup

Alguém duplicou itens ou deu dinheiro para si mesmo? Ache quando começou, escolha o backup logo antes e dê rollback no banco perdendo o mínimo possível.

Por PK

9 min de leitura
  • Backups
  • Rollback
  • Dupes
  • Economy
Nesta página

Quando um jogador duplica itens ou um cheater dá dinheiro para si mesmo no seu servidor de FiveM, o jeito mais limpo de resolver é restaurar o banco de dados a partir de um backup feito logo antes. Apagar as cópias na mão quase nunca funciona, porque quando você percebe, o dinheiro e os itens já estão com outros jogadores. Este post mostra como esses exploits costumam acontecer, como achar o ponto de restauração certo, quando dar rollback em todo mundo e quando só em alguns jogadores, e como os backups do FiveDock fazem isso pelo painel.

A maioria dos servidores chega ao FiveDock pela CDN, para as imagens do ox_inventory e as fotos do celular. O FiveDock também faz backup do banco de dados do seu servidor, em todos os planos, inclusive no gratuito. E é isso que te salva na noite em que alguém quebra a economia.

Como é um dupe ou um exploit de dinheiro

Normalmente começa com uma mensagem no Discord. Alguém está vendendo fuzis pela metade do preço, um jogador novo comprou três supercarros no primeiro dia ou o mercado de repente está cheio de um item que deveria ser raro. Você vai olhar e um personagem tem 40 milhões no banco, enquanto o segundo mais rico tem 200 mil.

Por trás, quase sempre está uma destas causas:

  • Um evento de servidor que confia no cliente. Um script de emprego paga o valor que o cliente manda, e alguém com um menu de cheat chama esse evento com 9.999.999 em vez de 450.
  • Uma condição de corrida no inventário. Dois jogadores movem o mesmo stack no mesmo instante, uma troca termina bem na hora em que um deles desconecta, ou o servidor cai depois que um item mudou de lugar, mas antes do próximo salvamento. O item vai parar nos dois lugares.
  • Um script de loja ou de craft que paga antes de conferir. Ele entrega o dinheiro e só depois tenta tirar o item, ou aceita uma quantidade negativa.
  • Um erro da staff. Um /givemoney com três zeros a mais, ou uma conta de staff em que outra pessoa entrou.

Por que limpar na mão quase nunca funciona

O primeiro reflexo é zerar a conta do cheater e banir. Isso conserta uma linha. Quando você fica sabendo, o dinheiro geralmente já virou carros e casas e foi parar no bolso de outros jogadores, e os itens duplicados foram vendidos, guardados em stashes e dados para amigos. Cada um desses lugares é mais uma linha em mais uma tabela, e alguns vão passar batido.

Um backup de antes do exploit não tem nada disso. Você restaura e as cópias somem de todo lugar de uma vez, inclusive dos lugares onde você nunca pensaria em olhar.

Ache o ponto de restauração certo

O ponto de restauração é o backup mais recente feito antes de o exploit começar. Um feito depois já contém as cópias. Para achar:

  1. Ache o primeiro evento explorado. Seus logs de dinheiro, o histórico do jogador no txAdmin ou o horário de um alerta dizem mais ou menos quando apareceu a primeira transferência ou o primeiro item estranho.
  2. Escolha o último backup antes desse momento, não o último antes de você perceber.
  3. Confira se ele está limpo antes de usar. Carregue num banco separado ao lado do banco em produção e compare os saldos.
terminal
mysql -u root -p -e "CREATE DATABASE restore_check"
mysql -u root -p restore_check < fivem-2026-10-23-2000.sql

Depois veja quem ganhou mais desde esse backup. No QBCore e no 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;

No ESX o dinheiro fica na coluna accounts de 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;

Troque $.bank por $.cash ($.money no ESX) para conferir o dinheiro em mãos. Personagens criados depois do backup não aparecem nessa lista, então olhe para eles à parte. Se o saldo do cheater no backup parece normal, é um bom ponto de restauração. Se ali ele já está enorme, volte mais um backup.

A mesma consulta mostra para quem o cheater mandou o dinheiro. Um jogador que ganhou alguns milhões em uma hora sem um emprego que pague tudo isso geralmente é para onde o dinheiro foi.

Por que a frequência dos backups decide quanto você perde

Um rollback leva cada jogador de volta ao momento do backup, então tudo o que ele fez depois também se perde. Com um backup por noite às 04:00 e um exploit descoberto às 21:00, a cidade inteira perde 17 horas de jogo. Com um backup a cada hora, perde menos de uma.

Por isso o tempo entre o exploit e o momento em que você percebe conta tanto quanto o próprio backup. Alertas que avisam em minutos mantêm o rollback curto.

Rollback em todo mundo ou só em alguns jogadores

Dê rollback no banco inteiro quando as cópias se espalharam: muitos jogadores estão envolvidos, o bug atingiu a economia toda ou você não sabe quem tem o quê. Todo mundo perde as mesmas poucas horas, mas a economia fica limpa de novo.

Restaure só alguns jogadores quando foram uma ou duas pessoas e as cópias não foram longe. Você devolve as linhas deles a partir do backup e mais ninguém perde nada. Restaurar o inventário de um jogador mostra como, com SQL para ESX e QBCore.

Restaurar só o cheater enquanto as cópias dele estão no inventário de outros jogadores deixa o dupe no jogo. Veja para onde foram os itens e o dinheiro antes de escolher esse caminho.

Como os backups do FiveDock resolvem isso

O FiveDock faz tudo isso pelo painel, através do agente que já roda no seu servidor para a CDN e o resto. Cada backup é criptografado na sua máquina com uma chave que a gente nunca vê.

  • Backups em todos os planos. O Free faz um backup por dia e guarda 7 dias, o City um por dia durante 30 dias. O Metro faz um a cada hora e guarda as últimas 24 horas hora a hora, depois um por dia durante 30 dias e um por semana durante 12 semanas.
  • Um backup no instante em que um alerta dispara. Os alertas de dinheiro, em todos os planos, avisam no Discord quando uma única transferência passa de um limite ou um jogador ganha dinheiro rápido demais. Os alertas de itens duplicados no Metro pegam o mesmo item único em dois lugares, ou um stack que cresce sem explicação. Cada alerta faz um backup no mesmo segundo e liga esse backup ao achado, então você guarda um retrato congelado de quem tinha o quê quando foi pego.
  • Uma prévia antes de mudar qualquer coisa. Você escolhe um backup e vê o que o rollback vai mudar antes de confirmar. O banco inteiro ou o servidor inteiro dá para restaurar em todos os planos; uma tabela só ou um jogador só é do Metro.
  • Primeiro, um backup de segurança. Antes de cada rollback, o FiveDock salva o estado atual. Escolheu o horário errado? Você volta para onde estava.
  • O framework não desfaz o seu trabalho. Um rollback do banco é recusado enquanto o ESX, o QBCore ou o Qbox estiver rodando, porque o framework escreveria por cima os jogadores que mantém na memória. A restauração de um jogador é recusada enquanto esse jogador estiver conectado. Dá para forçar as duas se você souber o que está fazendo.
  • Só owners podem dar rollback, e cada um fica no log de auditoria. Um backup apagado fica bloqueado por 30 dias, então nem uma conta de staff roubada consegue apagar o seu histórico.

Preços e a lista completa do que vem em cada plano estão em preços. Se quiser ver como fazer e testar esses backups na mão, leia como fazer backup de um servidor de FiveM.

Antes de ligar o servidor de novo

Feche o buraco primeiro. Se o exploit veio de um script, pare esse resource ou corrija antes do restart, senão vai acontecer de novo em menos de uma hora. Num evento de dinheiro, quem decide o valor é sempre o servidor, nunca o cliente:

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. Bana o cheater pela licença e pelos outros identificadores que o txAdmin mostra, não só o personagem.
  2. Conte aos jogadores para qual horário você voltou e por quê. O pessoal aceita muito melhor uma noite perdida quando sabe que foi um cheater e não você.
  3. Guarde o backup de segurança e o do alerta por um tempo. Eles mostram o que aconteceu se alguém contestar o ban.

Perguntas frequentes

Até onde dar rollback no FiveM depois de um dupe?

Até o backup mais recente feito antes do primeiro evento explorado, não antes de você perceber. Carregue primeiro num banco separado e confira se o saldo e os itens do cheater parecem normais ali.

Os jogadores perdem progresso se eu der rollback no banco?

Perdem, tudo desde o backup. Com backups de hora em hora é menos de uma hora; com um por noite pode ser quase um dia inteiro. Se só alguns jogadores estavam envolvidos, restaure só as linhas deles.

Um cheater deu dinheiro para si mesmo. É só tirar?

Só se o dinheiro nunca saiu do personagem dele. Normalmente já virou carros e casas ou foi para a conta de outros jogadores, e tirar de uma linha deixa o resto. Voltar para um backup de antes é mais rápido e pega tudo.

O txAdmin consegue dar rollback no banco de dados?

Não. O txAdmin cuida do processo do servidor, dos bans e do histórico dos jogadores, mas não faz backup nem restaura o seu banco MySQL ou MariaDB. Para isso você precisa de mysqldump agendado ou de uma ferramenta como o FiveDock.

Os backups do FiveDock vêm no plano gratuito?

Vêm. O Free faz um backup por dia, guarda por 7 dias e consegue restaurar o banco inteiro. Backups de hora em hora, alertas de itens duplicados e a restauração de um jogador só são do Metro.

Todos os artigos