Como enfrentarse al desensamblado

Foro oficial de nuestro primer concurso de Remakes, celebrado en 2007. || Official Forum of our first remakes compo, held in 2007.

Moderadores: Administradores, The Punisher

slainte
8 bits
8 bits
Mensajes: 20
Registrado: 05 Feb 2007 08:06
Ubicación: Barcelona

Como enfrentarse al desensamblado

Mensajepor slainte » 14 Feb 2007 18:30

para Spectrum (by Slàinte)
Como parece que hay gente que no tiene mucha mano en como enfocar el proceso artesanal del desensamblado os dejo un poco el sistema que yo uso para ello con el soft de spectrum:

Herramientas:
ZXPreview (http://home.arcor.de/clausjahn/spectrum/)
EmuZWin
IDA (yo concretamente uso el 4.17 para windows)
Manual de BASIC del Spectrum (http://www.worldofspectrum.org/ZXBasicManual/)
The Complete Spectrum Rom Disassembly (ftp://ftp.worldofspectrum.org/pub/sinclair/books/CompleteSpectrumROMDisassemblyThe.pdf)
Referencia de ensamblador de Z80 (http://www.zilog.com/docs/z80/um0080.pdf)

Proceso:
- El primer paso es recuperar el cargador basic del juego, hay muchas formas, yo uso el fichero .tap y el zxpreview
- Normalmente hay varios valores a tener presentes en el cargador: el primero el setteo de RAMTOP (clear XXXXX) que indica qué zona de memoria se nos va a reservar para los datos de nuestro programa, y el RANDOMIZE USR YYYYY que nos indica el punto de entrada del programa.
- Ahora necesitamos un volcado de la memoria del spectrum, lo cual podemos hacer desde la mayoria de emuladores... yo suelo hacer el volcado de 0000 a FFFF, para tener las llamadas a ROM en el mismo bloque (incluso porque a veces hay coders que aprovechan zonas concretas de rom para ahorrarse algunas lineas
- Cargamos el fichero raw en el IDA, vamos a la direccion YYYYY del RANDOMIZE USR y convertimos a Código para que empiece el análisis... a partir de ahi se trata de identificar subrutinas, etiquetar coherentemente los saltos y las posiciones de memoria, etc... todo altamente artesanal...
- Adicionalmente se puede lanzar el juego con el emuzwin, haciendo que no arranque tras la carga y poniendo breakpoints para ir ejecutando de forma controlada y siguiendo flujo de ejecución y valores de los datos, etc. en la ventana de desensamblado (ademas la parte de ROM está muy bien etiquetada en la vista de desensamblado)

Espero que esto os ayude ;) e invito a los demas a añadir un post con sus propios métodos para cualquier otra plataforma

Avatar de Usuario
The Punisher
256 bits
256 bits
Mensajes: 3072
Registrado: 24 May 2005 22:39
Ubicación: Lejos de la ostia!!!
Contactar:

Mensajepor The Punisher » 14 Feb 2007 18:47

Gracias por el tutorial!!... es super interesante!!!! seguro que a mas de uno le irá de perlas!!! :P
Curioso esto de escribir sobre la historia de los videojuegos. Uno puede ser arqueólogo y momia al mismo tiempo.

http://www.amigamania.com
De Amigueros, para Amigueros...

Avatar de Usuario
AugustoRuiz
128 bits
128 bits
Mensajes: 1726
Registrado: 24 May 2006 08:35
Ubicación: Madrid
Contactar:

Mensajepor AugustoRuiz » 14 Feb 2007 19:42

Gracias!!!

Avatar de Usuario
WYZ
Site Admin
Site Admin
Mensajes: 2356
Registrado: 29 Dic 2004 21:17
Ubicación: Cartagena (CT)

Mensajepor WYZ » 14 Feb 2007 22:28

Voy a poner yo tambien alguna referencia:


http://www.compuware.com/products/devpartner/studio.htm

Be GOD on your PC!

Juas juas juas !
WYZPlayer

DREAM OVER
INSERT COIN

insalada
8 bits
8 bits
Mensajes: 7
Registrado: 17 Abr 2007 17:24

Mensajepor insalada » 18 Abr 2007 18:51

Muchas gracias pero....
...para desensamblar uno de pc?

Avatar de Usuario
Guillian
32 bits
32 bits
Mensajes: 626
Registrado: 02 Ene 2005 02:40

Mensajepor Guillian » 18 Abr 2007 23:25

El IDA Pro por ejemplo.

insalada
8 bits
8 bits
Mensajes: 7
Registrado: 17 Abr 2007 17:24

Mensajepor insalada » 19 Abr 2007 15:37

Gracias, aunque supongo que dependerá del lenguaje en el que haya sido programado el juego. Lo de pc lo decía porque si el juego tiene diferentes versiones, será mejor desensamblar la de pc que la de spectrum.

En el juego me encuentro con el .exe, que será el que tenga que descompilar, y con un archivo .CTR, alguien sabe algo de ésta última extensión? en cuanto a la extensión .PIC, se puede hacer algo con ella? extraer gráficos, recursos o algo?

Muchas gracias señores!
Saluditos.

Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensajepor na_th_an » 19 Abr 2007 15:43

Un ejecutable compilado es in-descompilable. No vas a obtener código C con sus nombres de variables ni nada.

Se puede decompilar el Java y el VB hasta cierta versión, porque es otro tipo de ejecutables. Hay una máquina virtual que ejecuta un bytecode que tiene un montón de info sobre el código fuente, por lo que se puede regenerar.

Pero con un EXE normal, no.

Desensamblando obtienes código en ensamblador muy feo. Básicamente se cambian los números de código máquina por mnemónicos equivalentes y se sustituyen las direcciones de memoria por etiquetas (esto no con todos los desensambladores).

Para sacar gráficos y otros recursos hay que confiar en que los desarrolladores empleasen formatos gráficos estándar y no se inventasen los suyos. En este caso, hay programas que recorren archivos de datos leyendo e interpretando cabeceras y extraen lo que se encuentren. Yo usaba uno, pero no tengo ni idea de cómo se llamaba... ¡hace demasiado tiempo!

insalada
8 bits
8 bits
Mensajes: 7
Registrado: 17 Abr 2007 17:24

Mensajepor insalada » 19 Abr 2007 16:24

Vale gracias, es lo que me temía, por eso ahora me surge la duda de: para qué este minitutorial de desensamblado? si poco se puede hacer con lo obtenido...

Algún programa para extraer recursos del .exe, del .ctr o del .pic? si pudiera ser para linux...sino para windows...

Graaacias de nuevo.
Saluditos

Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensajepor na_th_an » 19 Abr 2007 16:32

Se puede hacer mucho, pero es muy costoso entender código en ensamblador. Costoso en tiempo. Al menos si no estás muy entrenado, como algunos cracks que pululan por aquí. Para mí sería una tarea hercúlea y como que paso :D Prefiero "reinterpretar" el juego basándome en lo que observo. Para mí es más divertido, pero sobre gustos no hay nada escrito.

Y sobre lo de ripear los contenidos originales, tampoco sé nada, ya que siempre que me he puesto al lío me he currado todo desde cero. Como mucho habré hecho capturas del juego en un emu para pintar encima.

insalada
8 bits
8 bits
Mensajes: 7
Registrado: 17 Abr 2007 17:24

Mensajepor insalada » 19 Abr 2007 16:42

Sin duda, estoy contigo.

En cuanto al programa extractor de recursos de exes posiblemente te refieras al Reshack...sin embargo solo funciona para exes win32..estoy intentando buscar algo similar para linux también.

Muchas gracias por la ayuda, mis dudas(por el momento:P) han quedado resueltas.

Gracias!
Saluditos


Volver a “CEZ Retrocompo 2007 (Español & English)”

¿Quién está conectado?

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