Configurar GameGuard e anti-cheat no servidor de MU Online
Configure a proteção anti-cheat do servidor de MU Online — GameGuard, HackShield, configurações no Main e GameServer.ini, detecção de speeds, walling e hacks conhecidos.
A proteção anti-cheat do servidor de MU Online opera em duas camadas: proteção no cliente (GameGuard, HackShield) e validação no servidor (GameServer.ini). A camada mais eficaz é sempre a do servidor — um cliente protegido pode ser bypassado, mas o servidor detecta comportamentos impossíveis indepen
A proteção anti-cheat do servidor de MU Online opera em duas camadas: proteção no cliente (GameGuard, HackShield) e validação no servidor (GameServer.ini). A camada mais eficaz é sempre a do servidor — um cliente protegido pode ser bypassado, mas o servidor detecta comportamentos impossíveis independente do que o cliente diz.
Arquitetura da proteção anti-cheat
CLIENTE
├── Main.exe (cliente MU)
├── GameGuard/ (ou HackShield/) — verifica processos suspeitos no PC
└── npgl.exe / npgamemon.exe — processos do GameGuard
↓ pacotes TCP ↓
SERVIDOR (GameServer)
├── Validação de movimentos (SpeedHack check)
├── Validação de coordenadas (WallHack check)
├── Validação de dano (máximo de dano possível)
├── Validação de EXP por tick
└── Log de ações suspeitas
GameGuard — configuração no servidor
Arquivos do GameGuard (no cliente)
O GameGuard fica na pasta do cliente:
MU Online/
└── GameGuard/
├── GameGuard.des ← arquivo de configuração criptografado
├── npgl.erl ← engine do GameGuard (Linux version)
├── GameMon.des ← configuração de processos monitorados
└── npgamemon.exe ← processo que fica em background
Configurar a URL do servidor GameGuard
O GameGuard autentica com um servidor da nProtect. Para servidores privados, isso geralmente significa:
- Usar uma versão modificada do GameGuard que não faz a autenticação online;
- Ou configurar
gameguard.ini(se disponível na distribuição) com URL própria; - Ou usar uma versão do cliente sem GameGuard.
GameServer.ini — Configurações anti-hack
; GameServer.ini — seção de segurança anti-hack
[HACK_CHECK]
SpeedHackEnable=1 ; 1=ativo, 0=desativo
SpeedHackCheck=600 ; verificar a cada 600ms
SpeedHackPenalty=1 ; 1=banir, 0=apenas kick
SpeedHackBanTime=24 ; tempo de ban em horas (0=permanente)
SpeedHackLog=1 ; logar detecções
WallHackEnable=1 ; verificar se o jogador atravessou parede
WallHackPenalty=1 ; banir ao detectar
FloodPacketEnable=1 ; detectar flood de pacotes
FloodPacketLimit=100 ; max pacotes por segundo por conexão
FloodPacketBanTime=1 ; ban 1 hora
MaxDamageEnable=1 ; verificar dano impossível
MaxDamageMultiplier=3 ; max dano = 3x do máximo teórico da classe/level
HackBanType=1 ; 0=kick, 1=ban temporário, 2=ban permanente
HackBanLog=1 ; logar no banco
[LOG]
HackLogFile=Logs/hack_log.txt
HackLogDB=1 ; logar no banco de dados também
Proteções server-side (as mais eficazes)
SpeedHack Detection
O GameServer calcula a velocidade máxima possível de movimento de cada classe:
Velocidade base (tiles/segundo):
Dark Wizard: 1 tile/100ms = 10 tiles/s
Dark Knight: 1 tile/120ms = 8.3 tiles/s
Elf: 1 tile/110ms = 9 tiles/s
(varia com Agility e itens de velocidade)
Se o personagem se moveu 50 tiles em 1 segundo e o máximo seria 10 tiles, é speedhack.
WallHack Detection
O GameServer verifica se a trajetória entre dois pontos passa por paredes/água/colisão:
; Ativar verificação de colisão server-side
WallCheckEnable=1
WallCheckStrict=1 ; 1=verificação estrita de trajetória
Proteção contra DupeHack (duplicação de itens)
-- Script para verificar duplicação de itens suspeitos
-- Detecta personagens com mais Gold Zen ou itens únicos do que deveriam ter
SELECT CharName, Money, cLevel
FROM Character
WHERE Money > 2000000000 -- mais de 2 bilhões de zen (suspeito no S6)
ORDER BY Money DESC;
-- Verificar itens únicos duplicados (ex: Chaos Card)
SELECT Inventory, COUNT(*) as qtd
FROM Character_Items
WHERE ItemGroup = 14 AND ItemNumber = 16 -- Chaos Card
GROUP BY Inventory
HAVING COUNT(*) > 1;
Validação de experiência por tick
; Limitar EXP ganho por morte de monstro para detectar hacks de EXP
[EXP_LIMIT]
MaxExpPerKill=0 ; 0=sem limite (usar cálculo dinâmico)
ExpHackDetect=1 ; detectar ganhos impossíveis de EXP
ExpHackMultiplier=5 ; se ganho > 5x o máximo teórico, detectar
HackShield — alternativa ao GameGuard
Algumas distribuições de MuServer incluem HackShield da AhnLab ao invés de GameGuard:
MU Online/
└── HShield/
├── HShield.erl
├── HSUpdate.exe ← atualizador do HShield
└── HSMonitor.dll
Configuração básica do HackShield
; HShield.ini (se disponível)
[HackShield]
Enable=1
UpdateCheck=0 ; 0=não verificar update online (offline mode)
ProcessCheck=1 ; verificar processos suspeitos
MemoryCheck=1 ; verificar memória do processo do jogo
CheatPrograms=1 ; bloquear programas de cheat conhecidos
Lista de hacks mais comuns e como detectar/bloquear
1. SpeedHack (movimento acelerado)
Como funciona: ferramenta modifica o timer do Windows para acelerar todos os processos.
Detecção: comparar tempo entre pacotes de movimento com a velocidade máxima da classe.
Solução:
SpeedHackEnable=1
SpeedHackCheck=300 ; verificar a cada 300ms para detecção mais rápida
SpeedHackPenalty=1
2. WallHack / Teleport Hack
Como funciona: envia pacotes de movimento para coordenadas inválidas ou atrás de paredes.
Detecção: verificar se a trajetória passa por tiles bloqueados no mapa.
Solução:
WallHackEnable=1
TeleportHackEnable=1 ; verificar teleportes impossíveis
MaxTeleportDistance=5 ; máximo de tiles para um "warp" legítimo
3. PacketHack / Duplication
Como funciona: captura e repete pacotes de itens ou XP para duplicar recursos.
Detecção: verificar se um pacote idêntico foi recebido duas vezes em pouco tempo.
Solução:
PacketDuplicateCheck=1
PacketTimeWindow=1000 ; janela de 1000ms para detectar duplicatas
4. AutoPotion / Bot
Como funciona: programa externo clica automaticamente ou envia pacotes de poção.
Detecção: difícil — comportamento parece humano. Verificar mouse de jogo com padrão de clicks suspeito.
Solução parcial:
- Implementar CAPTCHA no login do site;
- Verificar IP com muitas contas conectadas simultaneamente;
- Limitar regeneração de poção mínima.
5. ItemHack / WurmHole
Como funciona: move itens entre slots sem validação do servidor.
Detecção: validar que o item existe no slot de origem antes de mover.
InventoryCheckEnable=1 ; validar inventário a cada transação de item
Banco de dados — tabelas de log de hack
-- Criar tabela de log de hacks detectados
CREATE TABLE HackLog (
LogID INT IDENTITY(1,1) PRIMARY KEY,
CharName VARCHAR(16) NOT NULL,
AccountID VARCHAR(10) NOT NULL,
HackType VARCHAR(50) NOT NULL, -- SpeedHack, WallHack, etc.
Details VARCHAR(256) NULL, -- detalhes do hack
IPAddress VARCHAR(16) NULL,
DetectedAt DATETIME NOT NULL DEFAULT GETDATE(),
BanApplied BIT NOT NULL DEFAULT 0,
BanExpiry DATETIME NULL
);
GO
-- Verificar histórico de hacks de uma conta
SELECT h.CharName, h.HackType, h.DetectedAt, h.BanApplied
FROM HackLog h
WHERE h.AccountID = 'suspeito1'
ORDER BY h.DetectedAt DESC;
-- Contar hacks por tipo nos últimos 7 dias
SELECT HackType, COUNT(*) as Ocorrencias
FROM HackLog
WHERE DetectedAt >= DATEADD(DAY, -7, GETDATE())
GROUP BY HackType
ORDER BY Ocorrencias DESC;
Ban manual de hackers via SQL
-- Ban temporário (24 horas)
DECLARE @expiry DATETIME = DATEADD(HOUR, 24, GETDATE());
UPDATE MEMB_INFO
SET bloc_code = 1,
bloc_memo = 'SpeedHack detectado',
bloc_sDate = GETDATE(),
bloc_eDate = @expiry
WHERE memb_id = 'contaHacker';
-- Ban permanente
UPDATE MEMB_INFO
SET bloc_code = 1,
bloc_memo = 'Cheater permanente',
bloc_sDate = GETDATE(),
bloc_eDate = '9999-12-31'
WHERE memb_id = 'contaHacker';
-- Desbanir (errou o ban)
UPDATE MEMB_INFO
SET bloc_code = 0
WHERE memb_id = 'contaInocente';
Configurar proteção adicional: limite de contas por IP
-- Criar tabela de controle de IP
CREATE TABLE LoginIPLog (
LogID INT IDENTITY(1,1) PRIMARY KEY,
AccountID VARCHAR(10) NOT NULL,
IPAddress VARCHAR(16) NOT NULL,
LoginAt DATETIME NOT NULL DEFAULT GETDATE()
);
GO
-- Ver IPs com muitas contas (possível multi-client hack ou bot farm)
SELECT IPAddress, COUNT(DISTINCT AccountID) as Contas
FROM LoginIPLog
WHERE LoginAt >= DATEADD(HOUR, -1, GETDATE())
GROUP BY IPAddress
HAVING COUNT(DISTINCT AccountID) > 5 -- mais de 5 contas diferentes do mesmo IP
ORDER BY Contas DESC;
Checklist de segurança anti-cheat
CONFIGURAÇÕES NO GAMESERVER.INI
[ ] SpeedHackEnable=1 ativo
[ ] WallHackEnable=1 ativo
[ ] FloodPacketEnable=1 ativo
[ ] MaxDamageEnable=1 ativo
[ ] HackBanType configurado (ban vs kick)
BANCO DE DADOS
[ ] Tabela HackLog criada
[ ] Queries de monitoramento salvas
[ ] Ban permanente/temporário funcionando
MONITORAMENTO
[ ] Log de hack revisado semanalmente
[ ] Alertas configurados para hacks frequentes
[ ] GMs com ferramenta de ban via SQL ou comando /ban
CLIENTE
[ ] Cliente com GameGuard ou HackShield incluído
[ ] Versão do cliente com patches anti-hack aplicados
[ ] Main editado para remover botões/menus não usados
REDE
[ ] SQL Server não exposto externamente (porta 1433 bloqueada)
[ ] DataServer/JoinServer não acessíveis externamente
[ ] Apenas 44405 e 55901 abertas para jogadores
Perguntas frequentes
GameGuard ainda funciona no MU Online?
O GameGuard original do MU está desatualizado e é facilmente bypassado por ferramentas modernas. Muitos servidores privados usam versões antigas do GameGuard por compatibilidade com o cliente, mas sua eficácia é limitada.
Existe alternativa ao GameGuard para servidor privado?
Alguns servidores usam HackShield, XTrap ou implementam verificações server-side no GameServer. A proteção mais eficaz é sempre a verificação no lado do servidor (speed check, validação de coordenadas, limites de experiência por tick).
Como detectar speedhack no servidor?
O GameServer pode calcular se o jogador se moveu mais do que é fisicamente possível no tempo decorrido entre duas posições. Implementações custom de GameServer têm esse recurso — o original da Webzen também, configurável via SpeedHackEnable e SpeedHackPenalty.
Ban por GameGuard é permanente?
Na configuração padrão, depende do parâmetro HackBanTime no GameServer.ini — pode ser temporário (ex: 24 horas) ou permanente (bloc_code=1 no banco).