Como Configurar Anti-Bot no Servidor de MU Online
Aprenda a configurar proteção anti-bot no seu servidor MU Online com ajustes no GameServer.ini, consultas SQL de detecção e banimento automatizado via SQL Server Agent.
Por Que o Anti-Bot é Essencial no MU Online
Bots e trainers são uma das maiores ameaças à economia e à experiência de jogo em servidores privados de MU Online. Eles acumulam Zen, itens raros e experiência de forma automatizada, desbalanceando completamente o servidor em questão de horas. Servidores sem proteção ativa costumam ser invadidos em massa dentro de 72 horas após a abertura. Este guia cobre a configuração completa do sistema anti-bot disponível no MuServer Season 6 — desde ajustes em arquivos .ini até stored procedures SQL agendadas automaticamente.
Pré-requisitos
- Acesso ao diretório de instalação do servidor (ex:
C:\MuServer\) - SQL Server Management Studio (SSMS) conectado ao banco
MuOnline - SQL Server Agent habilitado (para automação via jobs)
- Acesso de administrador ao GameServer e ConnectServer
- Backup completo realizado antes de qualquer alteração
Parte 1 — Configuração no GameServer
Passo 1: Habilitar Filtros de Pacote no GameServer.exe.cfg
Localize o arquivo de configuração principal do GameServer:
C:\MuServer\GameServer\GameServer.exe.cfg
Adicione ou edite os parâmetros na seção [AntiBot] (se a seção não existir, crie-a ao final do arquivo):
[AntiBot]
AntiBotEnable = 1
AntiBotCheckTime = 60 ; Intervalo de verificação em segundos
AntiBotMaxRepeat = 3 ; Máximo de ações idênticas consecutivas
AntiBotKickEnable = 1 ; Kickar ao detectar comportamento de bot
AntiBotBanEnable = 0 ; Banimento automático (ative com cuidado)
AntiBotLogEnable = 1 ; Registrar suspeitos em arquivo de log
AntiBotLogPath = Logs\AntiBot\
AntiBotBanEnable = 0 nas primeiras 48 horas. Rode em modo de log para calibrar os thresholds antes de ativar banimentos automáticos. Falsos positivos podem banir jogadores legítimos e gerar reclamações.Passo 2: Configurar o AntiBot.ini (Season 6+)
Em servidores Season 6 Episode 1 em diante, existe um arquivo de configuração dedicado para o anti-bot:
C:\MuServer\GameServer\Data\AntiBot.ini
Configuração recomendada para Season 6:
[Config]
Enable = 1
QuestionEnable = 1 ; Ativa perguntas CAPTCHA no chat do jogo
QuestionInterval = 1800 ; Pergunta a cada 30 minutos (em segundos)
QuestionTimeout = 120 ; Tempo para responder antes do kick (segundos)
QuestionPunishment = 1 ; 0=Kick, 1=Ban temporário, 2=Ban permanente
WrongAnswerLimit = 3 ; Tentativas erradas antes da punição
MoveDetect = 1 ; Detecta movimento em padrão de rota repetida
MoveDetectRange = 5 ; Variação mínima de posição esperada (cells)
MoveDetectTime = 300 ; Janela de tempo para análise de movimento (segundos)
KillSpeedMax = 800 ; Kills por hora máximas antes de alertar
Passo 3: Definir as Perguntas CAPTCHA
O arquivo de perguntas fica em:
C:\MuServer\GameServer\Data\AntiBotQuestion.txt
Formato de cada linha: Pergunta,Resposta_Correta
Qual é a capital do Brasil?,Brasilia
Quanto é 7 mais 8?,15
Qual a cor do céu durante o dia?,azul
Quantas patas tem um cachorro?,4
Qual mês vem depois de março?,abril
Quantos dias tem uma semana?,7
Qual é o maior oceano do mundo?,pacifico
Parte 2 — Detecção via SQL Server
Passo 4: Criar a Tabela de Log de Suspeitos
Execute no SSMS conectado ao banco MuOnline:
USE MuOnline;
GO
CREATE TABLE dbo.AntiBot_SuspectLog (
LogID INT IDENTITY(1,1) PRIMARY KEY,
AccountID VARCHAR(10) NOT NULL,
CharacterName VARCHAR(10) NOT NULL,
SuspectReason VARCHAR(200) NOT NULL,
KillsPerHour INT NULL,
OnlineHours DECIMAL(5,2) NULL,
PositionVariance INT NULL,
DetectedAt DATETIME DEFAULT GETDATE(),
ReviewStatus TINYINT DEFAULT 0
-- 0 = Pendente, 1 = Confirmado Bot, 2 = Falso Positivo
);
GO
Passo 5: Criar a Stored Procedure de Detecção
USE MuOnline;
GO
CREATE PROCEDURE dbo.SP_AntiBot_DetectSuspects
AS
BEGIN
SET NOCOUNT ON;
-- Detecta personagens com kills/hora acima do threshold humano
INSERT INTO dbo.AntiBot_SuspectLog
(AccountID, CharacterName, SuspectReason, KillsPerHour, OnlineHours)
SELECT
a.memb___id,
c.Name,
'KillsPerHour acima de 1000 - possivel bot de grinding',
c.PkCount,
DATEDIFF(MINUTE, s.ConnectTM, GETDATE()) / 60.0
FROM
Character c
INNER JOIN MEMB_STAT s ON c.AccountID = s.memb___id
INNER JOIN MEMB_INFO a ON c.AccountID = a.memb___id
WHERE
-- Kills por hora calculado desde o início da sessão
(c.PkCount / NULLIF(DATEDIFF(HOUR, s.ConnectTM, GETDATE()), 0)) > 1000
AND DATEDIFF(HOUR, s.ConnectTM, GETDATE()) >= 2
AND c.AccountID NOT IN (
SELECT AccountID FROM AntiBot_SuspectLog
WHERE CAST(DetectedAt AS DATE) = CAST(GETDATE() AS DATE)
AND ReviewStatus = 2 -- Não reinserir falsos positivos confirmados
);
-- Detecta contas online há mais de 22 horas consecutivas
INSERT INTO dbo.AntiBot_SuspectLog
(AccountID, CharacterName, SuspectReason, OnlineHours)
SELECT
s.memb___id,
c.Name,
'Sessao continua acima de 22 horas - possivel bot 24/7',
DATEDIFF(MINUTE, s.ConnectTM, GETDATE()) / 60.0
FROM
MEMB_STAT s
INNER JOIN Character c ON s.memb___id = c.AccountID
WHERE
s.ConnStatus = 1
AND DATEDIFF(HOUR, s.ConnectTM, GETDATE()) > 22
AND s.memb___id NOT IN (
SELECT AccountID FROM AntiBot_SuspectLog
WHERE SuspectReason LIKE '%22 horas%'
AND CAST(DetectedAt AS DATE) = CAST(GETDATE() AS DATE)
);
PRINT 'AntiBot scan concluido: ' + CAST(GETDATE() AS VARCHAR);
END;
GO
Passo 6: Agendar a Procedure no SQL Server Agent
- Abra o SSMS → expanda SQL Server Agent → clique com botão direito em Jobs → New Job
- Name:
AntiBot_Scan_Automatico - Na aba Steps → New Step:
- Step name:
Executar Deteccao - Type:
Transact-SQL script (T-SQL) - Database:
MuOnline - Command:
EXEC dbo.SP_AntiBot_DetectSuspects;
- Na aba Schedules → New Schedule:
- Name:
A_cada_30_minutos - Frequency: Daily
- Sub-frequency: Every 30 minutes
- Start time:
00:00:00, End time:23:59:59
SQL Server Agent (MSSQLSERVER) está com status Em execução antes de testar o job.Parte 3 — Configuração do ConnectServer
Passo 7: Limitar Conexões por IP no ConnectServer
Edite o arquivo C:\MuServer\ConnectServer\ConnectServer.ini:
[ServerInfo]
MaxConnectionPerIP = 3 ; Máximo de contas simultâneas por IP
ConnectionFloodLimit = 10 ; Tentativas de conexão por segundo antes de bloquear
ConnectionFloodBanTime = 300 ; Tempo de bloqueio em segundos (5 minutos)
PacketFloodProtection = 1 ; Proteção contra flood de pacotes
MaxPacketsPerSecond = 50 ; Pacotes por segundo máximo por conexão
MaxConnectionPerIP=3 permite que jogadores em NAT compartilhada (família, LAN house) ainda acessem o servidor. Reduza para 2 apenas se houver abuso detectado — valores mais baixos aumentam reclamações de jogadores legítimos em conexões compartilhadas.Passo 8: Bloquear IPs de Data Centers Conhecidos
Crie ou edite C:\MuServer\ConnectServer\IPBanList.txt. Adicione ranges de IPs de provedores de VPS frequentemente usados por bot farms:
# Formato: IP_INICIO IP_FIM
# Exemplos de ranges de datacenters comuns
185.220.0.0 185.220.255.255
198.96.0.0 198.96.255.255
Parte 4 — Monitoramento e Resposta
Passo 9: Query de Revisão Diária
Execute esta query toda manhã no SSMS para revisar a fila de suspeitos:
USE MuOnline;
GO
SELECT
LogID,
AccountID,
CharacterName,
SuspectReason,
KillsPerHour,
OnlineHours,
DetectedAt,
CASE ReviewStatus
WHEN 0 THEN 'Pendente'
WHEN 1 THEN 'Confirmado Bot'
WHEN 2 THEN 'Falso Positivo'
END AS Status
FROM dbo.AntiBot_SuspectLog
WHERE ReviewStatus = 0
ORDER BY DetectedAt DESC;
Passo 10: Banir Conta Confirmada como Bot
Após revisão e confirmação manual, execute:
USE MuOnline;
GO
-- Substitua 'ContaSuspeita' pelo AccountID real
UPDATE MEMB_INFO
SET bloc_code = 1
WHERE memb___id = 'ContaSuspeita';
-- Registrar o banimento no log de auditoria
UPDATE dbo.AntiBot_SuspectLog
SET ReviewStatus = 1
WHERE AccountID = 'ContaSuspeita'
AND ReviewStatus = 0;
-- Opcional: desconectar imediatamente se ainda online
UPDATE MEMB_STAT
SET ConnStatus = 0
WHERE memb___id = 'ContaSuspeita';
Troubleshooting
O GameServer ignora as configurações do AntiBot.ini Verifique se o arquivo está no diretório correto (GameServer\Data\) e se AntiBotEnable = 1 existe no GameServer.exe.cfg. Alguns compilados de GameServer requerem reinicialização completa — não apenas reload de configuração.
A SP_AntiBot_DetectSuspects não insere registros Confirme que as tabelas MEMB_STAT e Character existem no banco MuOnline e que a coluna ConnStatus usa valor 1 para online. Isso pode variar conforme a versão do servidor — verifique com: SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MEMB_STAT'.
Muitos falsos positivos sendo gerados Aumente o threshold de KillsPerHour para 1200 ou 1500 e aumente o mínimo de horas online para detecção de sessão longa para 24 horas. Calibre baseado no comportamento real dos seus jogadores top — consulte o ranking de kills do servidor como referência.
SQL Server Agent não executa o job Verifique no histórico do job (SSMS → SQL Server Agent → Jobs → botão direito no job → View History). Causas comuns: permissão insuficiente no usuário de serviço do SQL Agent, ou banco MuOnline offline no momento da execução agendada.
Ban pelo bloc_code não funciona ao logar Verifique se o nome exato da coluna no seu schema é bloc_code. Em alguns builds o campo pode se chamar block_code ou IsBlock. Confirme com: SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MEMB_INFO' AND COLUMN_NAME LIKE '%block%'.
Perguntas frequentes
O anti-bot nativo do MuServer é suficiente para proteger o servidor?
O anti-bot nativo oferece uma camada básica de proteção, mas sozinho não é suficiente. É recomendado combinar as configurações do GameServer com verificações SQL periódicas, bloqueio de portas no firewall e verificação de integridade do cliente (checksums) para uma proteção em camadas mais robusta.
Como identificar se um personagem está usando bot pelo banco de dados?
Consulte a tabela MEMB_STAT comparando LastLoginDate e LastLogoutDate com padrões de XP excessivo em janelas de tempo fixas. Monitore também a tabela Character verificando PkCount acumulado por hora — bots de grinding ultrapassam 1000 kills/hora consistentemente por várias horas seguidas, algo impossível para um humano.
Qual o intervalo recomendado para QuestionInterval no AntiBot.ini?
Para Season 6, o valor recomendado é 1800 segundos (30 minutos). Intervalos abaixo de 900 segundos irritam jogadores legítimos em grinding legítimo. Valores acima de 7200 segundos (2 horas) permitem que bots operem por períodos longos demais entre verificações.
O que fazer quando o anti-bot causa desconexões em jogadores legítimos?
Aumente AntiBotCheckTime para 1000ms e revise o threshold de MaxPacketsPerSec — valores abaixo de 150 causam kicks durante o uso de habilidades com múltiplos projéteis (BK Combo, Elf multi-shot). Verifique também se o Main.exe do cliente está na versão correta, pois versões desatualizadas disparam falsos positivos no filtro de pacotes.