Ayuda para destripar/ripear un ejecutable de C64.

Avatar de Usuario
kikems
Mensajes: 3391
Registrado: 30 May 2013 19:23
Agradecido : 978 veces
Agradecimiento recibido: 1348 veces

Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor kikems » 27 Ago 2019 12:33

Como indica el título, pido ayuda a los ancianos sabios del lugar para que me ayuden a entender el proceso a realizar para destripar/ripear un ejecutable de C64. Para ello he buscado un caso práctico y creo que sería buena idea basarnos en el uso del Action Replay, ya que es de las soluciones más comunes.
Mi intención es ir aprendiendo el proceso , para luego dejarlo aquí en RetroWiki plasmado en una guía, paso a paso.

Tengo un ejecutable PRG de c64, en este caso concreto es el Aliens de Electric Dreams que ya está parcheado, con cabecera de crackers, instrucciones, trainers, etc... . Mi intención es reducir el tamaño del PRG al máximo, eliminando todo aquello que no sea el juego en sí mismo.

Según entiendo y en base a lo poco que sé, es que lo crackers han cogido el PRG original, lo han comprimido y luego han añadido la cabecera con su nombre, las docs, la pantalla que había durante la carga y lo han juntado todo en un solo PRG que se va descomprimiendo en esas parte hasta llegar al juego final. Para que todo esté más claro aquí adjunto unas imágenes del proceso de carga de este PRG.

1- Al iniciar el PRG , comienzan unas lineas de colores que indican descompresión , lo desconozco pero seguramente en este bloque estén la cabecera, los docs y la pantalla de carga.
00.png
00.png (34.29 KiB) Visto 588 veces
01.png
01.png (24.34 KiB) Visto 588 veces

2- Primero vemos la pantalla de créditos de los crackers, pulsando "espacio" salta a los docs.
02.png
02.png (61.55 KiB) Visto 588 veces

3- Pulsando espacio , pasa a las dos pantallas de carga que tenía el juego en cinta o disco.
03.png
03.png (50.55 KiB) Visto 588 veces
04.png
04.png (27.92 KiB) Visto 588 veces

4- Pulsando espacio ( no funciona con ninguna otra tecla ), comienza la descompresión del bloque del juego.
descompresion.png
descompresion.png (8.79 KiB) Visto 588 veces
05.png
05.png (26.78 KiB) Visto 588 veces
06.png
06.png (56.49 KiB) Visto 588 veces


A mi limitado entender, es como haber juntado 2 o 3 PRG en una sola carga y que al final de cada uno ( cuando se pulsa el espacio ) hace un jump a la instrucción que inicia el siguiente y así sucesivamente hasta llegar al juego.
Entiendo que para eliminar todo menos el juego, debería hacer lo siguiente:
1- cargar el PRG completo en la memoria.
2- Con el PRG en memoria y usando el Monitor CM del Action Replay buscar el bloque de memoria donde se inicia la descompresión del juego y los datos del mismo.
3- Una vez localizada el área de memoria donde está el juego comprimido y que sabemos qué dirección es la que inicia la descompresión, hay que volcar esa área de ram a disco o cinta y así obtener el PRG solo con el juego comprimido.

El punto 1 lo sé hacer -thumbup , en el 2 ya hago aguas, ayuda por favor. -nb
Imagino que hay que buscar en la ram una comparación donde se muestre el código de la pulsación del "space" para localizar el JMP a la dirección que inicia la descompresión del juego, pero no consigo dar con ello.

Adjunto el PRG del juego que estoy poniendo de ejemplo.

aliens+4&mfx-rem.prg.zip
(39.25 KiB) Descargado 12 veces

Avatar de Usuario
minter
Mensajes: 2533
Registrado: 22 Jul 2014 18:51
Agradecido : 2386 veces
Agradecimiento recibido: 1041 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor minter » 27 Ago 2019 13:59

¿Destripar el PRG con herramientas nuevas o de la época?

Avatar de Usuario
kikems
Mensajes: 3391
Registrado: 30 May 2013 19:23
Agradecido : 978 veces
Agradecimiento recibido: 1348 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor kikems » 27 Ago 2019 15:52

minter escribió:¿Destripar el PRG con herramientas nuevas o de la época?


Por supuesto es preferible el método old school , pero si se completa con el método alternativo sobre máquina actual tampoco le haremos ascos. -thumbup

jltursan
Mensajes: 2586
Registrado: 20 Sep 2011 13:59
Agradecido : 179 veces
Agradecimiento recibido: 501 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor jltursan » 27 Ago 2019 17:23

Pues como vea esto Blackhole te destripa el ejecutable y te lo sirve en plato hondo cortado en finas lonchas... -grin

Avatar de Usuario
kikems
Mensajes: 3391
Registrado: 30 May 2013 19:23
Agradecido : 978 veces
Agradecimiento recibido: 1348 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor kikems » 27 Ago 2019 17:44

jltursan escribió:Pues como vea esto Blackhole te destripa el ejecutable y te lo sirve en plato hondo cortado en finas lonchas... -grin


Eso estoy esperando -drinks , porque veo que el Minter se va arrugando, ya se ha atrevido a preguntar si ¿sobre equipo moderno o equipo retro?. -507 -banghead

Avatar de Usuario
minter
Mensajes: 2533
Registrado: 22 Jul 2014 18:51
Agradecido : 2386 veces
Agradecimiento recibido: 1041 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor minter » 27 Ago 2019 18:26

Hombre!
Es que yo soy un gusarapín Lamer al lado de Blackhole.
Llevo dos semanas haciendo practicas de soldadura SMD con pistola caliente y microscopio, y mi conclusión es que: Tengo quue dejar el café y graduarme la vista.

Respecto al PRG, he visto una utilidad que convierte un D64 a PRG, porque como bien dices, reealiza 3 cargas con sus descompresiones. Y en la ultima es en la que carga el juego completo. No carga bloques intermedios. En la ultima carga, pisa todo el contenido cuando se descomprime. Toda la memoria. Es como si fuera un snapshot de la memoria completa comprimido.
Debe de dejar algo escondido en la rutina de carga para ejecutar luego los pokes que se aplican en el cargador previo.
Eso lo explico Blackhole anteriormente cuando saceste el tutorial de Final Cartidge III o como fuera. :)

BlackHole
Mensajes: 1115
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 11 veces
Agradecimiento recibido: 237 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor BlackHole » 27 Ago 2019 19:04

Kikems: Partes de una premisa falsa: no existe PRG original. Los juegos originales no son PRGs ni llevan un BASIC con un SYS a donde apuntar. Lo que tú buscas se podría llegar a hacer, interrumpiendo en el paso 3, pero conociendo (o desensamblando a ver qué hace) la rutina de descompresión en código máquina y e intentando adivinar cuál es la dirección final del siguiente bloque comprimido. Digo adivinar porque obviamente no vas a tener un cartelito guiándote. A veces lo puedes presuponer a partir de algún puntero de esa rutina de descompresión, o de un movimiento de bloques previo.

jltursan, minter: Quizás me anime a echar un vistazo, pero la verdad es que ando bastante depre últimamente con muchos problemas personales insolucionables. Hace meses que no me animo a hacer nada con el retro, porque realmente no me apetece, he perdido mucho interés. El tiempo libre que tengo se lo lleva el Kpop, y hasta esto ya me está hastiando.

Avatar de Usuario
ron
Mensajes: 18470
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1643 veces
Agradecimiento recibido: 1368 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor ron » 27 Ago 2019 19:42

BlackHole escribió:Kikems: Partes de una premisa falsa: no existe PRG original. Los juegos originales no son PRGs ni llevan un BASIC con un SYS a donde apuntar. Lo que tú buscas se podría llegar a hacer, interrumpiendo en el paso 3, pero conociendo (o desensamblando a ver qué hace) la rutina de descompresión en código máquina y e intentando adivinar cuál es la dirección final del siguiente bloque comprimido. Digo adivinar porque obviamente no vas a tener un cartelito guiándote. A veces lo puedes presuponer a partir de algún puntero de esa rutina de descompresión, o de un movimiento de bloques previo.

jltursan, minter: Quizás me anime a echar un vistazo, pero la verdad es que ando bastante depre últimamente con muchos problemas personales insolucionables. Hace meses que no me animo a hacer nada con el retro, porque realmente no me apetece, he perdido mucho interés. El tiempo libre que tengo se lo lleva el Kpop, y hasta esto ya me está hastiando.


Fran, sin prisa pero sin pausa, tienes unos skills únicos en esta materia, piensa en algo didáctico para gente inquieta como nosotros, si te sirve de iniciativa no hay ningún tuto ni procedimiento ni nada a este respecto. Y anda que no se agradecería ni nada. Venga Blackhole ! dale caña !

BlackHole
Mensajes: 1115
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 11 veces
Agradecimiento recibido: 237 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor BlackHole » 27 Ago 2019 20:27

Si paramos con un monitor de C/M cuando sale la pantalla de ALIENS, vemos que nos deja en $199E, que está esperando la pulsación del joystick 1 (o la tecla espacio). Un poco más adelante en $19D4, vemos que se transfiere una pequeña rutina de 31 bytes desde $19E0 a $0340 y se salta a ella. Esa rutina mueve toda la memoria desde $5F00 hacia $0800 en cachos de 256 bytes y salta a $080D. O sea, que al menos la zona comprendida entre $5F00-$FFFF ($A100 bytes) es movida a $0800-$A8FF. Es decir, que antes que definitivamente se descomprima el juego, éste está en esos $A100 (41216) bytes. Los 12 bytes anteriores entre $0801 y $080C están borrados, supuestamente a propósito para despistar a cracker-wannabees, que era donde debía estar el SYS.

Pero si nos ponemos a ver rápidamente lo que queda en la memoria, vemos que no hay restos de nada en blanco, todo parece completo pareciendo datos o basura sin sentido. Si examinamos la rutina de descompresión que se inicia en $080D una vez movido el bloque, vemos que la rutina real se mueve desde $6D54-$6E53 hasta $00FC-$01FB y después se salta a $6D19. En $6D19 se mueven otros 33 bytes desde $6E1E-$6E3F hasta $07FD-$081E. Conociendo como conozco las rutinas de descompresión, yo apostaría que el final de los datos comprimidos están en $6E3F y no en $A8FF. Eso da un tamaño más lógico.

aliens-juego_suelto.prg.gz
Versión de Aliens crackeada por REMEMBER, sin intro ni PIC.
(25.5 KiB) Descargado 13 veces

Avatar de Usuario
kikems
Mensajes: 3391
Registrado: 30 May 2013 19:23
Agradecido : 978 veces
Agradecimiento recibido: 1348 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor kikems » 27 Ago 2019 21:25

BlackHole escribió:Si paramos con un monitor de C/M cuando sale la pantalla de ALIENS...

aliens-juego_suelto.prg.gz


Increíble, la verdad que no me he enterado de mucho, ahora me estudiaré detenidamente tus instrucciones e intentaré ver si entiendo el proceso. Yo había pensado algo más sencillo como buscar la pulsación de la tecla SPACE y ver a donde saltaba.
Por lo que veo haciendo este ripeo, mantenemos lo importante que es el CHEAT y el juego y hemos pasado el ejecutable de 40 Kb a 24 kb, cosa que el cargador turbo agradecerá enormemente.

PD: Black Hole no te sientas obligado a nada, nosotros preguntamos y cada uno que buenamente aporte lo que pueda y cuando pueda, el bienestar personal de cada uno es lo primero, esto solo es hobby. Espero que por lo menos estos ratos de asm te sirvan para disuadirte un poco de los problemas del día a día y desde aquí quería darte las gracias por tu ayuda. -thumbup

Avatar de Usuario
minter
Mensajes: 2533
Registrado: 22 Jul 2014 18:51
Agradecido : 2386 veces
Agradecimiento recibido: 1041 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor minter » 27 Ago 2019 22:49

Flipante!!!
No me ha dado tiempo ni a sacar al perro... y Blackhole ya ha destripado el .PRG! -shock

No me ha dado tiempo ni a sacar al perro … ¿Cuándo has tardado? ¿Una hora? -shock

Ahora entiendo a los crakers a ver quien tardaba menos en reventar un juego. -507

Avatar de Usuario
kikems
Mensajes: 3391
Registrado: 30 May 2013 19:23
Agradecido : 978 veces
Agradecimiento recibido: 1348 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor kikems » 28 Ago 2019 10:34

A la noche , si tengo tiempo, intentaré hacer lo mismo con otro juego cualquiera, a ver si ahora que creo entender el proceso que ha seguido BlackHole, soy capaz a realizarlo con otro título. Lo que más me cuesta ver es de donde a donde están alojados los datos comprimidos.

BlackHole
Mensajes: 1115
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 11 veces
Agradecimiento recibido: 237 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor BlackHole » 28 Ago 2019 11:22

Bueno, aquí dejo mi versión del juego, sin cheat/trainer ni nada, desprotegida directamente del original en disco. Como veis, compresores más modernos permiten incluso dar una pequeña vuelta de tuerca al utilizado por REMEMBER en Agosto de 2009 (muy probablemente Exomizer 2.0 Beta 6). Dejo 2 ficheros, uno comprimido a mano con aPLib de Jørgen Ibsen y la rutina de descompresión para 6502 de Antonio Villena, que ocupa 24600 bytes, y otro comprimido con el reciente Exomizer 3.0.2 de Magnus Lind, que ocupa 24286 bytes.

Aunque el Exomizer 3.0 es un 60% más rápido que el anterior Exomizer 2.0, todavía la rutina de aPLib optimizada por avillena es un 40% más rápida que el Exomizer 3.0, con apenas una diferencia de tamaño de un 1,3% y 1 bloque de disquete. Para intentar maximizar la velocidad del Exomizer, he utilizado la siguiente línea de comando, que desactiva la pantalla del VIC y limita a 256 bytes la longitud máxima de secuencias a comprimir (comprime algo menos pero descomprime bastante más rápido según la documentación):

exomizer sfx $8009 -o aliens-exo.prg -s "lda #$00 sta $d011 sta $d020" -n -M 256 0800-FFF7.prg

Aliens_(Electric_Dreams_1986)_(Original).d64
Aliens (Disco original)
(170.75 KiB) Descargado 8 veces

aliens-exo.prg.gz
Aliens (Exomizer 3.0.2)
(23.65 KiB) Descargado 8 veces

aliens-aplib.prg.gz
Aliens (aPLib 1.1.1)
(23.65 KiB) Descargado 11 veces

Avatar de Usuario
papalapa
Mensajes: 329
Registrado: 05 Ago 2018 18:22
Agradecido : 107 veces
Agradecimiento recibido: 71 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor papalapa » 28 Ago 2019 11:34

Joer con BlacHole, es un "buena pieza" ¿eh? -grin

Después de leer los posts creo que la idea de kikems es muy buena pero lamentablemebte irrealizable: no se puede crear un protocolo standard que sirva para todos los programas ya que cada uno puede estar modificado de distinto modo.

Me recuerda los tiempos del PC Tools 1.0 y el editor de sectores de disco y el Smartnomeacuerdo para monitorizar la memoria, punteros y variables en busca de vidas infinitas o passwords...

Avatar de Usuario
minter
Mensajes: 2533
Registrado: 22 Jul 2014 18:51
Agradecido : 2386 veces
Agradecimiento recibido: 1041 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor minter » 28 Ago 2019 12:16

Que cosa mas curiosa!
El Exomizer Coloca el bloque comprimido al principio de la memoria y empieza a descomprimir desde el final hasta el principio.
Mientras que el de Antonio lo hace del revés. Carga el bloque comprimido al final de la memoria y va descomprimiendo desde el principio al final.

Debe de estar esa ganancia de velocidad relacionada con el contador del programa y no con el método de compresión.
Le debe resultar mas rápido al ordenador volver a situarse al principio para dejar la memoria descomprimida, que leer al principio y ir escribiendo en el final. Todos esos ciclos de reloj para avanzar el contador de programa, debe de ser tiempo que se pierde.

Bueno... no se... elucubraciones. :)

BlackHole
Mensajes: 1115
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 11 veces
Agradecimiento recibido: 237 veces

Re: Ayuda para destripar/ripear un ejecutable de C64.

Mensajepor BlackHole » 28 Ago 2019 13:46

minter: Ten en cuenta que todo el proceso de la versión de aPLib por ahora es completamente manual, y soy yo quien mueve el programa al final de la memoria porque la rutina descomprime hacia adelante. En el caso específico del Aliens, el emulador VICE 3.1 me está dando 344.148 ciclos para mover los datos y 3.242.907 ciclos para descomprimirlo. Tengo pendiente desde hace 1 año programar una versión de la rutina 6502 que descomprima hacia atrás (en teoría sería sencillo, solo habría que decrementar y restar donde está incrementando y sumando ahora, pero lo he ido dejando por pura vagancia).

En Z80 sí lo hice en su día, y los resultados son exactamente los mismos ciclos de procesador. Le cuesta exactamente lo mismo incrementar que decrementar. Así que en teoría solo te ahorrarías el tiempo de mover los datos. Lo que sí cambia es el resultado de la compresión, es diferente si se comprime en un sentido que en otro. El programa que tengo hecho desde hace 15 años para gestionar la librería de aPLib, me comprime 2 veces: al derecho y al revés, y uso uno u otro resultado según me convenga. A veces se ahorra un puñado de bytes, pero en el caso del Aliens era al contrario: ¡eran 98 bytes mas!


Volver a “Software C64”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado