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.
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
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...
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
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;
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.
curl enviando um POST para seu webhook: curl -H "Content-Type: application/json" -d "{\"content\":\"Alerta anticheat detectado!\"}" https://discord.com/api/webhooks/SEU_WEBHOOKTroubleshooting
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=2ativo e testado emGameServerInfo.iniClientHashCheck=1com hashes SHA256 corretos no ConnectServer- Delays de habilidade configurados por classe em
SkillDelay.ini - View
V_ItemDuplicateDetectcriada e retornando resultados vazios SP_AuditarAtividadeSuspeitaagendada no SQL Server Agent- Script de monitoramento agendado no Agendador de Tarefas
AutoBan.iniconfigurado 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.