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

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.

EQ Equipe ViciadosMU · Atualizado em 1 jul 2026 · ⏱ 20 min de leitura
Resposta rápida

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:

  1. Usar uma versão modificada do GameGuard que não faz a autenticação online;
  2. Ou configurar gameguard.ini (se disponível na distribuição) com URL própria;
  3. Ou usar uma versão do cliente sem GameGuard.
Atenção: O GameGuard original requer licença e servidor de autenticação da nProtect. Servidores privados tipicamente usam versões antigas ou modificadas que não fazem autenticação remota. A eficácia dessas versões é limitada — foque nas proteções server-side.

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
Nota: Os nomes exatos dos parâmetros variam por distribuição de GameServer. Nos S6 Episode 1-3, os parâmetros se chamam assim. Outras versões podem ter nomes ligeiramente diferentes — consulte a documentação da sua distribuição.

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
Dica: A proteção mais eficaz não é o GameGuard — é uma comunidade ativa e GMs presentes. A maioria dos hacks em servidores privados é detectada por outros jogadores que reportam. Configure um canal de report no Discord e responda rapidamente: isso desencoraja hackers mais do que qualquer solução técnica.

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).

EQ

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

Continue lendo

Artigos relacionados