24/08/2026
Mi historia y el GPaKeX
El 17 de diciembre de 2025, comenzó una batalla entre la scene y Gravity. Al principio, no entendía qué estaba pasando con el nuevo formato contenedor .gsf y el experimento del 4 de diciembre con el .gef.
Creía que mi etapa de ver loadings, sprites y mapas había terminado, ya que ni siquiera sabía cómo inspeccionar el contenido de un .gsf.
Mientras veía a otros avanzar a una velocidad increíble para descifrar los archivos, algunos gracias a que tenían el código fuente puro pre-GPaKeX y otros porque ya conocían bien las entrañas del ragexe.exe porque llevaban años lidiando con ello.
Observé cómo Ai4rei adaptaba su patcher RSU para seguir aplicando los parch nuevos en formato .gsf y cómo DIA subía parches descifrados en tiempo récord en su sección de actualizaciones de su foro.
Me di cuenta de que si no empezaba a trabajar por mi cuenta, nadie me daría la solución.
El inicio del análisis
Descarté Ghidra rápidamente porque no terminaba de entender bien su funcionamiento y aposté por IDA Pro 9.2, una verdadera máquina para destripar el ragexe.exe.
Mi premisa era clara:
Para ragexe.exe un cero a la izquierda ( en ese momento).
Pero para cifrado y leer código se me daba bastante bien.
Primer paso fue entender realmente que era el formato .gsf.
Descubrí que el .gsf era un simple contenedor con la típica tabla comprimida en zlib. Con un sencillo código en Python, logré leer el offset, el peso, la ubicación de los archivos y patchname.
Para mi fue la primera gran victoria haciendo ingeniería inversa en Ragnarok Online, mi primera herramienta creada por mi funcional sin depender de los grandes de la scene
Era algo trivial pero para mí un gran avance.
Bypass y volcados de memoria
Para analizar el ragexe.exe, necesitaba un unpacked. Sabiendo que Themida virtualiza la IAT y levanta el muro de GameGuard, decidí atacar directamente la memoria RAM.
Programé un script en Frida exclusivo para el ejecutable. Su función era copiar la RAM a la velocidad de la luz en el momento exacto y apagarse, sin usar hooks ni saltos, por lo que ni Themida ni GameGuard lo detectaban. Tras 4 días lidiando con bloqueos, obtuve un volcado .bin perfecto para análisis estático en IDA Pro del cliente 17 diciembre 2025.
Además un método perfeccionado para cualquier cambio que haga gravity en el futuro.
Mi segunda herramienta estaba creada y funcionando.
Había conseguido en las primeras semanas:
Entender y leer que era un .gsf
Aprender a manejar el IDA PRO.
Tener un unpacked no funcional(no ejecutable) pero perfecto para análisis en estático.
Avances en la criptografía
Un error inicial me hizo creer que buscar la cadena .gsf o event horizon en los strings en el ragexe.exe era la clave, pero solo era una marca para decir que el archivo es mayor a 4 GB del data.grf. Afortunadamente, DIA me compartió un dato clave: la estructura de las cabeceras de los archivos cifrados GPaKeX.
Con esa información, mapeé el ejecutable y descubrí que solo usaban los algoritmos IDEA y AES (0, 1, 2, 15 y 128), lo que acotaba mucho el trabajo. A base de horas de ensayo y error, logré emular el descifrado AES 15 (con secretos ID=0).
Para llegar ahí me fije como objetivo un archivo el mp3nametable.txt si conseguía extraerlo limpio solo tenía que extrapolar al resto de AES de archivos con secreto ID =0.
Antes de eso, ya había logrado "robar" mapas e imágenes directamente de la memoria en formato LZ4 antes de que terminara su procesamiento, confirmando que iba por buen camino.
Había conseguido un mapa cifrado como alberta o el mapa de druida fue el empujón que me faltaba para no rendirme.
Además loadings, imagen de fondo, algún sprite..
Aunque ese proceso que llegué a crear no era eficiente ni realista ya que necesitaba estar online y "ver" en caliente los archivos que quería descifrar además solo podía hacerlo de uno en uno.
Pero viendo que ya empezaba a entender como funcionaba el sistema de cifrado en ragexe.exe fue cuando me quemé las pestañas picando y leyendo código.
Una vez que había conseguido un extractor rudimentario que podía procesar cualquier archivo AES,15 / AES,128 con secretos ID =0
Lo copie para cualquier cifrado del juego que gravity había puesto en el cliente mientras fuera secretos ID =0.
¿Que pasaba con los secretos ID 1 y ID 2?
Pues necesitaba ver como dentro de VM hacia las operaciones usando esos datos.
En ese momento llego la magia y la mayor lucha para entender como hacia el cliente para procesar los archivos internamente.
El extractor final
Al analizar cómo el juego usaba bcrypt.dll, decidí ignorar la librería y emular todo el proceso directamente en mi código C++. El 4 de marzo de 2026, y gracias a la ayuda de Christine para entender los secretos ID 1 y 2 completé un extractor puro de .gsf totalmente emulado e independiente de Windows.
El programa funciona de la siguiente manera:
• Lee el .gsf para detectar el tamaño, posición y nombre de los archivos.
• Genera un TXT con la lista de extracción.
• Lee la cabecera de 8 bytes de cada archivo para determinar el tipo de AES y aplica el código correspondiente.
• Verifica los archivos, los descifra, lo vuelve a verificar una vez pasado por lz4 o lo que toque y los guarda en sus directorios exactos transformándolos al formato .gpf.
• A día de hoy le añadido un sistema extra, que analiza en tiempo real que tipo de archivo es, si es desconocido me crea un log con los datos que obtiene y porqué falló.
El santo grial:
Hacer el proceso inverso (crear un GPaKeX funcional desde cero sin las herramientas originales de Gravity) sería una locura casi imposible, por lo que mi programa se centra solo en la extracción.
Reflexiones
Durante este proceso, demostré que para vencer a GameGuard (que trabaja en Ring 0), había que bajar al hipervisor o Ring -1 para estar por encima en la escala de control. Aunque al principio me llamaron fantasma y dijeron que mis resultados venían de una IA, el tiempo me dio la razón y muchos terminaron copiando mi método para hacer magia.
Han sido 8 meses de hacerle auténticas locuras al ragexe.exe. Eso sí, conozco mis límites: no me pidáis un unpacked funcional, porque de eso no tengo ni idea.
Y esta es la historia resumida de Ziu y el GPaKeX.