Ingeniería inversa de un juego de Game Boy Advance — Guía Completa

Bruno Macabeus
5 min readMar 7, 2021

Read it in English here! 🇺🇸
Leia isso em Português aqui! 🇧🇷

Versión en español traducida por Puckman 💙

Siempre intento venir con proyectos personales; son básicamente una gran manera de tener algo para pasar el tiempo y para estudiar algo diferente de lo que normalmente hacemos cada día. El año pasado, puse un montón de amor en un proyecto compilatorio, y este año no sería diferente: mi investigación sería centrada en encontrar algo que codificar y para estudiar que requiera entender los conceptos de algún área de Ciencia de Computadora — y eso puede convertirse en un proyecto emocionante para trabajar.
Después de unas semanas de flor en flor, sin poder encontrar algo que me dejara concentrado por unos días, encontré un desafío que llamó mucho mi atención: crear un editor de niveles para Klonoa, un juego de Game Boy Advance — así es, ¡trabajar en un proyecto de rom hacking!

Con las siguientes publicaciones, iré a fondo en mi investigación para conseguir más gente que también estudien ingeniería inversa y otros fascinantes tópicos. Estas publicaciones estarán en Inglés y Portugués para conseguir toda la gente que sea posible.

Si quieres estar al tanto para el desarrollo de proyectos puede consultar su código, que está siendo escrito en JS y React, aquí: https://github.com/macabeus/klo-gba.js

El proyecto del estudio que enseñé del desarrollo, klo-gba.js tuvo tanto éxito en la comunidad de ROM hacking, que fue destacado en la comunidad más grande de la rama.

Pero primero, vamos a hacer un resumen del trabajo ~~

Charlas

¿Eres el tipo de persona que prefiere ver en vez de leer?
¡No hay problema! Mi amigo y yo dimos una lectura en tres conferencias sobre este proyecto. Por supuesto, en una charla, el contenido está mucho más condensado, porque tenemos menos tiempo, así que estas publicaciones están mucho más detalladas — pero estas charlas traen un enfoque interactivo para desentrañar los desafíos de ingeniería inversa.

Charla en DEFCON Furs 2021, online 🌎
Ya que esta conferencia está orientada a la seguridad, esta charla está centrada en el proceso de la ingeniería inversa. Slides.
(hay un breve problema de audio, solucionado a las ~ 2:00)

Charla en The Conf 2019, en Brasil 🇧🇷
Ya que esta conferencia tiene una audiencia general, la mitad de esta charla es sobre ingeniería inversa, y la otra mitad es sobre el front-end. Slides

Charla en BalCCon 2k19, en Serbia 🇷🇸
El mismo caso de DEFCON Furs 2021: esta conferencia está orientada a la seguridad, por lo que esta charla está centrada en el proceso de la ingeniería inversa. Slides

¿Quién demonios es Klonoa?

Teaser de “Klonoa Empire of Dreams”

Es un plataformero en 2D, un poco centrado en puzles.
Tiene varios niveles y la complejidad de la mecánica incrementa mientras tu vas por los niveles de una forma adictiva. Pero los niveles son finitos… Y el dato de que estoy muy adicto al juego me dio la pregunta: ¿Y si pudiéramos crear nuestros propios niveles?

Varias funciones hacen este juego perfecto para este desafío: es 2D y tiene un mapa basado en tiles, algunas mecánicas simples, y corre en una consola vieja y popular. Ingeniería inversa y un editor de niveles son complicados, ¡pero es realizable!
¡Así que vamos allá!

> ¿Qué es un mapa basado en tiles?
Fácil: es un mapa que consiste en una colección de piezas pequeñas. Cada pieza (tile) usualmente aparece varias veces y es representado internamente por un ID único.
Si viste el video de arriba, puedes diferenciar fácilmente una malla en primer plano, en donde hay varias piezas, así formando el mapa del juego.
Esto es una manera muy común de diseñar un juego 2D.

Game Boy Advance

Es una consola portátil lanzada en el 2001. Fue muy popular en su tiempo y, como casi cualquier consola que se volviera popular, había un montón de personas interesadas en aprender más de cómo funciona internamente, que resulta en montones de investigaciónes y documentaciónes en cómo funciona su arquitectura, como crear tu propio juego, herramientas para ayudar en la ingeniería inversa y proyectos relacionados con los juegos más populares, como Pokémon — por los que puedes encontrar editores de niveles, como Advance Map.

Sin embargo, como Klonoa no es tan popular como Pokémon, no hay investigaciones centradas en cómo funciona y ninguna herramienta relacionada. ¡Pero podemos tomar ventaja de todo el ecosistema existente para crear nuestra propia herramienta basada en manuales de GBA y debuggers!

Nuestras herramientas

Al lado izquierdo, no$gba. Al lado derecho , IDA.

Vamos a estar usando dos herramientas: No$GBA mayoritariamente para análisis dinámicos (analizar el juego mientras está corriendo) y IDA para análisis estáticos (analizarlo mientras no está corriendo).

no$gba es una muy buena herramienta para hacer análisis dinámicos, dándote todo integrado en un lugar. Al estar estrictamente centrado en GBA, tiene funciones específicas, como visualizar el background/mapa de tiles, visualizador de memoria gráfica, etc. Esto hace todo más fácil. Sin embargo, para un debugger más general, está muy limitado si se compara a IDA, que tiene funciones excelentes para análisis estáticos, como un visualizador de gráficos y la extracción de ciertas regiones de la memoria en un archivo separado — que será crucial para cuando vayamos a extraer el nivel de la ROM.

JavaScript

Este proyecto es una webapp escrita en JS y React.

Me gusta mucho las webapps porque, solo acceciendo a la URL, el usuario tiene el producto fuera de la caja. No quería forzar un usuario a descargar una app solo para crear algunos niveles para un juego, así que decidí que la herramienta sería para página web.

Elegí JS porque es el lenguaje que corre en un navegador que estoy más experimentado. React fué elegido porque me gusta mucho la idea de pensar en tu front-end como componentes aislados, cada uno con un set de estados.

Hablaremos más sobre el front-end en las últimas publicaciones en esta serie.

¿Listos? ¡Ya!

Al final de estas publicaciones, aprenderás todo sobre cómo está aplicación mágica fue desarrollada

Dada esta breve descripción, en los siguientes capítulos explicaré mi progreso en cada paso del proyecto para que juntos podamos crear un editor de niveles para Klonoa ¿Vamos hacia ello?

Siguiente publicación: ¡Vamos a alargar el puente!

--

--