domingo, 7 de diciembre de 2014

Estado inicial de NitroDebugger

Tiempo de retomar NitroDebugger.

A finales de marzo fue cuando me pregunté ¿cómo se comunica IDA Pro con DeSmuME?. Tras estar buscando información sobre qué era GDB Remote, acabé leyendo la especificación. GDB Remote Serial Protocol es un protocolo que permite la comunicación entre dos equipos, uno que estará depurando un programa, y otro que estará controlando ese depurador a distancia mediante una conexión TCP. Se trata de un protocolo muy sencillo al que entraré en profundidad en otra ocasión. Dado que no podía parar de pensar en ello, decidí comenzar a hacer unas sencillas pruebas.

Comandos implementados hasta hoy.

Lo dejé a los pocos días, y está en estado de una prueba de concepto. Implementé de manera rápida los comandos más usuales como continuar, parar e hice un intento de obtener código en ensamblador. Como no hay un comando de ese protocolo para ese propósito pues se supone que es el cliente el que se encargaría de obtener los datos de la RAM y convertirlos a instrucciones, inventé yo uno y lo implementé en DesMuME. Esto será temporal.

Su futuro inmediato será una revisión y estructurado del código. Escribiré el código base sobre el cual se pueda implementar de forma paralela una linea de comandos y una interfaz gráfica con XWT. También intentaré aplicar la metodología TDD, todo un experimento.

jueves, 13 de noviembre de 2014

Terminando una carrera a lo 'romhacking'

Estoy ya en la recta final de mi grado en Telecomunicaciones y hace un par de meses me tocó elegir el Trabajo Fin de Grado (antes llamado Proyecto Final de Carrera). La gente de mi especialidad suele elegir temas relaciones con malware, rendimiento en videojugos, ataques a redes, ... Son interesantes, aunque era todo un sueño poder hacerlo sobre algo más relacionado con el romhacking.

Hace un año, en la asignatura Seguridad en Redes de Comunicaciones hice un trabajo opcional analizando diferentes algoritmos de seguridad en videojuegos. Fue mi primer trabajo sobre romhacking para la universidad, y como un sueño cumplido. Las transparencias están disponibles por aquí. Ese mismo profesor me propuso realizar el trabajo final sobre la misma temática pero profundizando más. Y así nace AiroRom.

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.

miércoles, 30 de abril de 2014

Rescatemos el Wi-Fi de la Nintendo DS

Tiempo hace que no escribo por aquí, aunque más de una entrada en borrador tengo planteada y algunas ideas más. El problema como siempre es el tiempo... En esta ocasión, este una entrada un poco urgente, porque dentro de poco llegará una catástrofe de la que espero que más tarde no nos sintamos impotentes.

El 20 de mayo Nintendo cerrará sus servidores de conexión Wi-Fi para Nintendo DS y Wii. Esto significará que todos los servicios que los juegos actuales tienen se perderán... para siempre. Se verán afectados contenidos descargables (DLCs) como misiones, objetos únicos... pero también afectará a servicios de multijugador on-line, siendo la pérdida más famosa la de Mario Kart DS (adiós a perder por paliza contra chinos y japoneses).

Pero hay una solución. La idea original es de Toad King, un usario de GbaTemp que creo este hilo, además de la web: Save Nintendo Wi-Fi. El objetivo es hacer un servidor falso que emule ser un servidor de Nintendo y que por tanto, de cara a la NDS, todo seguirá normal.

jueves, 12 de septiembre de 2013

Cómo depurar juegos de NDS con IDA Pro

Con esta entrada me gustaría comenzar una serie dedicada a la depuración de juegos para Nintendo DS. Mi objetivo es mostrar y explicar algunos de los análisis en ensamblador que hago para encontrar o modificar código de un juego. En esta primera entrada, explicaré cómo iniciar un entorno de depuración usando el desensamblador y depurador IDA Pro junto con el emulador DeSmuME.

Captura 1: Entorno de depuración completo

lunes, 19 de agosto de 2013

Logo de Nintendo en GBA y NDS

No hace mucho, @Nitehack me preguntó si sabía cómo podría extraer una imagen a partir de unos datos. No era la primera vez que me enfrentaba a este reto en concreto y ahora, con más experiencia adquirida quería volver a intentarlo.

¿Objetivo?


Todos los juegos para GameBoy Advance (GBA) y Nintendo DS tienen unos datos al principio del archivo (header) que los usa la consola para la inicialización del juego como el nombre, el código del desarrollador, las posiciones de memoria donde va el código, el punto de inicio del sistema de archivos... Sorprende ver entre estos datos un conjunto de bytes sin significado en ese contexto pero que, mirando en GBATEK parece ser el "Logo de Nintendo". Teóricamente, a partir de esos bytes se podría recrear esa imagen y es más, así lo hacen las consolas. En en juego para GBA estos datos se encuentran a partir de la posición 0x04 mientras que en uno de la DS en 0xC0, en ambos dispositivos este logo debe ocupar 0x9C bytes.

Logo de Nintendo en GBA.
En el archivo solo aparece el de Nintendo, no el de GAME BOY.

Lo primero que intento es comprobar si puedo ver ya directamente el logo. Para ello creo un archivo con los bytes 00 00 FF 7F que al abrir como paleta serán los colores negro y blanco respectivamente codificados en BGR555. A continuación usando Tinke abro los dos archivos, la paleta seleccionándola y pulsando 'P' y luego los datos del logo, igual y pulsando 'T'. El resultado final es este:

Datos en bruto, nada visible
La imagen está configurada como 1bpp y tiled (horizontal). Como se puede apreciar tendremos que hacer operaciones con esos bytes para obtener la imagen original y ese será el objetivo de la entrada, conseguir obtener la imagen y analizar todo lo relacionado con ella. El porqué de hacer esto no tiene respuesta, cuando a uno le gusta la ingeniería inversa y se le propone un reto no se pregunta para qué quiere el resultado, solo quiere disfrutar investigando ;).


domingo, 30 de septiembre de 2012

Again, again and again!

Esto es como hacer una casa y abandonarla hasta que un día te da por echar un vistazo y, ¡anda! sí hasta te apetece comenzar a vivir allí. Bueno, algo así creo yo. Ya veremos cuánto dura.

Este blog lo hice cuando me entró la curiosidad por el romhacking, ya veréis: la primera (y única) entrada es del 22 de diciembre del 2010, el primer commit de Tinke fue el 23 de diciembre del 2010. Espera, ¿Tinke? Tinke es el programa que empecé a hacer por curiosidad cuando empecé a interesarme en este tema. La idea era de crear un programa que podría ir adaptando para las diferentes situaciones que me surgieran, ya fueran soportar imágenes, texto, audio...

Todo empezó cuando un día raro me pregunté
¿Cómo será un archivo .NDS por dentro? ¿Cuál será su estructura?
 Rápidamente fui a Google y comencé a buscar, llegué (como no) a GBATEK donde está toda la documentación pública sobre GBA y NDS que se ha podido obtener mediante ingeniería inversa. Concretamente, buscaba como era la cabecera de estos archivos, algo que encontré en DS Cartridge Header. Al principio me costó bastante asimilar toda esa información sobre todo porque no tenía conocimientos básico (como que era Little Endian). Pero poco a poco con paciencia conseguí ir viendo como funciona cada cosa, así que dije
¿Por qué no crear una aplicación que lea ésta información? De esa forma podré obtener las cosas que yo quiera sin depender de nadie.
Esa es la maldita pregunta que nunca debí de formular... Comencé, comencé y no pude parar. Justo al poco de comenzar creé este blog y publiqué la entrada anterior.

Lo que en un principio era mostrar información de la cabecera se convertió en un gestor del sistema de archivos de la DS donde se puede actualmente exportar / importar imágenes, audio, texto, tipografías, modelos 3D, archivos comprimidos y en general todo tipo de archivo por el que me entre curiosidad.

La última versión pública de Tinke data de Noviembre de 2011, pero queda poco para que la siguiente salga a la luz, mientras tanto y si tenéis curiosidad descargad la última versión alfa que dispongo: Tinke rev147.zip

¿Futuro del blog?


Iré publicando artículos donde explico las últimas cosas que voy descubriendo y lo más importante, el cómo lo hago. En un principio quería convertirlo en algo así como un manual del romhacking, pero después de leer varios sé que eso es muy difícil y creo que la única forma de aprender esto es intentándolo por uno mismo ya que cada juego es un mundo. No existen métodos generales que es lo que al final la gente suele ir buscando así que, desde mi punto de vista, lo mejor es explicar como consigo cada cosa y animaros a intentarlo por vosotros mismos y ver que no es muy complicado, sólo necesitas tiempo.