N3TKaT escribió:No. A ver, voy a intentar de explicarlo de forma sencilla.
Los saves van cifrados con una clave (sd-key) solamente. Después se firman con la clave privada de tu consola. Para poder comprobar la firma se incluye en el save la clave pública de tu consola, pero para evitar que esta se modifique a su vez va firmada por la clave privada de nintendo.
Como ves es imposible inventarse las claves, ya que necesitas que la pública este firmada por nintendo (y no tenemos la privada de nintendo para poder firmar). Así que la única forma de tener las claves validas es sacarlas de una wii, que es lo que han hecho esta gente, realmente utilizan una clave autentica sacada de una wii.
Probablemente DATEL hizo esto mismo, pero tampoco han soltado las claves, nada de este hack tiene que ver con ellos.
Un saludo.
blackgem escribió:
Antes edite y dije que en el loader.bin desencriptado estaba mas claro..., pero esto texto no es mas que la parte de texto plano que se mostrara en pantalla(pasa asi en casi todos los casos). El resto hasta que no se libere... donde pone %algo son variables que pueden ser mas texto o numeros normalmente que varian dependiendo de datos externo del archivo normalmente (ej: una direccion de memoria)
Hasta donde tengo entendido (yo al menos)...
El save de TP es muy semejante al de GC (muy investigado), en TP en vez de llamar a referencias fijas llamaba a punteros (direcciones de memoria, modificables), en esa direccion de memoria en vez de decir que cargue el nombre de Epona (se le puede cambiar el nombre al comenzar una partida) han provocado un error que han redirigido al archivo loader.bin
Este loader.bin ya se encarga de mostrar el texto en pantalla y llamar a otro codigo almacenado por ej en la SD.
Asi que apenas el juego intenta cargar el nombre de Epona (el caballo que se tiene desde el principio inculto ) que lo hace apenas intentas cambiar de zona o hablar con el primer tio que encuentras... CRASH, ya teneis exploit.
Mas alla solo tengo suposiciones que desde el loader.bin (encriptado) dentro del save llamar a otro archivo .elf almacenado en una SD
Mas claro no se como sacarle, pero seguro que otros en poco tiempo lo haran
_harry_ escribió:Mucho nivel en los últimos 3 posts.
Para equilibrar mando mi pregunta de noob.
Siendo utilizada la clave de la wii (creo que de bushing), Nintendo puede simplemente banear esa clave en el proximo firm revocandola ¿no?
_harry_ escribió:Mucho nivel en los últimos 3 posts.
Para equilibrar mando mi pregunta de noob.
Siendo utilizada la clave de la wii (creo que de bushing), Nintendo puede simplemente banear esa clave en el proximo firm revocandola ¿no?
_harry_ escribió:Mucho nivel en los últimos 3 posts.
Para equilibrar mando mi pregunta de noob.
Siendo utilizada la clave de la wii (creo que de bushing), Nintendo puede simplemente banear esa clave en el proximo firm revocandola ¿no?
N3TKaT escribió:Si no recuerdo mal la clave es de tmbinc, /.../se vuelve a firmar pero con la firma de TU consola. Si baneasen esa clave (cosa casi imposible) bastaría con pasar el save por otra consola y ya lo tendrías con otra clave.
omnitron escribió:
Bueno en realidad el hack no funciona del todo así..... En realidad el .dat es por así decirlo el savegame, lo que han hecho como bien dices es modificar el nombre de EPONA creando un stack overflow en la stack call con lo que han conseguido que la siguiente intrucción que se ejecute sea la que a ellos les dé la gana, esta siguiente instrucción parece que se encuentra ya en este mismo .dat, y las siguientes tambien, así como todas las intrucciones del hack, estas instrucciones en ocasiones requiere datos grandes, estos datos grandes como las largas cadenas o el maravilloso pingüinito es lo que está contenido en el .bin, de ahi que en las cadenas aparezcan los %s que indican a las funciones de impresion con formato como printf que imprima la variable pasada.
Lo que estoy intentando sacar ahora es el metodo exacto con el que hacen el stack overflow.... para eso hay que enteder el formato de los savegame, por si alguien está interesado que se mire las herramientas de segher yo por ahora no tengo ni idea por que no tenia gc ni nada....
IorIYagami escribió:
Supongo que han desencriptado un savegame normal, con un nombre conocido para Epona y han buscado la dirección donde está almacenado ese nombre (en Unicode o UTF8, supongo). Una vez obtenida la dirección solo han tenido que modificarla para meter un nombre que tuviera el código PPC a ejecutar, y la nueva dirección de retorno (que apunta al espacio de la pila donde saben que va a estar el buffer estático que provoca el overflow) y supongo que terminar ese troncho en un caracter fin de retorno para que el código de parseo del savegame del twilight princess se lo tragara. Luego solo han tenido que encriptarla con la SD Key, firmarla con la ECC Key privada, añadir la ECC Key pública firmada por la super-secreta Key privada de nintendo
Si consigues averiguar la dirección donde está el nombre de Epona en el savegame pégalo por aquí que me interesa echarle un vistazo al código PPC, pero no tengo paciencia pa buscarla yo mismo xD
000002a3:33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
000002b3:33 33 80 45 25 a0
blackgem escribió:Despues de divagar un poco liarme un rato mas...
¿Que sucede en realidad?
a) El loader.bin se llama en vez de llamar a la variable que contiene el nombre de Epona.
b) Nombre_de_Epona_demasiado_largo=Crash_error_del_sistema y en ese estado de error pueden llamar a loader.bin
blackgem escribió:Despues de divagar un poco liarme un rato mas...
¿Que sucede en realidad?
a) El loader.bin se llama en vez de llamar a la variable que contiene el nombre de Epona.
b) Nombre_de_Epona_demasiado_largo=Crash_error_del_sistema y en ese estado de error pueden llamar a loader.bin
Hay queda la duda, uno u otro podrian significar distintas maneras de incursion en la Wii.
P.D.: Por aqui pasan muchos curiosos, no todos somos informaticos o investigadores , poned al final si puede ser un resumen simplon o aclaraciones entre parentesis.
blackgem escribió:Despues de divagar un poco liarme un rato mas...
¿Que sucede en realidad?
a) El loader.bin se llama en vez de llamar a la variable que contiene el nombre de Epona.
b) Nombre_de_Epona_demasiado_largo=Crash_error_del_sistema y en ese estado de error pueden llamar a loader.bin
Hay queda la duda, uno u otro podrian significar distintas maneras de incursion en la Wii.
P.D.: Por aqui pasan muchos curiosos, no todos somos informaticos o investigadores , poned al final si puede ser un resumen simplon o aclaraciones entre parentesis.
chipi_ron escribió:
No te preocupes, yo soy ingeniero tecnico informático y tb me cuesta entender bien lo que dicen.
(Como yo lo veo) En resumen es que cuando un trozo del programa falla en algún punto, el programa debe saber como seguir. A esos problemas se le llaman exception, la cosa es que si nosotros conseguimos las dos cosas, ya sea que falle, y en la exepción decir nosotros lo que quiera que haga... podemos meter mano por ahí. La idea es sencilla, en la excepción no podemos hacer que cargue un programa casero ni nada así, pero si podemos decirle una cosa pequeñita, esa cosa es una direccion de donde seguir a ejecutando, creo que eso es lo que hablaban del .bin, y desde hay poner de nuevo un enlace a que cargue en la sd. Un resumen que no tengo ni idea si es correcto
si alquien me corrige le doy las gracias
N3TKaT escribió:No. A ver, voy a intentar de explicarlo de forma sencilla.
Los saves van cifrados con una clave (sd-key) solamente. Después se firman con la clave privada de tu consola. Para poder comprobar la firma se incluye en el save la clave pública de tu consola, pero para evitar que esta se modifique a su vez va firmada por la clave privada de nintendo.
Como ves es imposible inventarse las claves, ya que necesitas que la pública este firmada por nintendo (y no tenemos la privada de nintendo para poder firmar). Así que la única forma de tener las claves validas es sacarlas de una wii, que es lo que han hecho esta gente, realmente utilizan una clave autentica sacada de una wii.
Probablemente DATEL hizo esto mismo, pero tampoco han soltado las claves, nada de este hack tiene que ver con ellos.
Un saludo.
blackgem escribió:Entonces a simple vista comprendo que hay error del sistema y cuando el TP se "cuelga" la wii se traga el codigo que le echen, en este caso segun se dice la direccion de memoria del mismo archivo .dat (el save en si) que contiene el codigo que debe utilizarse (que por limites preestablecidos debe cargar info del .bin)
Mas o menos ya me voy quitando nubes de confusion
blackgem escribió:Me aclarare un poco mas
explicacion buffer overflow
(leida por encima) Como el nombre de Epona es tan largo coge al final la parte donde se almacena "volver al codigo que llamo al nombre de Epona del juego" y en su luga acaba almacenado "ve a la parte del save donde esta el hack".
P.D.: Me gusta este tema
omnitron escribió:
Te podría corregir, pero me temo que sería repetir lo que he escrito unas cuantas veces ya, lo mejor es que os leais bien como funciona un buffer overflow sobre una call stack y luego os leais lo que he puesto seguro que os queda un poco más claro.
Tu error principal está en que en realidad no se produce ninguna excepción, de hecho lo que hacen es aprovechar que no hay exccepción ,al haber una vulnerabilidad sin handler definido aprovechan para sobreescribir una dirección de retorno, si se lanzara excepción entonces no existiria vulnerabilidad
omnitron escribió:
La verdad es que no he entendido muy bien lo que quieres decir, pero creo que es algo más complicado que eso de hacer...
Lo que han hecho es poner el nombre de Epona a muchos treses (esto se puede ver en el savegame muy claramente) y al final de esos treses han puesto una dirección de memoria, lo que han conseguido con esto es en la funcion que obtiene el nombre de Epona (en la stack call que es donde se guardan los datos de cada procedimiento) sobreescribir todo el codigo hasta que han llegado al area donde se dice la direccion de retorno de esta funcion (seguramente todos los treses esos sean una implementacion en ASM de un idle o algo asi) la consecuencia de todo esto es que tras ejecutar la funcion que lee el nombre de Epona, se ejecuta los treses esos (idle) y cuando se acaban se lee la direccion de retorno (que es la que ellos hayan puesto tras los treses) y se va a esa dirección.
Eso en negrita debe ser la dirección de retorno que debe ser un trozo del dat (donde empieza las instrucciones de este)
Esto es un poco suposición la verdad pero creo que la estructura del exploit debe ser algo parecido a eso.
N3TKaT escribió:
[n3tkat:~/wii/keys]$ md5sum *
8d1a2ebcd82a3469b77facf15d9c8e50 common-key
4582417d623c81fca07a46a570c8969e md5-blanker
d9f2b2e045d22d3805a67fe0c340ccd2 sd-iv
ef33e224e45c8d8c35ce32d8a810b603 sd-key
La sd-key está en el IOS del Starlet.
Con esas pistas debería ser cuestión de minutos que la sacases xDD.
Y creeis que seria posible cojer el save que tengamos de nuestra partida, y "insertar" el hack en uno de los archivos del save?, es decir, yo si entro con el archivo 1 o 2 puedo jugar normal, y si le tiro al 3 carge el hack, esto estaria guay, porque sino tenemos todo lo que queramos, pero perdemos el jugar al zelda xDDD (o ir moviendo saves cada vez..)
ddf escribió:Sobre esto, si, es posible, ellos dejan en blanco el resto del hack, pero no se hasta que punto te afecta al resto del save el hack. Creo incluso que podrias grabar los saves por debajo del hack, intentalo y nos cuentas...
IorIYagami escribió:
Esos treses nunca se llegan a ejecutar si no se pone el puntero de instrucción sobre ellos, así que lo más probable es que no sean nada.
Todos los Stack Smashing se basan en modificar la dirección de retorno en la pila para que vaya a una dirección en la que tú has escrito tu código. Lo que yo estaba asumiendo es que habían puesto ese código en el propio nombre de Epona, y que habían cambiado la dirección de retorno a la dirección en la que empezaba el buffer estático (el nombre de Epona), donde habían metido instrucciones PPC (por supuesto, en código máquina PPC directamente). Asumía esto porque me parecía el sitio más seguro donde meter código sin cargarte el savegame y que el juego petara antes al leerlo. Pero claro, en realidad no tengo ni idea de qué hace el juego cuando carga el savegame, puede que lo vuelque entero en memoria y lo lea a posteriori, o puede que lo parsee en estructuras de juego.
Por lo que me has dicho, podemos asumir entonces que han encontrado una zona del savegame que se carga en memoria directamente, que pueden modificar sin que pete nada y cuya dirección en memoria en runtime saben de antemano. Eso tiene mejor pinta que lo que yo decía, porque el código para cargar el ejecutable de loader.bin se me antoja mucho código para un buffer estático pensado para un nombre. Ahora lo interesante sería averiguar en qué zona del savegame han metido ese código (antes de que lo digáis: esa dirección indicada en el nombre de epona no se puede buscar en el savegame, ya que es una dirección de memoria cuando el juego se está ejecutando. No se si la Wii usa big-endian o little-endian, así que igual hay que invertirla).
Si sabéis algo de eso y lo localizáis, ponedlo, por favor, tengo mucha curiosidad por verlo.
PiratePila escribió:Pregunta sobre el "tachtig.exe"; ¿ cómo puedo abrir y ver el contenido del rzdp.bin ?
omnitron escribió:
Me temo que eso treses (siempre que sean el nombre del caballito) si que se ejecutan, ten en cuenta que tu sobreescribes todas las instrucciones que van despues del nombre del caballo pero lo que es el CPI no lo tocas así que el CPI apuntará a instrucción de lectura del caballo + 1 es decir los treses, a no ser que tubieran la suerte de que fuera la última instrucción de la función en ese caso no se ejecutaría ningun "3" y solo se sobreescribirían los metadatos del procedimiento hasta la dirección de retorno
En cuanto a lo que es la direccíon seguramente haga referencia al CPI +/- un determinado offset pero bueno todo esto ya es especulación
IorIYagami escribió:
CPI? no será PC (Program Counter) o IP(Instruction pointer)? weno, da igual, se a lo que te refieres.
Al desbordar un buffer estático lo único que haces es escribir en espacio de la pila de llamadas. Ahí no hay código, solo datos. Y el instruction pointer está apuntando a otra zona completamente distinta de memoria.
La pila de llamadas contiene información acerca de las subrutinas que se están ejecutando, entre ellas la dirección de retorno de la subrutina. El principal objetivo al sobrecargar el buffer con un ataque como este es sobreescribir la dirección de retorno con una tuya propia. Entonces, cuando la subrutina termina (que no tiene porqué ser en cuanto se desborda el buffer) se "retorna", que no es ni más ni menos que quitar ese frame de la pila y saltar a la dirección de retorno especificada, que es la que tú quieras (y que será donde sepas que se encuentra tu código personalizado).
Ergo, los treses no se ejecutan
Edit: Bueno, se podrían ejecutar si la dirección de retorno fakeada apuntara al espacio en memoria donde se encuentran, pero no por la razón que tu exponías
Africa escribió:[Modo chistoso on]
Lo más curioso del asunto es que hayan encontrado un bug en el Zelda, con lo fácil que es encontrarlos en el Red Steel
[modo chistoso off]
ArangeL escribió:
El problema del Red Steel es que no son bugs, son "features"
TRIPON escribió:Pues yo creo que los vectores en un espacio vectorial se expresan generalmente con respecto a una base (un conjunto concreto de vectores que "expanden" el espacio, a partir de los cuales se puede construir cualquier vector en ese espacio mediante una combinación lineal).
Si esta base se indexa con un conjunto discreto (finito, contable),
la representación vectorial es una "columna" de números.
Cuando un vector de estado mecanocuántico se representa frente a una base continua, se llama función de ondas.