Cómo Editar el Cliente de MU: Patching del Main.exe y Configuraciones
Guía técnica paso a paso para hacer patching del Main.exe de MU Online: editar IP del servidor, pantalla de login, strings internas y verificaciones de versión.
Editar el cliente de MU Online es una de las habilidades más importantes para los administradores de servidores privados. Desde apuntar el cliente hacia la IP correcta de tu servidor hasta personalizar la pantalla de login y eliminar restricciones de versión, el patching del Main.exe es el punto de partida. Esta guía cubre el proceso completo para Season 6 Episode 3 — la versión más utilizada en servidores privados — con notas para otras seasons donde corresponda.
Herramientas Necesarias
Reúne estas herramientas antes de comenzar:
- HxD — editor hexadecimal gratuito para ediciones directas a nivel de bytes
- CFF Explorer — editor PE para inspeccionar secciones, imports y recursos embebidos
- x64dbg u OllyDbg — para análisis dinámico y localización de offsets en tiempo de ejecución
- Resource Hacker — para editar recursos embebidos (iconos, bitmaps, strings de versión)
- Notepad++ — para editar archivos de configuración
.iniy.cfg - MU Client Patcher o xTeam Patcher — para patching automatizado de IP y puerto en S6
Main.exe original. Haz siempre una copia (Main_original.exe) antes de cualquier modificación. Guarda el backup en una ubicación fuera del directorio del cliente.Estructura del Directorio del Cliente
Un cliente Season 6 típico tiene la siguiente estructura relevante:
MUClient/
├── Main.exe ← ejecutable principal (objetivo del patching)
├── Main.ini ← configuración de IP, puerto y versión (si existe)
├── setup.ini ← configuración de video y audio del launcher
├── Data/
│ ├── Interface/ ← archivos de UI (fondos, botones)
│ │ └── Login/ ← recursos de la pantalla de login (LoginWindow.jpg o Menu_Back.jpg)
│ └── Lang/ ← strings de texto (.bmd, cifrados)
├── Music/
└── Sound/
Parte 1: Configurar el Main.ini
El archivo Main.ini se encuentra en la raíz del cliente y controla los parámetros básicos de conexión. En la mayoría de los paquetes Season 6, este archivo existe y tiene prioridad sobre los valores hardcoded en el binario.
Paso 1 — Abrir el Main.ini
Abre Main.ini con Notepad++. La estructura estándar de un cliente Season 6 es la siguiente:
[Settings]
IP=127.0.0.1
Port=44405
ServerName=MuOnline
ClientVersion=1.04g
ProtocolVersion=1.04g
FrameRate=60
Width=1024
Height=768
ColorDepth=32
Windowed=0
SoundOn=1
MusicOn=1
Paso 2 — Cambiar la IP y el puerto del ConnectServer
Reemplaza 127.0.0.1 con la IP pública o privada de tu servidor:
IP=200.200.100.50
Port=44405
44405 es el predeterminado del ConnectServer para Season 6. Verifica el parámetro Port en ConnectServer/ConnectServer.cfg en tu servidor antes de editar el cliente — los puertos que no coinciden son una causa común de fallos de conexión silenciosos.Paso 3 — Establecer la versión del cliente
El valor ClientVersion debe coincidir con el AcceptVersion configurado en tu ConnectServer:
ClientVersion=1.04g
ProtocolVersion=1.04g
Para Season 9 y versiones posteriores, el formato de la cadena de versión cambia:
ClientVersion=1.05k
ProtocolVersion=1.05k
Parte 2: Patching Hexadecimal Directo del Main.exe
Cuando el cliente no tiene Main.ini o cuando la IP está hardcoded en el binario, es necesaria la edición hexadecimal directa.
Paso 4 — Localizar la IP hardcoded en HxD
- Abre la copia del
Main.exeen HxD (Ctrl+O→ selecciona el archivo) - Presiona
Ctrl+F→ cambia a la pestaña Text-string - Busca la IP hardcoded original (ej.:
192.168.1.100ogame.servidororiginal.com) - HxD resaltará la posición correspondiente en el binario
00).Paso 5 — Reemplazar la IP con la dirección de tu servidor
Una vez localizado el offset:
- Selecciona todos los bytes de la IP o dominio antiguo
- Escribe la nueva IP en el panel ASCII del lado derecho
- Si la nueva dirección es más corta que la original, rellena las posiciones restantes con bytes nulos (
00) para no desplazar offsets - Si es más larga, acorta tu dominio o usa una IP numérica de igual o menor longitud
Ejemplo — reemplazar 192.168.001.001 (15 chars) por 200.200.100.050:
ANTES (hex): 31 39 32 2E 31 36 38 2E 30 30 31 2E 30 30 31
DESPUÉS (hex): 32 30 30 2E 32 30 30 2E 31 30 30 2E 30 35 30
Paso 6 — Localizar y patchear el puerto (hardcoded)
El puerto 44405 en little-endian de 2 bytes es 0xAD6D, almacenado en el binario como 6D AD. Busca esta secuencia hex en HxD y reemplázala con tu puerto de ConnectServer. Ejemplo para el puerto 55905 (0xDA51 → almacenado como 51 DA):
ANTES (hex): 6D AD
DESPUÉS (hex): 51 DA
Paso 7 — Guardar y validar
Guarda con Ctrl+S en HxD. Ejecuta el Main.exe patchado para confirmar que abre sin errores antes de distribuirlo.
Parte 3: Usar un Patcher Automatizado (Season 6)
Para Season 6, el proceso de patching puede automatizarse con MU Client Patcher o xTeam Patcher:
Paso 8 — Ejecutar el patcher
- Coloca
MUClientPatcher.exeen la misma carpeta queMain.exe - Ejecútalo como administrador
- Completa los campos:
[MU Client Patcher - Season 6]
ConnectServer IP : 200.200.100.50
ConnectServer Port : 44405
GameServer IP : 200.200.100.50
GameServer Port : 55901
Encryption : Standard (0x00)
Version Check : Disabled
[Apply Patch]
- Haz clic en Apply Patch — el patcher crea un backup automático (
Main_backup.exe) y escribe el nuevoMain.exe
Main.exe original y el patchado para verificar exactamente qué bytes fueron modificados.Parte 4: Personalizar la Interfaz con Resource Hacker
Paso 9 — Reemplazar el fondo de la pantalla de login
La pantalla de login del Season 6 Episode 3 usa un bitmap embebido en el ejecutable:
- Abre
Main.exeen Resource Hacker - Navega hasta:
Bitmap→IDB_BACKGROUND(o ID201según el build) - Clic derecho → Replace Resource
- Selecciona tu imagen de fondo (debe ser BMP, 1024x768, 24-bit, sin compresión RLE)
- Haz clic en Replace → File → Save As → guarda como el nuevo
Main.exe
En builds que cargan el fondo desde un archivo externo, reemplázalo directamente:
MUClient/Data/Interface/Login/LoginWindow.jpg
MUClient/Data/Interface/Login/Menu_Back.jpg ← depende del build
Dimensiones requeridas: 1024x768 para Season 6, 800x600 para Season 1–4.
Paso 10 — Cambiar el ícono del ejecutable
- En Resource Hacker, navega hasta
Icon Group→IDI_MAINICON - Clic derecho → Replace Resource
- Selecciona un archivo
.icoque contenga los tamaños 16x16, 32x32 y 48x48 - Guarda el ejecutable
Paso 11 — Editar strings visibles para el jugador
Las strings como el título de la ventana y los mensajes de error de conexión se encuentran en:
- Resource Hacker →
String Table→ IDs del 1 al 200 (varía según el build)
ID 1: "MU Online" → cambia a "ViciadosMU - Season 6"
ID 5: "Conectando..." → personaliza según tu servidor
ID 12: "Contraseña incorrecta" → traduce o ajusta
Parte 5: Alinear la Configuración del ConnectServer
Paso 12 — Verificar ConnectServer.cfg
El archivo ConnectServer/ConnectServer.cfg debe estar alineado con los valores patchados en el cliente:
[Network]
Port=44405
EncryptionEnabled=1
; 0 = sin cifrado (solo para pruebas)
; 1 = cifrado MU estándar (obligatorio en producción)
[Version]
AcceptVersion=1.04g
VersionCheck=1
; Establece VersionCheck=0 para aceptar cualquier versión (solo desarrollo)
Paso 13 — Verificar la versión en la base de datos SQL Server
Además del archivo .cfg, la versión del cliente se valida contra una tabla de base de datos. Ejecuta esto en SQL Server Management Studio:
USE MuOnline;
-- Verificar configuración de versión actual
SELECT ServerCode, ServerName, Version, EXEVersion
FROM T_Version
ORDER BY ServerCode;
-- Actualizar para que coincida con el cliente patchado
UPDATE T_Version
SET Version = '1.04g',
EXEVersion = '1.04g'
WHERE ServerCode = 0;
Si tienes múltiples GameServers, actualiza todas las entradas:
-- Actualizar todos los códigos de servidor a la vez
UPDATE T_Version
SET Version = '1.04g',
EXEVersion = '1.04g';
Parte 6: Script de Launcher con Verificación de Actualización
Paso 14 — Script batch básico con verificación de versión
@echo off
title ViciadosMU Launcher
echo Verificando actualizaciones...
set LOCAL_VER=1.04g
set UPDATE_URL=http://update.tuservidor.com
:: Descargar cadena de versión remota
powershell -Command ^
"(New-Object Net.WebClient).DownloadString('%UPDATE_URL%/version.txt')" ^
> "%TEMP%\mu_ver.txt" 2>nul
set /p REMOTE_VER=<"%TEMP%\mu_ver.txt"
del "%TEMP%\mu_ver.txt" 2>nul
if "%LOCAL_VER%"=="%REMOTE_VER%" (
echo Cliente actualizado. Iniciando...
start "" "Main.exe"
exit
)
echo Nueva versión disponible: %REMOTE_VER%. Descargando...
powershell -Command ^
"(New-Object Net.WebClient).DownloadFile('%UPDATE_URL%/Main.exe','Main_new.exe')"
move /y Main_new.exe Main.exe
echo Actualización completa. Iniciando...
start "" "Main.exe"
Aloja un archivo /version.txt de texto plano en tu servidor web que contenga únicamente la cadena de versión actual, por ejemplo: 1.04h.
Verificación Final y Distribución
Antes de distribuir el cliente patchado a los jugadores:
- Prueba en una máquina limpia — no en la misma máquina usada para desarrollo o el servidor
- Revisa el log de conexión en
GameServer/Logs/Connect_YYYYMMDD.logpara confirmar que los clientes son aceptados:
`` [CONNECT] 200.200.100.50 → Version: 1.04g → ACCEPTED ``
- Escanea con antivirus antes de distribuir — los patches en el PE generan falsos positivos en algunos motores AV; publica el link de VirusTotal junto con la descarga
- Genera y publica el hash MD5 del
Main.exefinal:
``batch certutil -hashfile Main.exe MD5 ``
- Comprime el cliente con 7-Zip (nivel Ultra) antes de alojar — un cliente Season 6 completo ocupa entre 800 MB y 1,5 GB sin comprimir
500m para partes de 500 MB. Publica todas las partes junto con el hash MD5 del Main.exe para que los jugadores puedan verificar la integridad tras la descarga.Solución de Problemas Comunes
El cliente se cierra inmediatamente al abrirse:
- El
Main.exefue corrompido durante la edición. Restaura el backup y repite el proceso. - Verifica las dependencias faltantes:
d3dx9_43.dllyMSVCR90.dlldeben estar en el directorio del cliente o en la ruta del sistema de Windows.
"Unable to connect to server" después de editar la IP:
- Confirma que el ConnectServer está en ejecución y que el puerto
44405está abierto en el firewall del servidor. - Verifica que editaste todos los offsets donde aparece la IP — algunos builds la almacenan en 2–3 ubicaciones del binario.
- Prueba la conectividad desde la máquina cliente:
telnet 200.200.100.50 44405.
Pantalla de login negra o con textura ausente:
- El archivo de fondo no tiene el formato o las dimensiones correctas. Usa un BMP de 24-bit en 1024x768 sin compresión RLE.
- Verifica si el archivo necesita estar dentro de un archivo
.pak— algunos builds requieren reempaquetar después de reemplazar recursos externos.
Perguntas frequentes
¿Qué editor hexadecimal debo usar para editar el Main.exe?
HxD es gratuito y recomendado para principiantes. Para inspección avanzada a nivel PE (secciones, imports, recursos embebidos), usa CFF Explorer o PE-bear. XVI32 y Hex Workshop son alternativas sólidas a HxD para ediciones básicas de bytes.
¿Qué pasa si escribo los bytes incorrectos al editar la IP en el Main.exe?
El cliente fallará al conectar o se cerrará al iniciarse. Trabaja siempre sobre una copia del archivo original y mantén un backup limpio en otra ubicación. Restaurar el backup y repetir el proceso es todo lo que necesitas para recuperarte de un patch erróneo.
¿Puedo cambiar el IP del servidor sin tocar hex, usando una herramienta con interfaz gráfica?
Sí. Herramientas como MU Client IP Changer y xTeam Patcher (muy usadas en la comunidad Season 6) automatizan el reemplazo del IP y el puerto en el binario. Sin embargo, entender el proceso hex es fundamental para depurar problemas cuando las herramientas automáticas fallan.
¿Cómo desactivo la verificación de versión del Main.exe para desarrollo local?
Define VersionCheck=0 en ConnectServer/ConnectServer.cfg para aceptar cualquier versión de cliente. Para la eliminación del lado del cliente, localiza el salto condicional (JE o JNE) en la rutina de comparación de versión con x64dbg y reemplázalo con un JMP incondicional (byte 0xEB). Esto es recomendable solo en entornos de desarrollo, nunca en producción.