Esto es una breve explicación de cómo generar TRAINERS para el EvolutionX +3935.
Necesitaremos los siguientes programas:
En nuestra consola:
.- EvolutionX +3935.
En nuestro PC:
.- Un desensamblador. En este ejemplo emplearemos el IDA PRO.
.- EvoXDTSR Release 01.06.04, en adelante lo llamaremos EDTSR.
.- Easy EvoX Trainer Maker v1.1, en adelante lo llamaremos EETM.
.- Cxbx-0.7.8c.
Como ejemplo crearemos un TRAINER para el Zapper (PAL).
Primero copiaremos el default.xbe del juego a nuestro PC.
Configuramos el EvolutionX +3935 con el “TSR en Debug” y el “In Game Reset en Yes”, salvamos la configuración (Save And Exit), reseteamos y ejecutamos el Zapper.
- Comenzamos una nueva partida del Zapper y ponemos la pausa.
- Ejecutamos el EDTSR y ponemos la dirección IP de la consola en "App", "Settings", "Xbox IP Address", después pulsamos el botón "OK". Ej. IP=10.0.0.4.
- Seleccionamos "Functions" y marcamos "Auto-Freeze".
- Seleccionamos de nuevo "Functions" y “Connect”, en la ventana de abajo debe aparecer "EvoXDTSR connected." y “RemoteX Debugger V1.1”.
- Como empezamos el juego Zapper con 10 vidas, escribiremos 10 en “Parameter:” de “Memory:” y pulsamos “Search”.
- En la ventana de abajo aparecerán algunos datos y pasado un momento nos pondrá .UF. Quitamos la pausa del juego y nos matamos para que tengamos 9 vidas.
- Escribiremos 9 en “Parameter:” de “Memory” y pulsamos “Search”.
- Repetimos este proceso hasta llegar a las 8 vidas, suficiente en este juego para determinar donde se almacenan las vidas.
- En la ventana “Search Results:” veremos la dirección encontrada, en este caso 823BACC0 (puede ser otra).
- Para comprobar realmente si esta dirección es la que almacena las vidas, escribiremos 823BACC0 en “Address:” de “Memory” y en “Parameter:” escribiremos por ejemplo 20. Pulsamos “Poke” y si todo es correcto nuestro marcador de vida debe subir hasta 32 (20 en hexadecimal es 32).
Ahora toca encontrar que dirección del programa decrementa las vidas.
Para ello crearemos un “Break Point” con la intención de congelar el juego cuando la vida se decremente y de esta manera saber que dirección de programa es la responsable.
- Escribimos en “Address:” de “Breakpoints:”, 823BACC0 (dirección que contiene las vidas). El número de “Breakpoint:” lo dejamos a 0 y el "Break on:" lo ponemos en "BYTE: Write” con el fin de que cuando alguna dirección de programa escriba en la dirección de las vidas el programa se congele. Finalmente pulsamos en “Set” para activar el punto de ruptura.
- Seguimos jugando al Zapper y cuando nos maten el juego se congelará.
- En una nueva ventana del EDTSR nos aparecerán los registros en el momento del punto de ruptura.
- Tomaremos nota de la dirección que aparece en el título de la ventana “BP 0 @ 000A2EFF”
- Damos al botón “Unfreeze” para descongelar el juego y al botón “Clear” de la ventana principal para borrar el punto de ruptura. Por ahora ponemos el juego en pausa.
Ahora ejecutamos el Cxbx , en “File”, seleccionamos “Open Xbe...” y le damos el nombre y ruta del default.xbe perteneciente al Zapper. Una vez cargado, en “File”, seleccionamos “Export Exe…” para exportar el formato .xbe a .exe y así poder desensamblarlo. Al fichero resultante le llamaremos “default.exe”.
Ahora instalamos y ejecutamos el IDA PRO con el fin de desensamblar y comprender el fichero “default.exe”. En la pantalla de bienvenida del IDA pulsamos “New”, seleccionamos el fichero “default.exe” y en la pantalla "Load a new file" miramos que esté seleccionado "Portable executable for IBM PC (PE) [pe.ldw]" y sin tocar nada más pulamos el botón “OK”. El IDA comenzara el proceso de desensamblado del fichero, tardará unos minutos y finalizará cuando en la ventana inferior aparezca “The initial autoanalysis is finished.”.
Seleccionamos “Jump” y en “Jump to address...” escribimos la dirección que teníamos anotada (A2EFF). De esta manera podremos ver la instrucción que contiene esta dirección. Como A2EFF es la instrucción que se ejecutará después de que se decremente la vida, en realidad la instrucción que lo hace es la A2EF9 (mov [esi+270h], eax ). Lo que hace esta instrucción es mover el valor del registro EAX a la dirección que contiene el registro ESI + 270 en hexadecimal. Si miramos la ventana del EDTSR veremos que el registro ESI tenia el valor 823BAA50h que sumado a 270h nos da como resultado 823BACC0, casualmente la dirección que contenía la vida. El registro EAX contenía 1F, con lo cual el valor 1F ha sido escrito en la dirección 823BACC0, momento en que se congela el juego. Si miramos dos instrucciones más arriba veremos “.text:000A2EF6 dec eax”, esta instrucción es la que nos interesa ya que decrementa el registro EAX y por lo tanto las vidas. Esta instrucción ocupa una sola dirección (A2EF6), por lo tanto la idea es sustituirla por una instrucción NOP (No Opera), que es una instrucción que no hace nada y cuyo valor en hexadecimal es 90. De esta manera quedaría algo como “.text:000A2EF6 nop” y al no producirse el decremento nuestro contador de vida no descenderá nunca.
Ahora comprobaremos que esto es cierto de la siguiente manera:
En el EDTSR ponemos A2EF6 en “Address:” de “Memory:” y en “Parameter:” escribiremos 90. Pulsamos “Poke”, quitamos la pausa del juego y si todo es correcto cuando nos maten el número de vidas no descenderá.
Como esto funciona, solo nos queda generar el trainer para el EvolutionX +3935. La solución más fácil es emplear el EETM.
Una vez ejecutado escribimos en “Title” lo que aparecerá cuando en el EvoX seleccionemos los trainers. En “Info” escribimos lo que aparecerá debajo de “Save And Exit”. El “Title ID” y el “TimeStamp” lo importaremos del default.xbe pulsando el botón "Import" y seleccionando el fichero default.xbe que habíamos copiado en nuestro PC. Ahora seleccionamos “Add” en “Trainer items” y en la ventana que nos sale escribimos que hace el trainer en “Caption”, en la celda que está debajo de “Address” escribimos la dirección de la instrucción a cambiar (en nuestro caso A2EF6) y en la celda de debajo de “New Value” el valor que se le dará (en nuestro caso 90). Pulsamos el botón “Add/Modify” para que los valores se añadan y después el botón "OK".
Pulsamos el botón de “Generate ETM”. Esto generará el fichero .etm que pondremos en la carpeta Trainers de la partición C: del disco duro de la consola.
Por último, reseteamos la consola, en el EvolutionX +3935 seleccionamos “TRAINERS” y “Zapper (PAL) +1”. Dentro de la pantalla ponemos “Enable” y “Unlimited Lives” a “Yes”, seleccionamos “Save And Exit”.
Solo resta cargar el juego Zapper y contemplar como nuestro trainer funciona.
Saludos.