Cómo integrar un anti-cheat de terceros en MU Online
Aprende a acoplar un anti-cheat de terceros a tu servidor de MU Online, desde la carga en el cliente hasta la validación en el GameServer, con heartbeat, whitelist de módulos y un plan de rollback para no tumbar a jugadores legítimos.
Integrar un anti-cheat de terceros a tu servidor de MU Online es uno de los pasos más delicados de la administración: bien hecho, cierra agujeros que la protección nativa del emulador no cubre; mal hecho, tumba jugadores legítimos en masa y mancha la reputación del servidor el primer día. La diferen
Integrar un anti-cheat de terceros a tu servidor de MU Online es uno de los pasos más delicados de la administración: bien hecho, cierra agujeros que la protección nativa del emulador no cubre; mal hecho, tumba jugadores legítimos en masa y mancha la reputación del servidor el primer día. La diferencia entre ambos escenarios está en el proceso. Esta guía muestra cómo acoplar una solución externa de forma controlada —cargando el módulo en el cliente, validando su presencia en el servidor vía heartbeat, manteniendo una whitelist y un plan de rollback— para que la protección entre en producción sin volverse un dolor de cabeza. Los nombres de archivos, claves y umbrales citados aquí son ejemplos que varían según la season/emulador; úsalos como referencia de concepto, no como valores absolutos.
Requisitos previos
Antes de tocar cualquier configuración, ten a mano:
- Acceso administrativo al servidor (RDP en el VPS Windows o SSH en Linux) y permiso para reiniciar GameServer, ConnectServer y el servicio del anti-cheat.
- Un entorno de prueba espejo — misma season, mismos archivos de cliente y misma versión de emulador que la que corre en producción. Nunca pruebes el anti-cheat directo en el servidor público.
- Backup completo del cliente (
Main.exey carpeta de datos) y de los archivos de configuración del servidor (GameServerInfo.ini,CSConfig.inio equivalentes). - El paquete del anti-cheat de terceros con su documentación oficial: DLL/ejecutable del módulo, clave de licencia (si la hay) y la guía de integración del proveedor.
- Un canal de alerta ya funcionando (log centralizado, webhook de Discord o email) para recibir los eventos del anti-cheat.
- Conocimiento básico de edición hexadecimal o de patch del
Main.exe, ya que muchas integraciones exigen inyectar la llamada de carga en el cliente.
Si todavía no tienes la base del servidor armada, empieza por la guía de cómo crear un servidor de MU Online y vuelve aquí después de que el entorno esté estable.
Cómo encaja un anti-cheat de terceros en la arquitectura
MU Online es un juego cliente-servidor con un cliente notoriamente frágil: el Main.exe corre en la máquina del jugador, que tiene control total sobre la memoria, los archivos y el tráfico. Un anti-cheat de terceros trabaja justamente en ese territorio hostil, generalmente cumpliendo cuatro funciones:
- Integridad de archivos — calcula el hash de los archivos críticos del cliente y detecta un
Main.exemodificado, DLLs inyectadas o data files adulterados. - Protección de memoria — monitorea el proceso del juego contra lectura/escritura externa, inyección de DLL y hooks de API usados por trainers y speed hacks.
- Detección comportamental — observa patrones (velocidad imposible, teletransporte, ataques fuera de alcance) y los señala.
- Vínculo con el servidor — envía una señal periódica (el heartbeat) probando que el módulo está vivo e íntegro; sin esa señal, el servidor tumba la sesión.
El punto que casi todo administrador principiante falla es creer que basta con que el cliente cargue el anti-cheat. Sin el vínculo del lado del servidor, el jugador simplemente cierra el proceso del anti-cheat y juega libre. La integración real es una vía de doble mano: el cliente ejecuta el módulo y el servidor exige la prueba de que está corriendo.
Capas de protección y dónde entra el tercero
| Capa | Dónde corre | Qué cubre | Quién la provee |
|---|---|---|---|
| Filtro de packets | GameServer | Packets malformados, fuera de secuencia | Nativo del emulador |
| Chequeo de posición/velocidad | GameServer | Speed hack, teletransporte | Nativo del emulador |
| Integridad de cliente | ConnectServer / launcher | Main.exe y data files alterados | Nativo + tercero |
| Protección de memoria | Cliente (proceso del juego) | Trainers, inyección de DLL, hooks | Tercero |
| Heartbeat / attestation | Cliente ↔ GameServer | Módulo cerrado o burlado | Tercero + tu integración |
El anti-cheat de terceros brilla en las dos últimas líneas —protección de memoria y attestation— que son exactamente las más difíciles de hacer solo con el emulador. Las primeras capas siguen siendo responsabilidad del servidor. No desactives nada nativo al agregar el tercero; suma, no reemplaces.
Etapa 1 — Preparar el entorno de prueba espejo
Nunca integres el anti-cheat directo en producción. Arma un espejo:
- Aprovisiona una VPS o máquina separada con el mismo Windows Server y la misma season del servidor real.
- Copia los binarios del servidor y un snapshot reciente de la base (puede ser reducido, con pocas cuentas de prueba).
- Ajusta el
ConnectServerdel cliente de prueba para que apunte a la IP del espejo, no a la pública. - Crea de tres a cinco cuentas de prueba: una "limpia" (cliente íntegro), una con
Main.exealterado, una sin el módulo del anti-cheat y una con un trainer conocido, si tienes uno para probar la detección.
Este espejo es donde ocurre todo el ajuste de umbrales antes de acercarse a los jugadores reales.
Etapa 2 — Cargar el módulo en el cliente
El anti-cheat necesita iniciarse junto con el juego. Hay tres enfoques comunes, del más limpio al más invasivo:
- Por el launcher: el updater/launcher inicia el proceso del anti-cheat y solo entonces levanta el
Main.exe. Es el enfoque preferido porque no toca el binario del juego. - Inyección por el
Main.exe: aplicas un patch al cliente para cargar la DLL del anti-cheat en el startup. Exige backup y edición hexadecimal cuidadosa. - Wrapper/bootstrap: un ejecutable intermedio inicia el anti-cheat, valida y pasa la ejecución al juego.
Ejemplo de configuración del lado del launcher (claves ilustrativas, varían según la season/emulador):
; launcher.ini
[AntiCheat]
Enabled=1
ModulePath=.\anticheat\acmod.exe
StartBeforeClient=1
LicenseKey=TU-CLAVE-AQUI
FailIfMissing=1 ; no levanta el juego si el módulo no inicia
Si FailIfMissing está activado, un cliente sin el módulo ni abre el juego, lo cual es bueno, pero exige que el updater realmente distribuya el módulo a todos. Por eso el launcher y el anti-cheat andan juntos.
Etapa 3 — Configurar el servicio del anti-cheat en el servidor
La mayoría de las soluciones de terceros corre un servicio/daemon del lado del servidor que recibe los reportes de los clientes y expone el veredicto. Configúralo antes de encender cualquier bloqueo:
; acserver.conf (ejemplo — varía según proveedor/season)
listen_port = 44405
heartbeat_interval = 15 ; segundos entre señales del cliente
heartbeat_grace = 45 ; tolerancia antes de considerarlo muerto
mode = log_only ; empieza SIN kick/ban
report_endpoint = http://127.0.0.1:8080/ac/report
webhook_alert = https://discord.com/api/webhooks/...
Fíjate en mode = log_only. Este es el punto más importante de toda la guía. Empiezas solo registrando, nunca castigando. Solo después de observar los datos reales es que subes la severidad.
Etapa 4 — Amarrar el heartbeat al GameServer
El heartbeat es lo que impide que el jugador cierre el anti-cheat y siga jugando. La lógica es:
- El módulo en el cliente envía una señal firmada cada N segundos al servicio del anti-cheat.
- El servicio marca la sesión como "viva" e íntegra.
- El GameServer, en cada tick de mantenimiento, verifica si cada sesión logueada tiene un heartbeat válido dentro de la ventana de tolerancia.
- La sesión sin heartbeat válido dentro de la ventana se tumba (kick).
Si tienes el fuente del GameServer, amarra el chequeo al loop de mantenimiento de conexiones. Si no lo tienes, opera por consulta externa: un pequeño servicio lee el estado del anti-cheat y emite kick vía comando de GM/API para las cuentas sin señal. Pseudocódigo del chequeo:
para cada sesion activa en el GameServer:
status = anticheat.consultar(sesion.account, sesion.ip)
si status.ultimo_heartbeat > ahora - heartbeat_grace:
continua # ok, módulo vivo
sino:
registra_alerta(sesion, "heartbeat ausente")
si mode != log_only:
kick(sesion, motivo="anti-cheat inactivo")
Fíjate de nuevo en el si mode != log_only. Mientras estés en modo log, solo recolectas: nadie es tumbado por error.
Etapa 5 — Whitelist y tratamiento de excepciones
Toda integración necesita válvulas de escape para no castigar a quien no debe:
- Whitelist de cuentas: las cuentas de GM, testers y el equipo de soporte no deben ser tumbadas por reglas comportamentales durante el mantenimiento.
- Whitelist de módulos/procesos: los overlays legítimos (grabadores, herramientas de accesibilidad) pueden disparar la protección de memoria. Documenta y libera los conocidos.
- Whitelist de hash de cliente: cuando lanzas un patch nuevo, el hash del
Main.execambia; actualiza la lista de hashes válidos antes de publicar, o todo el mundo se vuelve un falso positivo.
Ejemplo:
[Whitelist]
accounts = admin, gm_bruno, tester01
processes = obs64.exe, nvidia_share.exe
client_hashes = 9f2a...c1, a70b...44 ; hash del patch actual y del anterior
Mantener el hash del patch anterior por algunos días evita tumbar a quien todavía no actualizó.
Etapa 6 — Subir la severidad de forma gradual
Con datos de log en mano, promueve la severidad en escalones, nunca de una vez:
- Días 1–3:
log_only. Recolecta alertas, identifica falsos positivos, ajusta whitelists y umbrales. - Días 4–6:
kick. Empieza a tumbar sesiones que violan reglas claras (sin heartbeat, hash inválido), pero todavía sin banear. - Día 7+:
banselectivo. Solo para violaciones de alta confianza (inyección de DLL detectada, trainer conocido). Deja el comportamental en kick por más tiempo, porque es donde nacen los falsos positivos.
En cada escalón, observa el volumen de eventos. Un pico de kicks justo después de subir la severidad casi siempre significa un umbral mal calibrado, no una horda de cheaters.
Etapa 7 — Alertas y observabilidad
Enciende las alertas desde el modo log:
- Webhook de Discord/email para cada evento de alta severidad.
- Log centralizado con cuenta, IP, tipo de violación y timestamp para investigación posterior.
- Panel de conteo (aunque sea simple) mostrando eventos por hora: los picos anómalos ayudan a distinguir un ataque real de un bug de configuración.
Cruzar los eventos del anti-cheat con los logs nativos del GameServer es lo que transforma una alerta suelta en un caso investigable.
Errores comunes y soluciones
| Síntoma | Causa probable | Solución |
|---|---|---|
| Jugadores legítimos tumbados en masa tras encender el kick | Severidad subida directo, sin fase de log | Vuelve a log_only, calibra umbrales, sube en escalones |
| Falso positivo tras lanzar un patch | El hash del nuevo Main.exe no está en la whitelist | Agrega el hash nuevo (y mantén el anterior) antes de publicar |
| El jugador cierra el anti-cheat y sigue jugando | Heartbeat no amarrado al GameServer | Implementa el chequeo de heartbeat en el loop de mantenimiento |
| Un overlay legítimo dispara la protección de memoria | El proceso no está en la whitelist | Agrega el ejecutable a la lista de procesos permitidos |
| El cliente ni abre en algunas máquinas | FailIfMissing activado y módulo no distribuido | Garantiza que el updater entrega el módulo a todos, o aflójalo temporalmente |
| El servicio del anti-cheat se cae y tumba a todos | Sin tolerancia a la indisponibilidad del servicio | Configura un fail-open temporal cuando el propio servicio está caído |
| GM baneado por el comportamental | Cuenta fuera de la whitelist | Incluye las cuentas de staff en la whitelist de cuentas |
Lista de verificación de lanzamiento
- Backup completo del cliente y de las configs del servidor hecho y probado
- Entorno espejo armado con la misma season/emulador
- Módulo cargando por el launcher (o patch aplicado con backup)
- Servicio del anti-cheat corriendo en
log_only - Heartbeat amarrado al GameServer y probado (cerrar el módulo tumba la sesión en el espejo)
- Whitelist de cuentas, procesos y hashes completada
- Alertas (Discord/email) recibiendo eventos de prueba
- Escenarios de prueba validados: cliente limpio, hash alterado, sin módulo, sin heartbeat
- Plan de rollback documentado (cómo volver al estado sin anti-cheat en minutos)
- Cronograma de subida de severidad definido (log → kick → ban)
- Capas nativas del emulador confirmadas como activas (no fueron desactivadas)
- Aviso a los jugadores publicado sobre la nueva protección y posibles inestabilidades iniciales
Plan de rollback
Ten el camino de vuelta listo antes de encender cualquier bloqueo. Un rollback bien hecho es: poner el servicio en log_only (o apagarlo), quitar la exigencia de heartbeat en el GameServer, republicar el launcher sin FailIfMissing y restaurar el Main.exe del backup si aplicaste un patch. Documenta cada paso con el comando exacto para que, bajo la presión de un sábado por la noche lleno, lo ejecutes en minutos y no en pánico.
Integrar un anti-cheat de terceros es menos sobre la herramienta y más sobre disciplina de proceso: espejo, modo log, whitelist, subida gradual y rollback listo. Hazlo en ese orden y la protección entra en producción protegiendo al servidor, no a los cheaters de tu reputación.
Preguntas frecuentes
¿Un anti-cheat de terceros reemplaza la protección nativa del emulador?
No. Es una capa adicional. Lo ideal es sumar el anti-cheat de terceros a las validaciones que ya existen en el GameServer (filtro de packets, chequeo de posición y velocidad) y a las verificaciones de integridad del ConnectServer. Cada capa cubre una brecha diferente, así que mantén todas activas. El peso de cada capa varía según la season/emulador.
¿El anti-cheat va a generar falsos positivos y banear a jugadores legítimos?
Sí, si activas el modo agresivo directo en producción. Por eso la guía recomienda empezar en modo solo-log (kick/ban apagados), observar las alertas por algunos días y solo entonces subir la severidad. Mantén siempre una whitelist y un camino de rollback. Los umbrales exactos varían según la season/emulador.
¿Necesito el código fuente del GameServer para integrar?
No obligatoriamente. Muchos anti-cheats de terceros funcionan del lado del cliente y comunican el veredicto por un servicio propio o por un endpoint que consultas. Tener el fuente facilita amarrar el heartbeat al loop del servidor, pero se puede operar por consulta externa y kick vía comando de GM/API. El grado de acoplamiento varía según la season/emulador.
¿Cómo pruebo el anti-cheat sin arriesgar el servidor de producción?
Levanta un entorno espejo (misma season, mismos archivos de cliente) aislado en una VPS o máquina separada, inyecta escenarios controlados (cliente sin el módulo, hash alterado, sin heartbeat) y valida la reacción. Solo después promueve la configuración a producción. Las herramientas y los caminos exactos varían según la season/emulador.
¿El jugador puede cerrar el proceso del anti-cheat y seguir jugando?
Si la integración está correcta, no. El servidor debe exigir un heartbeat válido: sin señal viva del anti-cheat dentro de la ventana configurada, la sesión se tumba. Es justamente el vínculo servidor–anti-cheat lo que impide que el jugador simplemente mate el proceso. La ventana de tolerancia varía según la season/emulador.