El mayor portal de MU Online de Brasil — desde 2003
Tutorial Avanzado Tutoriais

Cómo Configurar Anticheat Avanzado en el Servidor de MU Online

Aprende a configurar protección anticheat avanzada en tu servidor MU Online con filtros de paquetes, validaciones SQL y monitoreo en tiempo real.

EQ Equipo ViciadosMU · Actualizado el 3 jul 2026 · ⏱ 12 min de lectura

Proteger un servidor privado de MU Online contra trampas es uno de los mayores desafíos de administración. Los hacks de velocidad, la inyección de paquetes, la duplicación de ítems y los bots automatizados destruyen la experiencia de los jugadores legítimos. Esta guía cubre la configuración de múltiples capas de protección — desde el nivel de archivos de configuración hasta validaciones SQL — para servidores basados en MuServer Season 6.

Por Qué una Sola Capa de Protección No Es Suficiente

Las soluciones anticheat de una sola capa se eluden con facilidad. El enfoque efectivo combina:

  • Validación en el GameServer (filtros de paquetes, verificación de posición)
  • Verificación de integridad del cliente (hash de archivos en el ConnectServer)
  • Detección por SQL (auditoría de transacciones anómalas en la base de datos)
  • Monitoreo de logs en tiempo real (alertas automáticas)

Cada capa cubre las brechas de las demás. Configura todas antes de abrir el servidor al público.


Paso 1 — Configurar Filtros de Paquetes en el GameServer

El GameServer procesa todos los paquetes enviados por los clientes. Activar el filtro de paquetes rechaza automáticamente los paquetes malformados o fuera de secuencia.

Archivo: GameServer/Data/Config/GameServerInfo.ini

; Filtro de paquetes — 0 = desactivado, 1 = básico, 2 = avanzado
PacketFilterLevel=2

; Rechazar paquetes con tamaño inválido
PacketSizeCheck=1

; Límite de paquetes por segundo por conexión (recomendado: 150–300)
PacketRateLimit=200

; Bloquear IPs tras X paquetes inválidos consecutivos
PacketInvalidLimit=10

; Duración del bloqueo temporal en segundos
PacketBanTime=300
Atenção: Valores de PacketRateLimit inferiores a 150 pueden causar desconexiones legítimas durante eventos con muchos jugadores. Prueba en un entorno de staging antes de aplicar en producción.

Reinicia el GameServer después de editar. Verifica GameServer/Log/PacketFilter.log para confirmar que el filtro está activo.


Paso 2 — Activar la Verificación de Integridad del Cliente

El ConnectServer puede verificar el hash de los archivos principales del cliente antes de autorizar la conexión. Esto impide que clientes modificados se conecten.

Archivo: ConnectServer/Data/CSConfig.ini

; Activar verificación de hash del cliente
ClientHashCheck=1
HashMethod=SHA256

; Lista de archivos verificados (separados por comas)
HashFileList=main.exe,data\Monster.bmd,data\Item.bmd,data\Skill.bmd

; Ruta al archivo con los hashes esperados
HashListFile=ConnectServer/Data/ClientHashList.txt

Generar el archivo de hashes con PowerShell en el 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: Actualiza ClientHashList.txt cada vez que lances un parche del cliente. Los hashes desactualizados bloquearán a todos los jugadores en la siguiente actualización.

Paso 3 — Configurar la Protección Anti Speed Hack

Edita el archivo de delay de habilidades para establecer tiempos mínimos entre acciones:

Archivo: GameServer/Data/Config/SkillDelay.ini

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

; Delay mínimo de movimiento (por debajo = speed hack)
MovementDelayMin=100

; Activar log de detección de speed hack
SpeedHackLog=1
SpeedHackLogFile=GameServer/Log/SpeedHackDetect.log

Activar log de posición en GameServerInfo.ini:

MoveLogSave=1
MoveLogFile=GameServer/Log/MoveLog.txt
Dica: Revisa SpeedHackDetect.log diariamente durante las primeras semanas tras la configuración. Los jugadores con conexiones de alta latencia pueden generar falsos positivos — sube MovementDelayMin si es necesario.

Paso 4 — Validaciones SQL para Detectar Duplicación de Ítems

Crea una vista en SQL Server para monitorear transacciones anómalas en almacenes e inventarios:

USE MuOnline
GO

-- Vista para detectar ítems duplicados (mismo serial en múltiples inventarios)
CREATE OR ALTER VIEW V_ItemDuplicateDetect AS
SELECT
    i.Serial,
    COUNT(*) AS TotalOcurrencias,
    STRING_AGG(i.AccountID + '/' + i.CharacterName, ', ') AS Propietarios,
    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 auditoría — ejecutar diariamente
SELECT * FROM V_ItemDuplicateDetect
ORDER BY TotalOcurrencias DESC;

Para detectar acumulación anormal de Zen (posible exploit de duplicación):

SELECT
    AccountID,
    CharacterName,
    Money,
    GETDATE() AS CheckedAt
FROM Character
WHERE Money > 2000000000  -- 2 mil millones de zen
ORDER BY Money DESC;
Atenção: Nunca elimines directamente ítems sospechosos. Primero muévelos a una tabla de cuarentena: INSERT INTO ItemQuarantine SELECT * FROM InventoryItems WHERE Serial = 'xxx' antes de cualquier eliminación.

Paso 5 — Crear un Stored Procedure de Auditoría Automatizada

USE MuOnline
GO

CREATE OR ALTER PROCEDURE SP_AuditarActividadSospechosa
AS
BEGIN
    SET NOCOUNT ON;

    -- Registrar cuentas con múltiples logins simultáneos desde la misma IP
    INSERT INTO AuditLog (Tipo, Descripcion, FechaHora)
    SELECT
        'MultiLogin',
        'IP: ' + IP + ' | Cuentas: ' + STRING_AGG(AccountID, ', '),
        GETDATE()
    FROM ConnectLog
    WHERE FechaHora >= DATEADD(MINUTE, -5, GETDATE())
    GROUP BY IP
    HAVING COUNT(DISTINCT AccountID) > 3;

    -- Registrar drops de ítems con valor anormalmente alto en poco tiempo
    INSERT INTO AuditLog (Tipo, Descripcion, FechaHora)
    SELECT
        'DropItemAnomalo',
        'Char: ' + CharacterName + ' | Drops: ' + CAST(TotalDrops AS VARCHAR),
        GETDATE()
    FROM (
        SELECT CharacterName, COUNT(*) AS TotalDrops
        FROM ItemDropLog
        WHERE FechaHora >= DATEADD(MINUTE, -10, GETDATE())
        GROUP BY CharacterName
        HAVING COUNT(*) > 50
    ) t;
END;
GO

-- Programar el procedure en SQL Server Agent (cada 5 minutos)
-- En SQL Server Agent > New Job > Step, ejecuta:
EXEC SP_AuditarActividadSospechosa;

Paso 6 — Configurar Reglas de Baneo Automático

Archivo: GameServer/Data/Config/AutoBan.ini

[AutoBan]
; Activar sistema de baneo automático
Enabled=1

; Baneo temporal en minutos por speed hack confirmado
SpeedHackBanMinutes=1440

; Baneo permanente tras X baneos temporales
PermanentBanAfterCount=3

; Notificar al GM por canal especial cuando se aplique un baneo
NotifyGM=1
GMNotifyChannel=1

Paso 7 — Monitoreo con Script de Alertas

Crea C:\MuServer\Scripts\monitor_anticheat.bat para alertas periódicas:

@echo off
:: Verifica el tamaño del log de speed hack y alerta si crece demasiado
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 tiene %LINE_COUNT% lineas >> C:\MuServer\Scripts\anticheat_alerts.log
    :: Agrega aquí integración con Discord Webhook o correo electrónico
)

Programa este script en el Programador de tareas de Windows para que se ejecute cada 15 minutos.

Dica: Para integración con Discord, reemplaza la línea del echo con un comando curl enviando un POST a tu webhook: curl -H "Content-Type: application/json" -d "{\"content\":\"Alerta anticheat activada!\"}" https://discord.com/api/webhooks/TU_WEBHOOK

Resolución de Problemas

El GameServer no inicia después de configurar PacketFilterLevel=2: Verifica que tu build del GameServer soporte este nivel. Builds más antiguas (S6 EP1) solo soportan nivel 1. Consulta GameServer/Log/GS_Error.log para el error exacto.

Jugadores legítimos están siendo baneados por speed hack: Aumenta MovementDelayMin de 20ms en 20ms hasta que los falsos positivos cesen. Latencias superiores a 200ms pueden causar detecciones incorrectas.

La vista V_ItemDuplicateDetect devuelve un error de compatibilidad: STRING_AGG requiere SQL Server 2017 o superior. Para versiones anteriores, sustitúyelo con STUFF((SELECT ...), 1, 2, '') usando FOR XML PATH.

ConnectServer rechaza a todos los clientes tras activar HashCheck: Confirma que ClientHashList.txt usa codificación UTF-8 sin BOM y que los hashes fueron generados del cliente exacto distribuido a los jugadores.


Lista de Verificación Final de Seguridad

Antes de dar la configuración por completa, verifica cada elemento:

  • PacketFilterLevel=2 activo y probado en GameServerInfo.ini
  • ClientHashCheck=1 con hashes SHA256 correctos en el ConnectServer
  • Delays de habilidad configurados por clase en SkillDelay.ini
  • Vista V_ItemDuplicateDetect creada y retornando resultados vacíos
  • SP_AuditarActividadSospechosa programado en SQL Server Agent
  • Script de monitoreo programado en el Programador de tareas de Windows
  • AutoBan.ini configurado con límites apropiados para tu servidor
  • Logs rotados semanalmente para evitar crecimiento excesivo

La seguridad de un servidor es un proceso continuo. Revisa los logs semanalmente, actualiza los hashes del cliente con cada parche y ajusta los límites según el comportamiento real de los jugadores.

Perguntas frequentes

El GS se cuelga al activar el filtro de paquetes — ¿qué hago?

Verifica si la versión de tu GameServer soporta PacketFilter. Abre GameServer/Data/Config/GameServerInfo.ini y confirma que la línea PacketFilterLevel existe. En builds de S6 Episode 3, el valor máximo soportado es 2.

¿Cómo saber si un jugador está usando speed hack?

Activa el registro de movimiento en GameServer/Log/MoveLog.txt mediante MoveLogSave=1 en GameServerInfo.ini. Velocidades superiores a 800 unidades/tick indican speed hack. También puedes consultar la vista V_SpeedHackDetect en la base de datos si tienes un sistema de log SQL activo.

El anticheat bloquea habilidades legítimas — ¿cómo ajustarlo?

Ajusta el parámetro SkillDelayMin en GameServer/Data/Config/SkillDelay.ini. Para clases como BK, el valor recomendado es 400ms; para Elf, 350ms. Reduce gradualmente hasta que los falsos positivos cesen.

¿Debo usar hash MD5 o SHA256 para la verificación del cliente?

SHA256 es la opción preferida. Configura HashMethod=SHA256 en ConnectServer/Data/CSConfig.ini. El MD5 aún se soporta en builds legados (S2–S4), pero es vulnerable a colisiones y no debe usarse en servidores modernos.

EQ

Equipo ViciadosMU

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

Sigue leyendo

Artículos relacionados