O maior portal de MU Online do Brasil — desde 2003
Tutorial Avançado Tutoriais

Como Configurar Anticheat Avançado no Servidor de MU Online

Aprenda a configurar proteção anticheat avançada no seu servidor MU Online com filtros de packet, validações SQL e monitoramento em tempo real.

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

Proteger um servidor MU Online privado contra trapaças é um dos maiores desafios de administração. Hacks de velocidade, packet injection, duplicação de itens e bots automatizados destroem a experiência dos jogadores legítimos. Este guia cobre a configuração de múltiplas camadas de proteção — do nível de arquivo de configuração até validações SQL — para servidores baseados em MuServer Season 6.

Por que uma Única Camada de Proteção Não Basta

Soluções anticheat de camada única são contornadas com facilidade. A abordagem eficaz combina:

  • Validação no GameServer (filtros de packet, checagem de posição)
  • Verificação de integridade do cliente (hash de arquivos no ConnectServer)
  • Detecção por SQL (auditoria de transações anômalas no banco)
  • Monitoramento de log em tempo real (alertas automáticos)

Cada camada cobre brechas das outras. Configure todas antes de abrir o servidor ao público.


Etapa 1 — Configurar Filtros de Packet no GameServer

O GameServer processa todos os pacotes enviados pelos clientes. Ativar o filtro de packet rejeita automaticamente pacotes malformados ou fora de sequência.

Arquivo: GameServer/Data/Config/GameServerInfo.ini

; Filtro de pacotes — nível 0 desativado, 1 básico, 2 avançado
PacketFilterLevel=2

; Rejeitar pacotes com tamanho inválido
PacketSizeCheck=1

; Limite de pacotes por segundo por conexão (recomendado: 150–300)
PacketRateLimit=200

; Bloquear IPs após X pacotes inválidos consecutivos
PacketInvalidLimit=10

; Tempo de banimento temporário em segundos
PacketBanTime=300
Atenção: Valores de PacketRateLimit abaixo de 150 podem causar desconexões legítimas durante eventos com muitos jogadores. Teste em ambiente de staging antes de aplicar em produção.

Reinicie o GameServer após a edição. Verifique GameServer/Log/PacketFilter.log para confirmar que o filtro está ativo.


Etapa 2 — Ativar Verificação de Integridade do Cliente

O ConnectServer pode verificar o hash dos arquivos principais do cliente antes de autorizar a conexão. Isso impede clientes modificados de se conectarem.

Arquivo: ConnectServer/Data/CSConfig.ini

; Ativar verificação de hash do cliente
ClientHashCheck=1
HashMethod=SHA256

; Lista de arquivos verificados (separados por vírgula)
HashFileList=main.exe,data\Monster.bmd,data\Item.bmd,data\Skill.bmd

; Caminho para o arquivo com os hashes esperados
HashListFile=ConnectServer/Data/ClientHashList.txt

Gerar o arquivo de hashes no PowerShell do servidor:

Get-FileHash "C:\MuClient\main.exe" -Algorithm SHA256 | Select-Object Hash
Get-FileHash "C:\MuClient\data\Monster.bmd" -Algorithm SHA256 | Select-Object Hash

Formato de ClientHashList.txt:

main.exe=A3F2C1D4E5B6...hash_sha256_completo...
data\Monster.bmd=7B8C9D0E1F2A...hash_sha256_completo...
data\Item.bmd=4D5E6F7A8B9C...hash_sha256_completo...
data\Skill.bmd=1E2F3A4B5C6D...hash_sha256_completo...
Nota: Atualize o ClientHashList.txt sempre que lançar um patch de cliente. Hashes desatualizados vão bloquear todos os jogadores na próxima atualização.

Etapa 3 — Configurar Proteção Anti Speed Hack

Edite o arquivo de delay de habilidades para estabelecer limites de tempo mínimos entre ações:

Arquivo: GameServer/Data/Config/SkillDelay.ini

; Delay mínimo entre ataques por classe (em milissegundos)
[SkillDelay]
DarkKnight=400
DarkWizard=450
FairyElf=350
MagicGladiator=420
DarkLord=400
Summoner=460
RageFighter=380

; Delay mínimo de movimento (abaixo = speed hack)
MovementDelayMin=100

; Ativar log de detecção de speed hack
SpeedHackLog=1
SpeedHackLogFile=GameServer/Log/SpeedHackDetect.log

Ativar log de posição em GameServerInfo.ini:

MoveLogSave=1
MoveLogFile=GameServer/Log/MoveLog.txt
Dica: Revise SpeedHackDetect.log diariamente durante as primeiras semanas após configuração. Jogadores com conexão de alta latência podem disparar falsos positivos — ajuste MovementDelayMin para cima se necessário.

Etapa 4 — Validações SQL para Detectar Duplicação de Itens

Crie uma view no SQL Server para monitorar transações anômalas no armazém e inventário:

USE MuOnline
GO

-- View para detectar itens duplicados (mesmo serial em múltiplos inventários)
CREATE OR ALTER VIEW V_ItemDuplicateDetect AS
SELECT
    i.Serial,
    COUNT(*) AS OcorrenciasTotal,
    STRING_AGG(i.AccountID + '/' + i.CharacterName, ', ') AS Donos,
    i.ItemIndex,
    i.ItemLevel
FROM (
    SELECT Serial, AccountID, CharacterName, ItemIndex, ItemLevel
    FROM InventoryItems
    UNION ALL
    SELECT Serial, AccountID, CharacterName, ItemIndex, ItemLevel
    FROM WarehouseItems
    UNION ALL
    SELECT Serial, AccountID, CharacterName, ItemIndex, ItemLevel
    FROM PersonalShopItems
) i
GROUP BY i.Serial, i.ItemIndex, i.ItemLevel
HAVING COUNT(*) > 1;
GO

-- Consulta de auditoria — execute diariamente
SELECT * FROM V_ItemDuplicateDetect
ORDER BY OcorrenciasTotal DESC;

Para detectar acumulação anormal de Zen (possível duplication exploit):

SELECT
    AccountID,
    CharacterName,
    Money,
    GETDATE() AS CheckedAt
FROM Character
WHERE Money > 2000000000  -- 2 bilhões de zen
ORDER BY Money DESC;
Atenção: Nunca delete diretamente itens suspeitos sem primeiro mover para uma tabela de quarentena. Use INSERT INTO ItemQuarantine SELECT * FROM InventoryItems WHERE Serial = 'xxx' antes de qualquer remoção.

Etapa 5 — Criar Stored Procedure de Auditoria Automatizada

USE MuOnline
GO

CREATE OR ALTER PROCEDURE SP_AuditarAtividadeSuspeita
AS
BEGIN
    SET NOCOUNT ON;

    -- Log de contas com múltiplos logins simultâneos do mesmo IP
    INSERT INTO AuditLog (Tipo, Descricao, DataHora)
    SELECT
        'MultiLogin',
        'IP: ' + IP + ' | Contas: ' + STRING_AGG(AccountID, ', '),
        GETDATE()
    FROM ConnectLog
    WHERE DataHora >= DATEADD(MINUTE, -5, GETDATE())
    GROUP BY IP
    HAVING COUNT(DISTINCT AccountID) > 3;

    -- Log de drops de itens com valor anormalmente alto em curto período
    INSERT INTO AuditLog (Tipo, Descricao, DataHora)
    SELECT
        'ItemDropAnomalo',
        'Char: ' + CharacterName + ' | Drops: ' + CAST(TotalDrops AS VARCHAR),
        GETDATE()
    FROM (
        SELECT CharacterName, COUNT(*) AS TotalDrops
        FROM ItemDropLog
        WHERE DataHora >= DATEADD(MINUTE, -10, GETDATE())
        GROUP BY CharacterName
        HAVING COUNT(*) > 50
    ) t;
END;
GO

-- Agendar a procedure via SQL Server Agent (a cada 5 minutos)
-- Execute no SQL Server Agent > New Job > Step:
EXEC SP_AuditarAtividadeSuspeita;

Etapa 6 — Configurar Banimento Automático por Regras

Arquivo: GameServer/Data/Config/AutoBan.ini

[AutoBan]
; Ativar sistema de banimento automático
Enabled=1

; Ban temporário em minutos por hack de velocidade confirmado
SpeedHackBanMinutes=1440

; Ban permanente após X ocorrências temporárias
PermanentBanAfterCount=3

; Notificar GM via canal especial quando ban for aplicado
NotifyGM=1
GMNotifyChannel=1

Etapa 7 — Monitoramento com Script de Alerta

Crie C:\MuServer\Scripts\monitor_anticheat.bat para alertas periódicos:

@echo off
:: Verifica tamanho do log de speed hack e envia alerta se crescer muito
set LOG_FILE=C:\MuServer\GameServer\Log\SpeedHackDetect.log
set MAX_LINES=100

for /f %%A in ('type "%LOG_FILE%" ^| find /c /v ""') do set LINE_COUNT=%%A

if %LINE_COUNT% GTR %MAX_LINES% (
    echo [%date% %time%] ALERTA: SpeedHackDetect.log com %LINE_COUNT% linhas >> C:\MuServer\Scripts\anticheat_alerts.log
    :: Adicione aqui integração com Discord Webhook ou e-mail
)

Agende este script no Agendador de Tarefas do Windows para rodar a cada 15 minutos.

Dica: Para integração com Discord, substitua a linha de echo por um comando curl enviando um POST para seu webhook: curl -H "Content-Type: application/json" -d "{\"content\":\"Alerta anticheat detectado!\"}" https://discord.com/api/webhooks/SEU_WEBHOOK

Troubleshooting

GameServer não inicia após configurar PacketFilterLevel=2: Verifique se a build do GameServer suporta este nível. Builds mais antigas (S6 EP1) suportam apenas nível 1. Consulte o GameServer/Log/GS_Error.log para o erro exato.

Jogadores legítimos sendo banidos por speed hack: Aumente MovementDelayMin em 20ms por vez até os falsos positivos cessarem. Latências acima de 200ms podem causar detecções incorretas.

A view V_ItemDuplicateDetect retorna erro de compatibilidade: STRING_AGG requer SQL Server 2017+. Para versões anteriores, substitua por STUFF((SELECT ...), 1, 2, '') com FOR XML PATH.

ConnectServer rejeitando todos os clientes após ativar HashCheck: Confirme que o arquivo ClientHashList.txt usa codificação UTF-8 sem BOM e que os hashes foram gerados do cliente exato distribuído aos jogadores.


Checklist Final de Segurança

Antes de considerar a configuração completa, verifique cada item:

  • PacketFilterLevel=2 ativo e testado em GameServerInfo.ini
  • ClientHashCheck=1 com hashes SHA256 corretos no ConnectServer
  • Delays de habilidade configurados por classe em SkillDelay.ini
  • View V_ItemDuplicateDetect criada e retornando resultados vazios
  • SP_AuditarAtividadeSuspeita agendada no SQL Server Agent
  • Script de monitoramento agendado no Agendador de Tarefas
  • AutoBan.ini configurado com limites adequados para seu servidor
  • Logs sendo rotacionados semanalmente para evitar crescimento excessivo

A segurança de um servidor é um processo contínuo. Revise os logs semanalmente, atualize os hashes do cliente a cada patch e ajuste os limites conforme o comportamento real dos jogadores.

Perguntas frequentes

O GS trava ao ativar o filtro de packet — o que fazer?

Verifique se a versão do seu GameServer suporta PacketFilter. Edite GameServer/Data/Config/GameServerInfo.ini e confirme que a linha PacketFilterLevel existe. Se o servidor for S6 Episode 3, o valor máximo suportado é 2.

Como saber se um jogador está usando speed hack?

Ative o log de movimento em GameServer/Log/MoveLog.txt via MoveLogSave=1 no GameServerInfo.ini. Velocidades acima de 800 unidades/tick indicam speed hack. Você também pode consultar a view V_SpeedHackDetect no banco se tiver um sistema de log SQL ativo.

O anticheat bloqueia habilidades legítimas — como ajustar?

Ajuste o parâmetro SkillDelayMin em GameServer/Data/Config/SkillDelay.ini. Para classes como BK, o valor recomendado é 400ms; para Elf, 350ms. Reduza gradualmente até parar os falsos positivos.

Devo usar hash MD5 ou SHA256 para verificação de cliente?

SHA256 é preferível. Configure HashMethod=SHA256 em ConnectServer/Data/CSConfig.ini. O MD5 ainda é suportado em versões legadas (S2–S4), mas é vulnerável a colisões e não deve ser usado em servidores modernos.

EQ

Equipe ViciadosMU

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

Continue lendo

Artigos relacionados