tag:blogger.com,1999:blog-49603538986949133392024-03-14T04:01:01.998+01:00Ingeniería pleotónicaHack your time!Anonymoushttp://www.blogger.com/profile/12358076608981614253noreply@blogger.comBlogger8125tag:blogger.com,1999:blog-4960353898694913339.post-56633485255293090812014-12-07T11:38:00.000+01:002014-12-07T11:38:59.210+01:00Estado inicial de NitroDebuggerTiempo de retomar <b>NitroDebugger</b>.<br />
<br />
A finales de marzo fue cuando me pregunté <i>¿cómo se comunica IDA Pro con DeSmuME?</i>. Tras estar buscando información sobre qué era <b>GDB Remote</b>, acabé leyendo la especificación. <a href="http://www.embecosm.com/appnotes/ean4/embecosm-howto-rsp-server-ean4-issue-2.html">GDB Remote Serial Protocol</a> 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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-ICnK-EHD3jI/VIQslwjA3uI/AAAAAAAAFIw/l23hveheIuo/s1600/nitrodebugger0.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://2.bp.blogspot.com/-ICnK-EHD3jI/VIQslwjA3uI/AAAAAAAAFIw/l23hveheIuo/s1600/nitrodebugger0.png" height="340" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Comandos implementados hasta hoy.</td></tr>
</tbody></table>
<br />
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.<br />
<br />
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.Anonymoushttp://www.blogger.com/profile/12358076608981614253noreply@blogger.com0tag:blogger.com,1999:blog-4960353898694913339.post-59058997081092539502014-11-13T16:54:00.001+01:002014-11-13T16:54:27.370+01:00Terminando una carrera a lo 'romhacking'<div style="text-align: justify;">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 <i>malware</i>, rendimiento en videojugos, ataques a redes, ... Son interesantes, aunque era todo un sueño poder hacerlo sobre algo más relacionado con el <b>romhacking</b>.<br>
<br>
Hace un año, en la asignatura <i>Seguridad en Redes de Comunicaciones</i> hice un trabajo opcional analizando diferentes algoritmos de seguridad en videojuegos. Fue mi primer trabajo sobre <i>romhacking</i> para la universidad, y como un sueño cumplido. Las transparencias están disponibles <a href="http://www.slideshare.net/pleonex/seguridad-en-juegos-de-la-nintendo-ds-35706768" target="_blank">por aquí</a>. Ese mismo profesor me propuso realizar el trabajo final sobre la misma temática pero profundizando más. Y así nace <b>AiroRom</b>.<br>
<br>
</div><a href="http://pleonet.blogspot.com/2014/11/terminando-una-carrera-lo-romhacking.html#more">Leer más »</a>Anonymoushttp://www.blogger.com/profile/12358076608981614253noreply@blogger.com0tag:blogger.com,1999:blog-4960353898694913339.post-44428215034687234472014-11-08T21:31:00.000+01:002014-11-09T01:51:48.360+01:00¡Nace NitroDebugger!<div style="text-align: justify;">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 <a href="https://www.hex-rays.com/products/ida/" target="_blank"><i>IDA Pro</i></a> y <a href="http://radare.org/" target="_blank"><i>radare</i></a>, estos no están preparados para las necesidades de <i>romhacking</i>, de editar juegos. De aquí nace <b>NitroDebugger</b>, 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.<br>
<br>
</div><a href="http://pleonet.blogspot.com/2014/11/nace-nitrodebugger.html#more">Leer más »</a>Anonymoushttp://www.blogger.com/profile/12358076608981614253noreply@blogger.com0tag:blogger.com,1999:blog-4960353898694913339.post-24146147405178739442014-04-30T11:00:00.000+02:002014-05-01T16:59:40.583+02:00Rescatemos el Wi-Fi de la Nintendo DSTiempo 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 <i>catástrofe</i> de la que espero que más tarde no nos sintamos impotentes.<br>
<br>
El 20 de mayo <a href="http://www.nintendo.com/whatsnew/detail/vyWpoM6CBIe6FjW8NIY7bvzOrgBURhzw" target="_blank">Nintendo cerrará sus servidores</a> de conexión Wi-Fi para Nintendo DS y Wii. Esto significará que todos los servicios que los juegos actuales tienen se perderán... <b>para siempre</b>. 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).<br>
<br>
Pero hay una <b>solución</b>. La idea original es de <i>Toad King</i>, un usario de GbaTemp que creo <a href="http://gbatemp.net/threads/save-nintendo-wifi-a-project-to-save-online-servers-for-ds-and-wii-games.362717/" target="_blank">este hilo</a>, además de la web: <a href="http://save-nintendo-wifi.com/" target="_blank">Save Nintendo Wi-Fi</a>. El objetivo es hacer un <i>servidor falso</i> que emule ser un servidor de Nintendo y que por tanto, de cara a la NDS, todo seguirá normal.<br>
<br>
<a href="http://pleonet.blogspot.com/2014/04/rescatemos-el-wi-fi-de-la-nintendo-ds.html#more">Leer más »</a>Anonymoushttp://www.blogger.com/profile/12358076608981614253noreply@blogger.com1tag:blogger.com,1999:blog-4960353898694913339.post-10834034939288373842013-09-12T20:05:00.000+02:002013-09-12T20:05:22.176+02:00Cómo depurar juegos de NDS con IDA Pro<div style="text-align: justify;">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 <i>análisis</i> 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 <b>IDA Pro</b> junto con el emulador <b>DeSmuME</b>.<br>
<br>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-HJ1bwhzsH_Q/UjH0bL4W1uI/AAAAAAAABkM/niWEu4G7oDo/s1600/img0.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="356" src="http://3.bp.blogspot.com/-HJ1bwhzsH_Q/UjH0bL4W1uI/AAAAAAAABkM/niWEu4G7oDo/s640/img0.png" width="640"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Captura 1: Entorno de depuración completo</i></td></tr>
</tbody></table></div><a href="http://pleonet.blogspot.com/2013/09/como-depurar-juegos-de-nds-con-ida-pro.html#more">Leer más »</a>Anonymoushttp://www.blogger.com/profile/12358076608981614253noreply@blogger.com0tag:blogger.com,1999:blog-4960353898694913339.post-43252668806450369742013-08-19T03:19:00.000+02:002013-08-19T19:39:52.541+02:00Logo de Nintendo en GBA y NDSNo hace mucho, <a href="http://twitter.com/nitehack" target="_blank">@Nitehack</a> 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.<br>
<br>
<h4>
<span style="font-family: inherit;">¿Objetivo?</span></h4>
<span style="font-family: inherit;"><br>
Todos los juegos para GameBoy Advance (GBA) y Nintendo DS tienen unos datos al principio del archivo (<i>header</i>) 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 <i>0x04</i> mientras que en uno de la DS en <i>0xC0</i>, en ambos dispositivos este logo debe ocupar<i> 0x9C</i> bytes. <br>
<br>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-on-B6JYwur4/UhEiJemo3MI/AAAAAAAABKI/OLYDuoHyycc/s1600/gba_logo.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://1.bp.blogspot.com/-on-B6JYwur4/UhEiJemo3MI/AAAAAAAABKI/OLYDuoHyycc/s1600/gba_logo.png"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Logo de Nintendo en GBA.<br>
En el archivo solo aparece el de <i>Nintendo</i>, no el de <i>GAME BOY</i>.</td></tr>
</tbody></table>
<br>
Lo primero que intento es comprobar si puedo ver ya directamente el logo. Para ello creo un archivo con los bytes <span style="font-family: "Courier New",Courier,monospace;">00 00 FF 7F</span> que al abrir como paleta serán los colores negro y blanco respectivamente codificados en BGR555. A continuación usando <a href="https://code.google.com/p/tinke/" target="_blank">Tinke</a> 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:<br>
<br>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-iOg_FL2uXh8/UHFvEHbIXsI/AAAAAAAAAao/ZQjW3wjA3YU/s1600/try0.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://2.bp.blogspot.com/-iOg_FL2uXh8/UHFvEHbIXsI/AAAAAAAAAao/ZQjW3wjA3YU/s1600/try0.png"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Datos en bruto, nada visible</td></tr>
</tbody></table>
La imagen está configurada como <i>1bpp</i> y <i>tiled</i> <i>(horizontal)</i>. 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 ;).<br>
<br>
</span><br>
<a href="http://pleonet.blogspot.com/2013/08/logo-de-nintendo-en-gba-y-nds.html#more">Leer más »</a>Anonymoushttp://www.blogger.com/profile/12358076608981614253noreply@blogger.com2tag:blogger.com,1999:blog-4960353898694913339.post-69964240949396410292012-09-30T20:13:00.000+02:002012-09-30T22:11:50.440+02:00Again, 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.<br />
<br />
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 <a href="http://code.google.com/p/tinke/source/list?num=25&start=2" target="_blank">primer commit</a> de Tinke fue el 23 de diciembre del 2010. Espera, ¿<a href="http://code.google.com/p/tinke/" target="_blank">Tinke</a>? 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...<br />
<br />
Todo empezó cuando un día raro me pregunté<br />
<blockquote class="tr_bq">
¿Cómo será un archivo .NDS por dentro? ¿Cuál será su estructura?</blockquote>
Rápidamente fui a Google y comencé a buscar, llegué (como no) a <a href="http://nocash.emubase.de/gbatek.htm" target="_blank">GBATEK</a> 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 <a href="http://nocash.emubase.de/gbatek.htm#dscartridgeheader" target="_blank">DS Cartridge Header</a>. 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<br />
<blockquote class="tr_bq">
¿Por qué no crear una aplicación que lea ésta información? De esa forma podré obtener las cosas que yo quiera <b>sin depender de nadie</b>.</blockquote>
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.<br />
<br />
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 <a href="https://dl.dropbox.com/u/3981393/Translation/has_logo.PNG" target="_blank">imágenes</a>, <a href="https://lh4.googleusercontent.com/-VSJCC9q9TPQ/TmlKbnvgTaI/AAAAAAAAAOg/s7DFYgpeo3c/s400/sdat.PNG" target="_blank">audio</a>, <a href="https://dl.dropbox.com/u/3981393/Translation/layton/layton4-2.PNG" target="_blank">texto</a>, <a href="https://lh6.googleusercontent.com/-pSP4NY3Y9Rw/TqPSrsRc6eI/AAAAAAAAAUg/-QjuDfRdQc4/s400/nftr-2.PNG" target="_blank">tipografías</a>, <a href="https://dl.dropbox.com/u/3981393/3D/mappok.PNG" target="_blank">modelos</a> <a href="https://dl.dropbox.com/u/3981393/3D/tren.PNG" target="_blank">3D</a>, archivos comprimidos y en general todo tipo de archivo por el que me entre curiosidad.<br />
<br />
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: <a href="http://www.mediafire.com/download.php?yub0haxuhmbb9ub" rel="nofollow" target="_blank">Tinke rev147.zip</a><br />
<br />
<h3>
¿Futuro del blog?</h3>
<br />
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 <i>muy</i> complicado, sólo necesitas <b>tiempo</b>.Anonymoushttp://www.blogger.com/profile/12358076608981614253noreply@blogger.com0tag:blogger.com,1999:blog-4960353898694913339.post-28625474732083190992010-12-22T23:42:00.000+01:002012-09-30T17:17:37.795+02:00Hello World!Hello Word!, no hay mejor inicio xD.<br />
<br />
Buenas, me presento como <i>pleoNeX</i> y tras haber reflexionado sobre esto he decido que sí vale la pena continuar o eso espero notar en los comentarios. Todo este conocimiento no se puede perder, de otra forma mi trabajo sería en vano y con que a una persona le guste me sobra ;)<br />
<br />
El <b>objetivo de este blog</b> o espacio de información <b>es el estudio de la ingeniería inversa</b>. Se puede definir como el campo que abarca el <b>estudio de los componentes que forman un producto</b>, un ejemplo es coger un videojuego, investigarlo y obtener imágenes, audio, vídeos, textos e incluso un poco de código de fuente. En el contexto de este blog serán archivos relacionados con videojuegos de consolas de Nintendo (<b>NDS</b>, GBA) y archivos estándar en Windows (BitMaP, WAVE...). <br />
<br />
Profundizando en este aspecto, lo que recogeré será la estructuras de los archivos, sus peculiaridades, qué podemos sacar de ellos y cómo obtenerla. Para ello <b>me basaré en editores hexadecimal</b> (para Windows podéis usar <a href="http://mh-nexus.de/en/hxd">HxD</a> 100% gratuito) <b>y en la programación que será en C#</b> (muy parecida a C++).<br />
<br />
A modo de introducción y para que veáis qué podremos llegar a logar, os dejo un programa que realicé hace un año y que abre archivos que contiene el juego para Nintendo DS "El profesor Layton y la villa misteriosa"; junto al programa vienen varios de esos archivos para que comprobéis cual es el resultado final. La imagen que acompaña el final de la primera entrada está sacada directamente del juego, con otro programa que actualmente estoy desarrollando y que pronto os presentaré.<br />
<br />
¿Por qué hago y hacer todo esto? Sinceramente no lo sé, muchas personas lo hacen para traducir videojuegos y se puede aplicar para ello, otras para modificarlos y sacar sus propias versiones; pero yo lo hago porque me gusta, no necesito más motivos :)<br />
<br />
Sprite 0.1 + archivos de prueba => <a href="http://pleonet.dmon.com/programas/sprites/Sprite.zip">Descargar</a><br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/_H6ACRUcYPos/TRJ9RWP4vRI/AAAAAAAAAFQ/aTnWC0Kpvhk/s1600/19983948.png" imageanchor="1" style="clear: right; display: inline !important; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="http://2.bp.blogspot.com/_H6ACRUcYPos/TRJ9RWP4vRI/AAAAAAAAAFQ/aTnWC0Kpvhk/s1600/19983948.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Imagen sacada directamente del Profesor Layton</td></tr>
</tbody></table>
<a href="http://programas/sprites/Sprite.zip"></a><br />
<br />
<i>NOTA: </i><strike>Mi propósito era informar de esto en una especie de web que tengo alojada usando uCoz, pero dado que es más difícil para los buscadores, mi comienzo será aquí aunque siempre podremos usar el foro que se encuentra allí: <a href="http://pleonet.dmon.com/">http://pleonet.dmon.com</a></strike><br />
<strike><br /></strike>
<i>NOTA2: </i>Ahora que pienso de nuevo ponerlo en marcha he decidido que mejor olvidar esa página y concentrarse en este blog ;)Anonymoushttp://www.blogger.com/profile/12358076608981614253noreply@blogger.com0