para el caso de que nunca llegue a terminar el trabajo de preservar onae debido a que ningún modelo de IA gratuito funciona bien, dejo un aporte informativo a la comunidad con todo lo que hé descubierto desde ayer.
La idea es pasar ese resumen a una IA paga y seguir de alli, con info básica para que la IA no alucine tanto.
IA utilizada: modo IA de Google (se recomienda una IA paga cómo claude o codex)
programas utilizados?
windows powershell (no utilizé el cmd)
python (para que el terminal reconosca comandos que inicien con "python" y crear scripts de monitoramiento de memoria, util para engañar el código de claves)
mingw32: para crear verciones falsas de pcgw32.dll. cuidado, puede romper el código del juego. mantener zip de la carpeta original en caso de que eso suceda.
Para colar texto del portapapeles en el terminal de mingl32, cliquear con el botón derecho del ratón, escoger "past" y pulsar intro dos veces. control V no funciona.
Hay que ser mingw32 y no 64, porque onae tiene un ejecutable (juego.exe) de 32 bits.
1. Diagnóstico del sistema de protección
• Protección comercial: El juego utiliza PCGuard (probablemente la versión 5 o 6) [fuente: fechas de 2008, funciones], una solución de seguridad comercial de finales de la década de 2000 que "envuelve" el ejecutable original del juego para controlar el acceso [fuente: *wrappers*].
• Componentes identificados: El sistema de protección depende estrictamente de dos bibliotecas dinámicas (DLL) de 32 bits ubicadas en la carpeta del juego:
• pcgw32.dll (191.488 bytes): Es el núcleo de la protección, responsable de la rutina de cifrado simétrico, la seguridad anticopia y la validación matemática de la clave.
• PCG32ESN.dll (57.344 bytes): Es la biblioteca que gestiona los recursos de interfaz visual, los cuadros de diálogo y los mensajes de texto en el idioma del juego (español/ESN).
2. Estructura de los códigos de activación
La interfaz del juego muestra dos identificadores en el formato clásico de PCGuard:
• Código 1 (C5A54A48): Actúa como el *Site Code* (o ID del producto); es una firma hexadecimal estática de esa versión específica del software.
• Código 2 (94DF-3593-95E6-71AD): Actúa como el *Machine ID* (ID de la máquina); es una semilla generada dinámicamente a partir de *hashes* de componentes físicos del hardware de su equipo (como el número de serie del disco duro o la dirección MAC). 3. Comportamiento y mecanismos de defensa
Durante las pruebas con herramientas de terminal y scripts automatizados, la protección reveló tres capas de seguridad integradas:
• Validación de integridad (suma de comprobación en disco): El ejecutable principal (JUEGO.exe) analiza las cabeceras PE y los metadatos de versión (VS_VERSION_INFO) de las DLL en disco. Cuando se sustituyen por archivos falsos o se modifican estáticamente (como el parche aplicado en la RVA 0xf360), el motor del juego detecta la ruptura de la integridad y genera el error "Versión de DLL de recursos incorrecta" o abre la ventana fantasma pcgw32, bloqueando el foco del sistema operativo.
• Mecanismo antidepuración (Anti-Debugging): PCGuard cuenta con rutinas activas para monitorear el espacio de memoria RAM asignado al proceso. Los intentos de abrir canales de modificación dinámica en bucles rápidos provocan el cierre silencioso e inmediato del juego para impedir análisis en tiempo real.
• Restauración dinámica de código: El juego no realiza una comprobación estática de la licencia. Descifra secciones del código en la RAM y restablece continuamente las instrucciones originales, lo que explica por qué solo un bombardeo constante de inyección de memoria (mediante un script en bucle) logró alterar temporalmente el comportamiento de cierre del ejecutable.
4. Estructura interna de funciones (Tabla de exportación)
Mediante el análisis estático binario y la extracción de cadenas de texto, descubrimos los nombres exactos de las funciones que actúan como puente de comunicación entre el juego y el sistema de protección:
• Las funciones exportadas por la protección están secuenciadas desde PCG01 hasta PCG08. • Se ha constatado empíricamente que, en estas versiones del *wrapper*, el valor de retorno lógico 0 (cero) actúa en determinadas subrutinas como indicador de licencia validada (anulando la solicitud inmediata del número de serie en la interfaz), mientras que el valor 1 indica un estado de evaluación o pendiente, dirigiendo el flujo hacia los cuadros de error.