sábado, 8 de noviembre de 2014

¡Nace NitroDebugger!

Llevo tres años depurando juegos de la Nintendo DS y una de las mayores dificultades con la que me encuentro es tener un programa con el que sea cómodo trabajar. A pesar de que es posible utilizar programas tan potentes como IDA Pro y radare, estos no están preparados para las necesidades de romhacking, de editar juegos. De aquí nace NitroDebugger, un depurador remoto (no tiene capacidad de emulación) que pretende estar enfocado en la Nintendo DS y de forma general, en la depuración de videojuegos permitiendo a cualquier persona iniciarse en este mundo.



Concursos de software libre

Este proyecto nace como una necesidad para mi Trabajo Fin de Grado del que ya dedicaré una entrada más adelante, y los concursos de software libre. El objetivo de estos concursos / competiciones es fomentar el código abierto, el desarrollo en equipo y definitiva la cultura libre. En concreto existen dos: el Certamen de Proyectos Libres de la Universidad de Granada que es a nivel local y está patrocinado por la Oficina de Software Libre de la UGR, y el IX Concurso Universitario de Software Libre a nivel nacional. Ambos concursos no son excluyentes y tratan de lo mismo: desarrollar un software (en el caso del certamen también se incluye hardaware y documentación) libre. Así que puestos a participar, ¿por qué no participar en los dos?

Los premios alcanzan hasta los 1000 €, aunque lo más interesante desde mi punto de mi punto de vista es el hecho de participar, poder ponerlo en el currículum, ganar visibilidad de cara a las empresas, y sobre todo, poder participar en hackthalons y que decenas de personas te ayuden a desarrollar el proyecto. Espero que además me fuerce a mejorar tanto la calidad de código como de documentación y lo que en principio surge como una pequeña herramienta personal se pueda convertir en algo útil para los demás.


Productos para depuración

Principalmente hay dos formas de depuración de videojuegos: mediante emuladores con capacidad de depuración o mediante programas externos que se conecten a estos emuladores. Además, en el caso de la Nintendo DS existen 3 programas principales para llevarlo a cabo.

  • No$Gba: primer emulador de la Nintendo DS desarrollado por Martin Korth, la persona que investigó a fondo y creo la mejor especificación de la videoconsola. El código del emulador no es público, y hasta hace pocos meses la versión con capacidad de depuración era de pago. Actualmente, a pesar de ser gratuita, el emulador está un poco desfasado y da problemas con juegos modernos.
  • DeSmuME + IDA Pro: respecto al primero se trata de un emulador de código abierto y en continuo desarrollo. Es capaz de emular a la perfección casi todos los juegos. Además implementa el llamado Remote Stub, es decir un miniservidor con el que un cliente es capaz de controlar el estado de depuración (iniciar, parar, añadir puntos de interrupción, ver memoria, ...). Esto permite que programas externos se puedan conectar al emulador y poder depurar el juego a distancia. Es el caso de programa privativo IDA Pro una herramienta muy potente (y con muchas funciones innecesarias) que cuesta entorno a $500 la licencia. Esta es la mejor forma que he encontrado en la actualidad de depurar juegos.
  • DeSmuME + radare: caso similar al anterior, aunque ahora usamos como depurador a distancia un programa con licencia abierta como es radare. Se trata de otro entorno de depuración por consola muy potente. Como desventaja decir que el nombre de sus comandos son pocos intuitivos y que en cuanto a depuración remote con DeSmuME por algún fallo es extramadamente lento e inviable su uso.
De aquí viene la necesidad de desarrollar un software con funcionalidades sencillas, claras y directas para la depuración de juegos.


NitroDebugger

El programa debe cumpliar una serie de necesidades básicas:
  • Ser capaz de continuar, avanzar paso a paso y parar la emulación.
  • Ser capaz de visualizar el código del programa de forma sencilla (y con colores).
  • Ser capaz de visualizar la memoria RAM y permitir tanto búsquedas como modificarla.
  • Permitir comentar el código.
  • Exportar e importar archivos de código.

Además, como requisitos adicionales que otros tipos de depuradores no incluyen serían:
  • Traducir las instrucciones a sencillos comandos en C.
  • Ser capaz de analizar el código para detectar inicios y fin de rutinas.
  • Permitir modificar el código del programa en tiempo de ejecución.
  • Permitir buscar archivos cargados en la RAM y/o código ejecutandose dentro de la ROM del juego.
  • Detecar condiciones y bluces.
  • Permitir extensión mediante plug-ins.
  • Permitir la creación de estructuras de datos.

Cada semana iré comentando las novedades principales del proyecto desde este blog, así como creando documentación en la wiki del repositorio. El código estará bajo licencia de software libre GPL v3, y se podrá consultar desde Github. Además, iré informando desde mi cuenta personal de Twitter.


Hack your time!

No hay comentarios:

Publicar un comentario