-
.
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.
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.