Como enfrentarse al desensamblado
Moderadores: CEZ, The Punisher
-
- 8 bits
- Mensajes: 20
- Registrado: 05 Feb 2007 08:06
- Ubicación: Barcelona
Como enfrentarse al desensamblado
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/sincl ... blyThe.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
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/sincl ... blyThe.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
- The Punisher
- 256 bits
- Mensajes: 3073
- Registrado: 24 May 2005 22:39
- Ubicación: Lejos de la ostia!!!
- Contactar:
Gracias por el tutorial!!... es super interesante!!!! seguro que a mas de uno le irá de perlas!!!
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...
http://www.amigamania.com
De Amigueros, para Amigueros...
- AugustoRuiz
- 128 bits
- Mensajes: 1726
- Registrado: 24 May 2006 08:35
- Ubicación: Madrid
- Contactar:
- WYZ
- Site Admin
- Mensajes: 2356
- Registrado: 29 Dic 2004 21:17
- Ubicación: Cartagena (CT)
Voy a poner yo tambien alguna referencia:
http://www.compuware.com/products/devpartner/studio.htm
Be GOD on your PC!
Juas juas juas !
http://www.compuware.com/products/devpartner/studio.htm
Be GOD on your PC!
Juas juas juas !
-
- 8 bits
- Mensajes: 7
- Registrado: 17 Abr 2007 17:24
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.
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.
- na_th_an
- 256 bits
- Mensajes: 11874
- Registrado: 22 Abr 2005 13:25
- Contactar:
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!
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!
-
- 8 bits
- Mensajes: 7
- Registrado: 17 Abr 2007 17: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
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
- na_th_an
- 256 bits
- Mensajes: 11874
- Registrado: 22 Abr 2005 13:25
- Contactar:
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 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.
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.
-
- 8 bits
- Mensajes: 7
- Registrado: 17 Abr 2007 17:24
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
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