Destacados

Más
Jueves, 4 de marzo, 2010

Resources: recursos escondidos

20 +20K

Los Resources o recursos en informática (en cuánto a software) son un conjunto de datos externos embebidos en el interior de una aplicación.

Publicidad

Los Resources (recursos) en informática, y más concretamente hablando en cuánto a software, son un conjunto de datos «externos» embebidos en el interior de una aplicación o fichero como podría ser un fichero ejecutable o un archivo cualquiera.

Mediante el uso de algunos programas extractores de recursos (también llamados rippers), es posible acceder y separar estos recursos en ficheros independientes.

En Windows, una aplicación ejecutable, por ejemplo, puede tener los siguientes recursos (entre otros):

  • Cursores: El «icono» que representa el ratón.
  • Iconos: Diferentes iconos, por ejemplo, los usados en barras de herramientas.
  • Fuentes: Tipos de letra utilizados en el programa.
  • Cuadros de diálogo: Organización y disposición de los menús y sus opciones.
  • String: Mensajes de texto.

En este caso hablamos de los recursos de Windows. Con determinadas aplicaciones para la edición de recursos, se podría incluso modificar estos datos, pudiendo guardar los cambios (cambiar cursores del ratón, mensajes o cuadros de diálogo, etc...).

Una práctica muy común en tiempos del MSDOS (y bajo otro tipo de formato) era la de modificar una aplicación binaria en inglés (con un editor hexadecimal) para hacer una traducción a nuestro idioma, sin la necesidad de tener el código fuente.

La limitación estaba en que la longitud de la frase no se podía variar.

Con el tema de los virus, ya empezaban a encontrarse mensajes ocultos (que nunca mostraba el virus) o cosas similares.

Mediante un editor de recursos modificar estos datos era más sencillo. Bastaba con buscar el recurso apropiado, cambiarlo por otro y guardar los cambios.

Existen varios editores de recursos actualmente, como Anolis Resourcer (GPL), Resource Hacker, RESEdit o XN Resource Editor (Freeware) o Resource Builder (de los más completos, pero de pago).

En los juegos, ocurría (y ocurre) algo similar. A ojos del usuario, se solventaba el inconveniente de tener multitud de ficheros dispersados en una carpeta, pasando a tener «paquetes» con colecciones, y complicando un poco más la posibilidad de modificar los recursos.

Recalcar que cada compañía de juegos tenía su propio formato de empaquetamiento de datos, y no tienen que ver con el sistema de recursos de Windows.

Un ejemplo podría ser:

  • JUEGO.EXE: El fichero ejecutable de la aplicación.
  • SOUNDS.DAT: Colección de sonidos (por ejemplo, 30 archivos de audio y 4 de música) del juego.
  • GRAPHICS.DAT: Colección de gráficos (imágenes, animaciones, sprites, etc... del juego.

Después de este largo preámbulo para ponernos en situación, era muy común que los programadores de juegos se despistaran, y olvidaran en la colección varios sprites, sonidos o imágenes que nunca se usaban en el juego.

Esto, producto de pruebas en fase de desarrollo, escenas eliminadas o simples huevos de pascua, era un perfecto divertimento para usuarios curiosos e inquietos. Veamos, unos cuantos sprites no utilizados en diferentes juegos:

Gabriel Knight 1

Al parecer la primera parte del juego, en lugar de Sins of the Father se pretendía llamar Shadow Hunter, o eso es lo que aparece en una imagen no utilizada, pero escondida en el juego.

También se encontró una escena, fuera de la librería Rare books de Gabriel, sin embargo, en el juego no es posible acceder a ese lugar.

Sonic

En las distintas versiones de Sonic, hay múltiples sprites y animaciones que no se llegan a utilizar en las partidas del juego, como las siguientes:

Woodruff and Schnibble

El grande (y subestimado) de Coktel Visión, también tenía sus recursos ocultos.

Wolfenstein 3D

Probablemente los creadores de Wolfenstein 3D decidieron a última hora que el hecho de que la cabeza de un enemigo salga volando es una mala idea, y se olvidaron de eliminarla.

The Dig

En la época de la aventura gráfica de Steven Spielberg, parece que ya se tenía conocimiento de que existiría twitter, con esos pajarillos azul-verdoso que no existen en el juego real.

Larry 7

La capitana Thygh, de Larry7 parece también tener su propio hueco en los sprites descartados, y cambió varias veces de look antes de su estilo definitivo...

Bomberman

El famoso y clonado juego Bomberman, también tuvo múltitud de sprites fallidos, que no llegaron a su versión final.

Space Quest 1

En Space Quest 1 se encontró un extraño monstruo que sujeta una caja con un texto «Orat Chow». Probablemente alguna broma privada de los programadores.

Abadía del crimen

En oposición al resto de las mencionadas, en torno al famoso juego español La abadía del crimen se creó un falso rumor de que existía una habitación oculta que no se utilizaba. En realidad, la habitación existía (la celda del hermano Berengario) pero no estaba dibujada en el juego.

Con algunos trucos y trampas era posible llegar a visualizarla, mostrándonos un error gráfico de la escena, pero donde se pueden ver en su posición real a los personajes: el Abad esperando fuera para echarnos una buena bronca, los dos hermanos zombies perdidos y Adso en la celda contigua.

Yoshi's Island

El verde amigo de Mario, Yoshi, también guarda unos misteriosos secretos... ¿Podrá tranformarse en cualquier cosa que contenga el color verde?

Duke Nukem

El juego que se ganó la enemistad del grupo de Facebook «Señoras de los años 90 que no les gustan los videojuegos violentos para sus hijos», Duke Nukem 3D, también tuvo algunos sprites escondidos, donde se puede ver desde una P90 fatalmente dibujada, hasta lo que parece la pistola de Ali G.

Existen muchos sprites similares de otros juegos famosos, como Bubble Bobble, Zelda, Castlevania, Torin's Passage o Ganbare Goemon 2, entre muchos otros buscando por unused sprites, por ejemplo.

¡Cuéntanos! ¿Conoces algún caso similar de juegos en los que se hayan encontrado sprites ocultos que no estén en el listado?

Comparte este artículo
Sobre el autor de Emezeta

Escrito por , más conocido como Manz. Es Ingeniero-Técnico en Informática de Gestión por la Universidad de La Laguna y residente en Santa Cruz de Tenerife.

20 comentarios de lectores
Interesante
Aplatanado Aplatanado Viernes, 5 de marzo de 2010, 00:05
1
Hombre Manz, no es por nada pero creo que has mezclado un poco las cosas. Por un lado están los "Recursos de Windows". Es decir, en los Windows de 16 bits se utiliza un formato de ejecutable (y esto incluye no solo los EXE sino también las DLL) denominado NE (New Executable). Mientras que en los Windows de 32 y 64 bits se utiliza el PE (Portable Executable). Desde el principio Microsoft consideró interesante no sólo poder guardar secciones de código y datos en los mismos, sino también establecer un formato para secciones especiales que debían de guardar icono, cadenas, cuadros de diálogo, etc. Obviamente eso ya se podía hacer a mano usando las secciones de datos convencionales (aunque era responsabilidad del programador crear sus propias rutinas y programas editores de esos recursos) La novedad fue que Microsoft introdujo un formato y un API para acceder a esos recursos de forma estándar en Windows (ojo, el formato ejecutable de MSDOS no soportaba esto). Incluso hay DLLs en el sistema que solo llevan recursos y nada del código o los datos de un programa. Aunque, como bien dices, esos recursos se pueden modificar con un editor hexadecimal desde MSDOS, lo cierto es que desde el principio Microsoft ofrecía herramientas para insertar y extraer dichos recursos de los ejecutables. Así que cualquier entorno de desarrollo para Windows las traía. En todo caso la captura de pantalla que pones es del contenido de JPEG. Esto nada tiene que ver con los recursos de los ejecutables de Windows. Lo que se ve en la captura es un ejemplo de uno de los múltiples campos que pueden usarse dentro del formato JPEG para guardar información acerca de la imagen. Estos campos se editan con editores de JPEG y no con los editores de recursos de Windows. Además hay que decir que otros SSOO (como todos aquellos que utilizan ELF como formato ejecutable) no soportan este tipo de recursos en los ejectuables. Esto es algo bastante específico de Windows.
Responder Permalink Mozilla Firefox 3.0.15 · Ubuntu Linux ·
Interesante
Aplatanado Aplatanado Viernes, 5 de marzo de 2010, 00:06
2
Y sigo... Respecto a lo juegos, tampoco esos .DAT tienen nada que ver con los recursos de Windows. El formato de los DAT era específico de cada programa o motor de videojuegos. Hoy en día, por ejemplo, se podrían guardar todos los recursos de un juego en un archivo de extensión .DAT en formato ZIP o TAR. Como hay diversas librerías que permiten acceder a estos formatos, no habría mayor problema en acceder a los recursos almacenados desde el programa y en tiempo de ejecución. Pero obviamente esto tampoco tendría nada que ver con los recursos de Windows. Si me gustaría hacer un pequeño apunte por curiosidad. Entre los recursos de un ejecutable hay uno que guarda los datos del programador, el nombre del programa, la versión y el idioma. Ese es el recurso que utiliza Windows para hacer cosas como sólo permitir la instalación de DLL del sistema en español en versiones de Windows en español. Obviamente la versión en español y en inglés son iguales, excepto por ese campo de idioma y porque todos los recursos cadena y cuadro de diálogo están en idiomas diferentes. Saludos y perdón por el rollo ;-)
Responder Permalink Mozilla Firefox 3.0.15 · Ubuntu Linux ·
Manz Manz Viernes, 5 de marzo de 2010, 00:17
3
De perdón nada, muchísimas gracias por la aportación, bastante enriquecedora. Mi idea era comentar el concepto de recurso de una forma muy general, sin entrar demasiado en detalles, para dar a conocer como se obtuvieron los sprites mostrados al final del artículo. No obstante, intentaré modificar algunas cosas para no inducir a dudas a los que puedan leer el artículo, ya que como dices, hay varios detalles erróneos e incorrectos.
Responder Permalink URL · Mozilla Firefox 3.6 · Windows Vista ·
Jhonny Jhonny Viernes, 5 de marzo de 2010, 02:26
4
Muy interesante el artículo. Creo que cabe una mención especial (digna de WTF) de un sprite en el Super Mario Bros. 3 que podría ser hasta censurado por su ambigua apariencia: http://www.themushroomkingdom.net/images/smb3/smb3_lostsprites04a.gif
Responder Permalink Opera 9.80 · Windows Vista ·
Matt Viernes, 5 de marzo de 2010, 02:44
5
No pueden faltar... ¡las escenas no utilizadas en Loom!
Responder Permalink Mozilla Firefox 3.6 · Windows XP ·
urko urko Viernes, 5 de marzo de 2010, 08:01
6
Arkanoid con un editor enconrtabas en el EXE un codigo cheat... tambien en los primeros juegos de Sierra, las aventuras graficas, si mirabas el codigo fuente del ejecutable, podias ver los objetos que se habia que encontrar.
Responder Permalink Mozilla Firefox 3.6 · Windows XP ·
Aplatanado Aplatanado Viernes, 5 de marzo de 2010, 09:19
7
La verdad es que hoy en día con el comando strings de Linux resulta muy sencillo extraer las cadenas de un ejecutable sin tener que utilizar un editor. Se puede emplear para comprobar si un ejecutable incluye tal o cual cadena o ver las rutas que utiliza el programa (interesante cuando los mensajes de error son demasiado crípticos)
Responder Permalink Mozilla Firefox 3.0.15 · Ubuntu Linux ·
Manz Manz Viernes, 5 de marzo de 2010, 09:41
8
@Aplatanado: Supongo que también es mencionable cuando un archivo ejecutable esta comprimido con utilidades tipo UPX (tanto EXE de windows, como ELF de linux), ASPACK (windows) o similares. No estoy seguro, pero creo que antaño era más complicado modificar estos recursos si estaba comprimido (o al menos en el caso del LZEXE de DOS).
Responder Permalink URL · Mozilla Firefox 3.6 · Windows Vista ·
Pablo Sanchez Pablo Sanchez Viernes, 5 de marzo de 2010, 11:59
9
Yo uso ghex2 de ubuntu, cuando necesito un editor de esa manera. w3wes@jamon-espana.com.es
Responder Permalink Mozilla Firefox 3.0.17 · Ubuntu Linux ·
Nayland Smith Nayland Smith Viernes, 5 de marzo de 2010, 19:22
10
Como me ha recordado esa imagen del editor hexadecimal a cuando hacia pruebas traduciendo roms de snes
Responder Permalink Opera 9.80 · Windows XP ·
david david Sábado, 6 de marzo de 2010, 12:57
11
Interesante artículo... resulta curioso ver cómo la informática empieza también a tener su historia y sus "mitos". Un saludo.
Responder Permalink URL · Internet Explorer 8.0 · Windows XP ·
Diego Diego Lunes, 8 de marzo de 2010, 11:46
12
Me gustaría apuntar una cosa. En un editor hexadecimal si te puedes pasar del tamaño, insertando bytes extras. Sin embargo, necesitarás modificar punteros (direcciones de memoria) para que todo sigua funcionando bien. Es bastante complicado.
Responder Permalink Mozilla Firefox 3.0.17 · Windows XP ·
Aplatanado Aplatanado Jueves, 11 de marzo de 2010, 01:13
13
@Manz claro que ese caso es mencionable. Creo que incluso hay alguna herramienta de esas permiten comprimir toda una carpeta (con todos los recursos, DLLs y el ejecutable de la aplicación) en un ejecutable descomprimible al vuelo. Así que el programador utiliza los recursos como si fueran archivos independientes pero al usuario se le proporcionan en un único ejecutable. Como bien dices modificar los ejecutables empaquetados es más complicado. Las cadenas y otros recursos no se ven porque están comprimidos, así que es necesario averiguar como está empaquetado el ejecutable, desempaquetar y modificar. Esto implica un hacer un trabajo importante de ingeniería inversa (excepto en el caso de herramientas libres como UPX). Incluso algunos productos al empaquetar cifran el contenido y utilizan técnicas anti-debug para dificultar que la clave pueda ser obtenida fácilmente.
Responder Permalink Mozilla Firefox 3.0.15 · Ubuntu Linux ·
Aplatanado Aplatanado Jueves, 11 de marzo de 2010, 01:18
14
@Diego lo de editar aumentando el tamaño no es tan sencillo. Si lo haces, hay que modificar los punteros a todos los recursos situados posteriormente en el archivo. En el mejor de los casos (con EXE o ELF que son formatos reubicables) basta con ir tocando la tabla de símbolos del programa. La cuestión es ¿cuántos símbolos pueden haber en un programa genérico?. Además, en los sistemas de 64 bits donde las direcciones pueden ser relativas al contador de programa, habría que toca cada instrucción donde se hace referencia a la dirección del recurso para actualizar el desplazamiento del mismo respecto a dicho contador. A mi me parece un trabajo tremendamente lento y complejo.
Responder Permalink Mozilla Firefox 3.0.15 · Ubuntu Linux ·
Snypher Snypher Domingo, 21 de marzo de 2010, 16:52
15
Diria que el primero que pusiste de Sonic si que aparecia, cuando estabas sin tocar el mando durante un buen rato.
Responder Permalink Mozilla Firefox 3.5.8 · Windows Vista ·
Manz Manz Domingo, 21 de marzo de 2010, 20:12
16
@Snypher: Era similar, no hacía el gesto con los ojos y la cabeza.
Responder Permalink URL · Mozilla Firefox 3.6 · Windows Vista ·
Espineli Espineli Domingo, 21 de marzo de 2010, 22:51
17
Menudos vicios me heché al Wolfeinstein 3-D y al Sonic xD Salu2!!
Responder Permalink URL · Mozilla Firefox 3.6 · Windows XP ·
Espineli Espineli Domingo, 21 de marzo de 2010, 22:53
18
@Manz: Sí, era parecido, pero no el mismo, lo recuerdo bien :-) Salu2!!
Responder Permalink URL · Mozilla Firefox 3.6 · Windows XP ·
José Correa José Correa Viernes, 16 de abril de 2010, 16:38
19
Muy buen articulo amigo, yo me acuerdo de muchas escenas ocultas es en Prince of Persia el original, que justamente antes de llegar al final en la parte superior a la derecha te puedes subir y llegar a una escena por así decirlo "oculta" no tiene nada y es imposible de salir allí. Si quiere subo la imagen de esa parte.
Responder Permalink URL · Mozilla Firefox 3.6.3 · Windows XP ·
Manz Manz Viernes, 16 de abril de 2010, 19:52
20
@José Correa: Estaría genial que compartieras la imagen para que todos podamos verla.
Responder Permalink URL · Mozilla Firefox 3.6.3 · Windows Vista ·
Publica tu opinión



Acepto las condiciones y políticas de privacidad de este sitio web.
Suscribirme a través de FeedBurner a los nuevos artículos del blog por email.

Previsualización

Aquí se previsualizará su comentario. Revise que sea correcto antes de publicarlo.