Yet Another BlueDump MOD (YABDM)

(no confundir con el MOD de scooby74029 hecho en el 2011)

Como su nombre indica, se trata de una modificación no oficial del BlueDump, un dumpeador de títulos y canales creado en el 2009 por nicksasa y WiiPower. Al igual que la aplicación original, es capaz de respaldar canales en formato WAD y saves desencriptados en sus correspondientes carpetas. Las principales características que lo diferencian de su predecesor son un consumo de memoria más bajo (por lo que es capaz de dumpear canales cuyo peso sobrepase los 45MB), compatibilidad con dispositivos de almacenamiento USB, parcheo del IOS en ejecución en tiempo real (a través de libruntimeiospatch de Excelsiior) y capacidad de convertir archivos content.bin generados por el System Menu a WADs compatibles con cualquier consola (es, hasta donde sé, la única aplicación de Wii capaz de hacer esto), entre muchos otros cambios interesantes.

Ya yo había hecho una modificación del BlueDump en el 2011, pero sólo fue publicada en GBATemp. Lamentablemente, perdí todo su código, así que los cambios realizados a esta versión fueron total y completamente hechos desde cero.

Actualmente, se encuentra en la v0.8. Durante las últimas versiones, JoostinOnline ha colaborado añadiendo nuevas características como soporte para argumentos desde el meta.xml, nuevo código de entrada compatible con mando clásico, y optimizaciones generales que mejoran el desempeño de la aplicación. Pienso que todavía queda mucho que perfeccionar, así que si alguien quiere contribuir en algo, bienvenido sea.

Su utilización no se diferencia mucho en comparación a la Alpha 3, así que en ese aspecto no deberían haber problemas. Los controles siguen siendo descritos en pantalla.

El registro de cambios con respecto a la aplicación original es el siguiente:


  • Acceso total al hardware a través de HW_AHBPROT (¡tiene que usarse el HBC v1.1.0 o superior!). Los parches son aplicados en tiempo real al IOS en ejecución usando libruntimeiospatch, por lo que la aplicación es totalmente compatible con el modo de virtualización disponible en Wii U, ya que dicha librería incluye el set "KillAntiSysTitleInstall" de damysteryman.

  • Pantalla de selección de IOS al inicio de la aplicación (puede elegirse si se desean aplicar los parches o simplemente cargar un IOS ya modificado, como el 236). Si la protección de hardware se encuentra habilitada (por no usar la versión recomendada del HBC, valga la redundancia), esta será la pantalla mostrada por defecto.

  • Compatibilidad con dispositivos de almacenamiento USB y mandos de GCN.

  • Compatibilidad con archivos content.bin almacenados en SD:\private\wii\title. Puede cambiarse entre el modo de dumpeo convencional y el modo de conversión de content.bin con el botón +/R.

  • Añadido código para acceder a los contenidos de la OTP y copiarlos a un bloque de memoria previamente alineado. Esto es necesario para acceder tanto a la clave PRNG como a la ID de la consola, que son empleadas en el proceso de conversión de content.bin.

  • Capacidad de elegir si se desea falsificar la firma digital del Ticket o del TMD del canal a dumpear antes de iniciar el proceso, por lo que ya no es necesario una versión alternativa de la aplicación.

  • Si se desea falsificar el Ticket, la aplicación ahora borra los valores de la ID de la consola y los datos ECDH, ya que ambos pueden impedir una instalación exitosa en otra consola. También se verifica si el valor del Common Key Index es 0x01 (clave coreana) o 0x02 (clave de vWii, aún no descubierta); de ser así, su valor es cambiado a 0x00.

  • La cadena de certificado (cert.sys) se encuentra ahora embebida en el código de la aplicación, para evitar subsecuentes lecturas de dicho archivo desde la NAND.

  • Mejoras al sistema de lectura de nombres internos de canales y savegames. Además, ahora también pueden leerse los nombres internos de los DLCs, y descripciones internas para cualquier tipo de título (como en el AnyTitle Deleter). Se corrigió también un bug que hacía que se mostrara texto incorrecto si el canal accedido tiene contenidos de tamaño menor que el bloque de memoria reservado (por ejemplo, Canal YouTube).

  • El archivo /shared1/content.map es ahora leído en memoria una sola vez, al iniciar la aplicación, en lugar de acceder a él cada vez que vaya a dumpearse un título.

  • El "footer" del WAD es ahora añadido a cada título dumpeado desde la aplicación. Su tamaño también es almacenado en el encabezado.

  • Compatibilidad con contenidos del tipo 0x4001 (hasta donde sé, sólo forman parte de DLCs).

  • Soporte para contenidos mayores a 45MB. La función GetContent() fue completamente reescrita para que ahora dumpee cada contenido en partes de 16KB, las cuales son leídas desde el archivo de origen, encriptadas y guardadas de forma concatenada al archivo de salida en la tarjeta SD o dispositivo USB, almacenando un Vector de Inicialización (IV) distinto para cada parte.

  • La función pad_data_32(), utilizada previamente para añadir datos de relleno alineados a 64 bytes a un bloque previamente asignado en memoria, es ahora simplemente llamada pad_data(). Usa un valor booleano para determinar si el bloque de entrada tiene que ser alineado a 16 bytes (0x10) ó 64 bytes (0x40). Para evitar problemas, se utiliza la función realloc() para cambiar el tamaño de dicho bloque, en caso de ser necesario; en lugar de asignar espacio para un nuevo bloque de memoria.

  • El búfer de memoria para datos desencriptados es ahora alineado a 16 bytes antes de ser encriptado (procedimiento requerido por las especificaciones del estándar AES-128-CBC). Luego, el búfer de memoria para datos encriptados es alineado a 64 bytes (necesario para la alineación de datos presente en la estructura del WAD). De esta manera, el archivo resultante es bastante comparable a uno obtenido con NUS Downloader.

  • La sección "Backup to WAD" de la función dump_menu() fue totalmente renovada para evitar la redundancia de código (ya que habían muchas secciones innecesarias). Ahora, la nomenclatura de los WADs dumpeados está basada en la del CustomizeMii y otros programas similares.

  • Antes de leer el nombre interno de un título en particular, se verifica qué clase de título es y se utiliza la función correspondiente. Esto se hace para evitar que el archivo de registros (BlueDump.log) se congestione de errores "ISFS_Open() -106".

  • Compatibilidad con argumentos presentes en el meta.xml en el momento de la carga. Por los momentos, sólo es compatible con uno, "debug", cuyo valor puede ser "0" ó "1". Esto permite habilitar la creación del logfile sin tener que recompilar toda la aplicación.

  • El botón 2 (X en mando de GCN) es ahora utilizado para cambiar entre IDs hexadecimales e IDs en ASCII.

  • Agregado un switch case para mostrar apropiadamente en pantalla la versión del System Menu (por ejemplo, "v513" ahora se muestra como "v4.3U").

  • Uso de botones derecha e izquierda en el navegador. Ni idea de por qué nicksasa no añadió esto en la versión original.

  • Fuente mostrada en pantalla cambiada por otra que tiene soporte completo para carácteres Unicode. De esta forma, los símbolos especiales usados comúnmente en el español (y que se encuentran en muchas de las descripciones de los saves) pueden mostrarse en pantalla correctamente.

  • Corregidos los carácteres ilegales en nombres de partidas que anteriormente impedían que estas fuesen dumpeadas (por ejemplo, "Metroid: Other M").

  • Compatibilidad con Mando Clásico.

  • Compilada con libogc v1.8.12, devkitPPC r26 y libfat v1.0.12.

  • Debido al punto anterior, la aplicación es ahora compatible con el modelo de WiiMote Plus más reciente (RVL-CNT-01-TR).

  • Otros cambios y correcciones menores de las que ya me olvidé.


Repositorio subversion en Google Code: http://code.google.com/p/bluedump-mod.

Descarga: http://www13.zippyshare.com/v/31660912/file.html. Incluye icon.png (hecho por JoostinOnline) y un meta.xml (depuración desactivada por defecto).

Espero que alguien lo encuentre interesante, que me he animado bastante haciendo esto. [+risas]
Muchas gracias, interesante siempre es cualquier cosa que aporte algo, como es este caso.
Yo particularmente no puedo contribuir en nada más que animarte, es un muy buen proyecto.
Que bueno que sigas trabajando en el BlueDump Pablo :), no creo poder probarlo pero seguiré el hilo para ver como avanza tu proyecto.

¿Puede pegar el enlace a otras webs donde has posteado este Mod? para seguirlas también :)
Gracias por sus comentarios. [360º]

Si no hay problema alguno con enlazar a otras webs, entonces aquí las dejo:


En GBAtemp no lo he publicado "propiamente dicho"... Sólo hice un tema para ver si alguien tenía aún una Wii con el canal Wii + Internet, ya que quería cerciorarme de que el nuevo código de dumpeo por partes funcionara bien. A la final fue un amigo de por aquí quien me dijo que conocía a alguien que tenía un Wii rojo virgen, sin tocar, y que esa persona quería modificarlo. Funcionó de perlas, y de paso me sirvió para confirmar que existe más de una versión de ese canal (el WAD que poseo es la v1, el otro que puede encontrarse en internet es la v0). [+risas]

Recuerdo el post original que hice en GBAtemp de mi primer MOD, había alguien que preguntó si la aplicación reservaba espacio en memoria para copiar cada contenido a MEM2, porque el dumpeo para este canal fallaba. Y apenas dos años después es que vengo a publicar la solución. [mad]

El menú SD original fue removido por completo, ya que la administración de saves puede realizarse perfectamente desde el navegador principal.

Estuve pensando seriamente en añadir los cambios del MOD de scooby74029 (principalmente la compatibilidad con SNEEK), pero a la final lo descarté. Si tienes un dump del sistema de archivos de una NAND, puedes crear el WAD con ShowMiiWads. [reojillo]

Ah, sí, otra cosa que olvidé añadir en el post principal es que la conversión de archivos content.bin sólo funciona en la consola en donde se haya creado el canal con el cual se va a trabajar. Esto se debe a que los contenidos, en lugar de estar cifrados con la clave almacenada en el ticket, se encuentran encriptados con la clave PRNG única de la consola (la aplicación tiene código para acceder a la OTP y copiar dicha clave). En realidad añadí soporte para este tipo de archivos porque un usuario de EMD me lo sugirió por privado; ni se me había pasado por la cabeza hacerlo.
Interesante info como siempre :) y gracias por postear los enlaces a tus otros hilos, no creo que haya problema (a menos que lo diga el moderador claro [+risas]) por lo general siempre se pegan otras fuentes de información relacionadas a las aplicaciones para seguirles con detalle.

Ya seguiré este y los otros hilos para ver como avanza tu MOD.

Saludos.

EDITO:
PabloACZ escribió:Estuve pensando seriamente en añadir los cambios del MOD de scooby74029 (principalmente la compatibilidad con SNEEK), pero a la final lo descarté. Si tienes un dump del sistema de archivos de una NAND, puedes crear el WAD con ShowMiiWads. [reojillo]

En ese aspecto fíjate que nunca se me hizo interesante dicha funcionalidad en el mod de Scooby, exactamente por la misma razón, es mucho mas práctico hacer el dump con SMW.

PabloACZ escribió:Ah, sí, otra cosa que olvidé añadir en el post principal es que la conversión de archivos content.bin sólo funciona en la consola en donde se haya creado el canal con el cual se va a trabajar. Esto se debe a que los contenidos, en lugar de estar cifrados con la clave almacenada en el ticket, se encuentran encriptados con la clave PRNG única de la consola (la aplicación tiene código para acceder a la OTP y copiar dicha clave). En realidad añadí soporte para este tipo de archivos porque un usuario de EMD me lo sugirió por privado; ni se me había pasado por la cabeza hacerlo.

Bien, siempre habrá alguien al que le interese la conversión de esos archivos, ahora tienen como hacerlo.
(mensaje borrado)
Acabo de lanzar la v0.7. El enlace está en el post principal. [sonrisa]

Presenta los siguientes cambios:

  • Nombre de la aplicación cambiado a "Yet Another BlueDump MOD (YABDM)", para tratar de diferenciarlo del MOD creado por scooby.

  • Corrección apropiada para la función DetectInput(): en lugar de usar un bucle while, se llama a VIDEO_WaitVSync() antes de retornar el valor del botón presionado (cuando JoostinOnline me pasó el código de esa función, no había salida de pantalla en dump_menu(), y yo corregí eso de manera temporal usando un bucle while [+risas] ).

  • Se reemplazó la implementación AES / Rijndael de Mike Scott a favor de una más rápida, creada por Vincent Rijmen, Antoon Bosselaers y Paulo Barreto (ligeramente modificada por Jouni Malinen), conocida como "rijndael-alg-fst". Esta implementación utiliza tablas AES previamente creadas en lugar de generarlas cada vez que se realiza una operación de (des)encriptación, y además permite la utilización de un único bloque de memoria (en lugar de tener que reservar espacio para dos).

  • La memoria OTP es ahora inicializada una sola vez en la aplicación, en lugar de acceder a sus datos cada vez que vaya a convertirse un content.bin a WAD.

  • La aplicación ahora genera una lista de nombres para todas las entradas presentes en un directorio cada vez que la ruta actual es cambiada. Esto se hace, principalmente, para reducir los tiempos de carga, pero también para evitar tener que leer nuevamente TODOS los nombres cada vez que un botón del D-Pad sea presionado. Gracias a esto, los nombres internos de los archivos content.bin almacenados en la tarjeta SD son ahora mostrados en pantalla; sólo se tendrá que esperar un poco mientras se leen los nombres luego de presionar +/R.

  • Gracias al punto anterior, pude darme cuenta de una fuga de memoria en getdir_info(), ya que se utilizada el puntero *ent para reservar espacio sin importar si ya apuntaba a una dirección de memoria. Ahora se libera antes de ser reutilizado.

  • Otras optimizaciones menores.


También pueden seguir las actualizaciones del proyecto en GBATemp (ya creé el hilo) o en mi propio Facebook (suelo comentar ahí los cambios antes que en los demás sitios).

Por cierto, me gustaría que alguien con más DLCs que yo probara la aplicación para confirmar que su lectura de nombres y su dumpeo estén funcionando correctamente (sólo tengo dos). Sé muy bien que los desarrolladores de ATD siempre tuvieron problemas leyendo los nombres desde este tipo de títulos (razón principal por la que, por ejemplo, en el ATD MOD v7.1 se reimplementó el uso del database.txt). Sonará estúpido, pero quiero apuntar a un 100% de compatibilidad. [sonrisa]
[Si has llegado hasta aqui atraves de un enlace de twitter o facebook, sube arriba a la descripción del hilo. Gracias]

Hola Pablo, te contesto por aquí tu twitt mejor, que creo que será del interes de todos, y de camino aprovecho que tengo un espacio menos limitado :p

DarkMatterCore escribió:@SoloEmuladores No sé si tu lista de Utilidades está abierta a todo tipo de apps, pero si es así: bluedump-mod.googlecode.com. No es nuevo.


Bueno, intento no subir aplicaciones que puedan dejar inutilizada la Wii a nadie por simple ignorancia de uso. Y digo intento porque alguna cosilla inevitable hay, aunque no veras un any title deleter, un my menu, un pimp my wii o canales fordwarders en general. Sin embargo veo que tu aplicación es totalmente inocua, simplemente extrae canales por lo que he visto echandole una leída rapida a las primeras lineas. La añado al repositorio encantado.

No la había puesto antes por ignorancia, llevaba desconectado de EOL muchísimo tiempo, no se si un par de años o mas y me he perdido algunas cosillas.

Te lo publico el 10 de Diciembre, y la noticia de ese dia la muevo al 16 de enero. Si tienes un interes especial, la lanzo ya y muevo la del dia al final de la cola, sin problema.

Por cierto, ¿Sería posible añadir capacidades de SDHC al codigo fuente de emuladores antigüos sin causarte mucha molestia?, imagino que será solo recompilarlos. Lo ideal sería añadirle también USB y teclado si es de ordenador, pero imagino que eso tendrá bastante mas trabajo.

Por ultimo decirte, que gran trabajo todo lo que estas aportando a la Scene. A ver si pruebo ese MAME recompilado por ti que tal va, aun no he tenido tiempo

Saludos!!!!!! ;)
7 respuestas