O maior portal de MU Online do Brasil — desde 2003
Tutorial Intermediário Tutoriais

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.

EQ Equipe ViciadosMU · Atualizado em 3 jul 2026 · ⏱ 12 min de leitura

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
Atenção: Sempre realize um backup completo dos arquivos de configuração e do banco de dados antes de modificar qualquer parâmetro de segurança. Uma configuração incorreta no anti-bot pode causar desconexões em massa ou impedir logins legítimos.

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\
Atenção: Mantenha 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
Dica: Use perguntas simples e diretas adaptadas ao seu público brasileiro. Configure o servidor para processar respostas como case-insensitive para evitar falhas por capitalização. Evite acentos nas respostas esperadas — muitos teclados de jogadores não os inserem corretamente.

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

  1. Abra o SSMS → expanda SQL Server Agent → clique com botão direito em JobsNew Job
  2. Name: AntiBot_Scan_Automatico
  3. Na aba StepsNew Step:
  • Step name: Executar Deteccao
  • Type: Transact-SQL script (T-SQL)
  • Database: MuOnline
  • Command: EXEC dbo.SP_AntiBot_DetectSuspects;
  1. Na aba SchedulesNew Schedule:
  • Name: A_cada_30_minutos
  • Frequency: Daily
  • Sub-frequency: Every 30 minutes
  • Start time: 00:00:00, End time: 23:59:59
Nota: O SQL Server Agent deve estar rodando como serviço Windows. Verifique em Serviços do Windows (services.msc) que 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
Dica: O valor 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
Dica: Consulte ASNs associados a datacenters em ipinfo.io e abuseipdb.com. Foque em bloquear IPs de regiões onde sua base de jogadores não se encontra.

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';
Atenção: Sempre salve evidências antes de banir: capture um print da query de detecção com os dados do suspeito. Em caso de contestação por parte do jogador, você terá evidências concretas de comportamento automatizado.

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.

EQ

Equipe ViciadosMU

Equipe editorial do ViciadosMU — portal de MU Online no ar desde 2003.

Continue lendo

Artigos relacionados