Cifrado del TB (True Blue)(en proceso)

PS3

« Older   Newer »
 
  Share  
.
  1.     Like  
     
    .
    Avatar

    Lo que empiezo, lo termino.

    Group
    FUNDaDoR
    Posts
    12,533
    Location
    En algún lugar del Espacio

    Status
    Offline
    Hace unos meses hubo la posibilidad de desencriptar ciertos archivos del true blue, hoy consta que han desencriptado el lv2_kernel y... ¿Qué se han encontrado? Como se sabe el lv2_kernel siempre funciona como payload, pero ahora tenemos la dirección donde se desencripta la key del true blue y también cuál es la key, de momento faltan confirmaciones pero ya trabajan los desarrolladores en conocerlo a fondo.

    jailbreak-2-jb2-dongle-true-blue



    USUARIO Octo@oct0xor DICE::::


    Hola a todos!
    La última vez que que hubo noticias muy noobs sobre la carga del lv2_kernel del TrueBlue en IDA y cómo se hacía, me hizo buscar y echar un vistazo por mi propia cuenta, y realmente no me tomo mucho tiempo sino unos minutos a base de comandos de rce. Sin embargo antes habia gastado mucho tiempo escribiendo algunos scripts para ello.

    Este es mi idb limpio http://rghost.ru/37617670
    (Yo no comparto mi idb con las observaciones, debido a los comentarios en su mayoría rusos: D)

    Como puedes observar utiliza algunas ofuscaciones, ramas incondicionales, y complejas intrucciones mtctr y bctrl.
    Cuando empiezas a reversar sub_80000000007F1114, lo primero que ves es que hay una condicion de ejecución sub_80000000007F0F10.
    Echemos un vistazo a esta función.. la asignacion de los buffers están bien firmados, (puedes ver subfunciones y algunas claves) sub_80000000007F0B1C es un algoritmo de cifrado malo
    Código:
    void decrypt (uint32_t* v, uint32_t* k) {
    uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i; /* set up */
    uint32_t delta=0x9e3779b9; /* a key schedule constant */
    uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */
    for (i=0; i<32; i++) { /* basic cycle start */
    v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
    v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
    sum -= delta;
    } /* end cycle */
    v[0]=v0; v[1]=v1;
    }
    r4 - es la key. Siguela, y voilá key de descripcion en la direccion 800000000035E104.
    Atento a lo siguiente. (Pienso que no es necesario comentarios):
    Código:
    malloc
    memcpy
    free
    free
    Mirar de cerca lo que sucede entre las dos últimas. ¿Lo ves?
    Código:
    mtctr r30
    bctrl
    Ahí es donde la magia sucede. se salta el código descifrado en el interior.
    Después de este código que se ejecuta libre en un búfer, al mirar hacia atrás en sub_80000000007F1114, el código original memcpy con la dev_flash montada, salta a lv2_kernel.self.

    El TrueBlue es similar a un malware
    Ahora sabemos que el lv2_kernel es el Payload, que es la key y sabemos donde encontrar el Payload

    No tengo TrueBlue, hasta este punto es el maximo que puedo llegar.

    Mi Twitter: https://twitter.com/oct0xor
    Saludos a mi gran amigo dev Flatz: https://twitter.com/flat_z

    fuente:::eol
     
    .
0 replies since 18/4/2012, 15:30   42 views
  Share  
.