Recuperación de datos en Android con procesadores MediaTeK (MTK)

Análisis forense en dispositivos móviles con Android y procesadores MediaTeK

¿Quien soy yo?

Mi nombre es Buenaventura Salcedo, @nomed1 en Telegram. Me defino como un amante de la informática que está a un paso de ser ingeniero informático, llevando sobre mis espaldas 16 años de experiencia en el servicio técnico de teléfonos móviles como autónomo, y ahora comenzando a escribir en un blog, a ver lo que duro…

El caso es que…

A diario, en el trabajo, entran muchos dispositivos para recuperar datos, no todo el mundo quiere trabajar en la nube, algo totalmente respetable. Pero siguen llegando porque quieren su información, con teléfonos en mejor o peores condiciones, entonces hay que utilizar los medios y recursos humanos disponibles, para realizar tal labor. Ahora bien, no vamos a entrar en los términos de si los métodos que vamos a utilizar son o no desde un punto judicial válido, es decir, este artículo nos ocupa a que COMO SEA debemos sacar los datos, aunque en la medida de lo posible intentaremos ser meticulosos y consecuentes con ello. De los procesos válidos o no judicialmente ya hablaremos en otro momento, si os parece.

El terminal, teléfono móvil inteligente o smartphone, como queramos llamarlo, en el que nos vamos a basar en cuestión, está en unas condiciones que vamos a considerar casi extremas, considerando que el extremo es que lo hubiera pisado un camión, este supuesto extremo lo trataremos según la aceptación en otra entrada.

En las condiciones casi extremas vamos a suponer que el teléfono tiene patrón, código de seguridad o pin code, esta situación ya se nos pone complicada para rescatar la información, pues bien añadimos también que la pantalla no se ve a causa de un golpe. Sabremos que tiene pin, porque el teléfono enciende, oímos los tonos, algún led de teclado, señalización se enciende o bien al enchufar al PC con el cable, reconoce el terminal, pero no nos deja acceder al área de datos, el icono que aparece en el equipo relacionado con el terminal aparece vacío al abrirlo.

En resumen

Lo que vamos a hacer es algo sencillo dentro de este mundo, pero creo que interesante, algo que puede sernos útil y que algunos agradecerán:

  • Leer, extraer o dumpear la memoria interna en una imagen binaria.
  • Conseguir o elaborar un mapa de particiones.
  • Extraer las particiones, es decir, los sistemas de ficheros, de esa imagen.
  • Montar como unidades las particiones de datos.
  • Recuperar en la medida de lo posible toda la información que hay en esas particiones.
  • Tomarnos una birra por el trabajo y seguir estudiando.

El hándicap

Tenemos que rescatar no solo los ficheros que nos aparecen cuando enchufamos al PC usando el protocolo MTP, o como USB de Almacenamiento, o como PTP. Entre esos datos pueden estar las carpeta DCIM, con fotos/videos de la cámara, notas de voz, algunas carpetas de música, la carpeta de WhatsApp, Telegram,…. En fin que voy a decir que no tengáis en vuestros teléfonos.

Pero iremos más allá, porque realmente nuestro terminal tiene más información, información útil como contactos, datos de navegación, logs y registros, organizados en bases de datos SQLite3 en la mayoría de los casos, keys masters como las que nos permiten abrir las copias de seguridad de WhatsApp, incluso apps con “malware”, datos en caché, datos usados en estudios forenses o peritajes, datos estructurados en sistemas de ficheros EXT, FAT, o en bruto, datos para nosotros en hexadecimal, que pueden contener algo o nada, y también como no, ficheros borrados, o fragmentos sueltos que están esperando ser reconstruidos antes de perderse en el olvido.

El escenario

En primera instancia tenemos a nuestro actor principal, el terminal, que para este estudio va a ser CUALQUIER smartphone basado en algún procesador MTK de MediaTeK, de los que “montan” cualquier fabricante como Acer, LG, Xiaomi, Zopo, Innjoo, Huawei, Cubot, Alcatel, ZTE,… y un largo etc.

Ojo!!! NO todos los modelos de esos fabricantes llevan un procesador MTK, este hilo solamente trata los que si lo llevan. Otros terminales con otros procesadores ya los trataremos en otras entradas.

Para saber si el terminal esta basado o no en este procesador MTK, basta con utilizar un buscador de Internet, poner marca modelo procesador y ver las fichas de las páginas que aparecen o el fabricante, o bien con el teléfono apagado enchufar el USB en modo download, puede ser necesario tener pulsado el botón de volumen down (ahora aclararemos esto) y el PC nos lo identificará en el panel de administración de dispositivos como un Mtxxxx Preloader en la sección de puertos COM o en la burbuja.

El modo download, download mode, es un estado del terminal que nos permite escribir/leer un firmware. En este caso, procesadores MTK, nos permite también leer todas las secciones (o particiones) de memoria incluidas las de datos, la que más nos interesa será la partición USRDATA, userdata o bien /data.

Para entrar en ese modo download pueden darse varios casos, todos con el terminal apagado:

  • Pulsar la tecla de Volumen Down y enchufar el cable USB al PC.
  • Sin pulsar ninguna tecla enchufar el cable USB al PC.
  • Pulsar las teclas Volumen Down y Volumen Up al mismo tiempo y enchufar el cable USB al PC.
  • En algunos casos, quitando la batería enchufar el cable USB al PC.

El segundo actor es nuestro PC con un cable USB, el de carga nos puede servir. Nos da igual usar Linux o Windows, en este estudio vamos a usar Windows 7 64 bits sin requisitos de hardware mínimos, cualquiera en principio nos vale, incluso 32 bits. Nos valen también sistemas VM, siempre y cuando habilitemos los puertos USB correspondientes.

El entorno

Como he dicho un PC, pero además las siguiente herramientas:

Una puntualización a esto último, podríamos expandir la imagen con herramientas como dd de Linux o variantes, u otras herramientas, pero algo que me gusta de FTK Imager es que encuentra entradas perdidas en el sistema de ficheros sin necesidad todavía de expandir como unidad física aunque lo permite con un solo click, ya lo veremos más adelante, también otras herramientas pueden ser usadas, para recuperar fragmentos de ficheros sueltos,….

Uii!!!! se me olvidaba, por si acaso de nuevo, los drivers están en https://spflashtool.com/ por la parte de abajo.

Consideraciones

En este trabajo no vamos a utilizar roots, recoverys, flashes (roms o firmwares) parciales, ni debug (ADB), ni procesos similares. Con lo cual no vamos a modificar en absoluto el contenido del terminal, este hecho es muy necesario en peritajes, con lo cual podríamos firmar la extracción para que se puedan repetir los experimentos.

En cuanto a las herramientas utilizadas, deberían ser válidas en procesos judiciales o peritajes, ya que algunas son Open Source, otras son las que suministran los fabricantes para escribir/leer firmwares o bien están en el listado recomendado en el Instituto del Nacional de Ciberseguridad de España, concretamente en  https://www.certsi.es/blog/herramientas-forense-moviles

Ahora bien, compañeros del grupo de informática forense, se lo que dirían de esto o del hilo, que con Cellebrite o productos similares o software de pago como Oxygen, incluso reconocidos por la comunidad, hacen todo esto a casi golpe de click, que no lo se…, porque no tengo acceso a ver como trabajan esos productos. Pero, necesitamos hacer el trabajo, así que manos a la obra.

 

Tenemos un pero, siempre hay un pero o más…

El problema de leer/dumpear la memoria es que necesitamos conocer el tamaño de lo que vamos a leer, pero también necesitamos conocer posteriormente, donde comienza y termina cada una de las particiones. Para ello necesitamos un fichero que tenga ese mapa de direcciones, que en el caso que nos atañe se llama scatter.

Formato scatter tipo 1

 

Formato scatter tipo 2

El scatter es un fichero de texto plano (.txt) que contiene el mapa de direcciones del chip de memoria que vamos a atacar, para un mismo procesador puede haber varios dependiendo del modelo de terminal, por ejemplo si uno tiene más memoria que otro.

De momento he podido ver dos formatos de estos ficheros scatter, tal y como podéis ver en la dos imágenes anteriores.

De donde conseguimos estos ficheros scatter? Esos ficheros normalmente están en el fichero comprimido junto con los ficheros que contienen la rom o firmware del terminal en la pagina del fabricante para realizar actualización o reparación en caso de brick, es decir, que este en un bucle en el logo del fabricante y no encienda, aun así podremos recuperar la información 🙂 .

Si por lo que sea en la página del fabricante no estuviese disponible o hubiese dejado de existir podemos buscar el firmware en los buscadores o en páginas como www.needrom.com, hay muchas más páginas que recopilan roms, incluso crearnos nuestras librerías con otros tipos de herramientas o procesos que no vamos a tratar en este hilo, ya los veremos Este enlace por ejemplo contiene algunos ficheros scatter, ojo no son la rom completa, solo el scatter: https://androidurdu.net/mediatek-scatter-files-download/ , más abajo hay un foro en el que se pueden pedir, también se pueden buscar por xda-developers o bien en el gsmcity.de (gsmforum de toda la vida).

El caso práctico vamos a usar un terminal del despiece del laboratorio un Acer e380 liquid e3 con procesador MT6589 y con 4gb de almacenamiento y 1gb de RAM, la versión de Android realmente ahora mismo nos importa poco, es más ni siquiera la tenemos porque conocer dadas las suposiciones del caso. El contenido del scatter es este para este modelo descargado con la rom de la primera web antes mencionada.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
PRELOADER 0x0
{

}
MBR 0xC00000
{

}
EBR1 0xC80000
{

}
__NODL_PMT 0xD00000
{

}
__NODL_PRO_INFO 0x1100000
{

}
__NODL_NVRAM 0x1400000
{

}
__NODL_PROTECT_F 0x1900000
{

}
__NODL_PROTECT_S 0x2300000
{

}
__NODL_SECCFG 0x2D00000
{

}
UBOOT 0x2D20000
{

}
BOOTIMG 0x2D80000
{

}
RECOVERY 0x3380000
{

}
SEC_RO 0x3980000
{

}
__NODL_MISC 0x3F80000
{

}
LOGO 0x4000000
{

}
__NODL_EXPDB 0x4300000
{

}
ANDROID 0x4D00000
{

}
CACHE 0x43500000
{

}
USRDATA 0x4B300000
{

}
__NODL_BMTPOOL 0xFFFF00A8
{

}

Pero como vemos en el scatter no aparce la cantidad de memoria que debemos leer, aparecen las direcciones donde aparecen organizadas distintas secciones de la memoria, nos quedamos con el inicio de la partición USRDATA, la CACHE o bien si estuviera reflejada la de SYSTEM (o ANDROID), o incluso otra al final si la hubiese, sobre todo en el Tipo 2, marcada como FAT, algunas veces . La mágica para la siguiente sección USRDATA, ahí es donde están todos los datos que necesitamos recuperar.

Bien, pero de momento seguimos en el dilema que cantidad de información debemos leer, pues bien vamos a hacer lo siguiente, como nuestro ejemplo tiene 4gb de almacenamiento, que es 0x100000000 en hexadecimal, pero con este valor nos va a dar, por desgracia, un error de rango. Con suerte puede que nos deje leer todo, pero pongámonos en el peor caso y que va a saltar un error de rango. A si que vamos a ver como vamos a sacar el valor de la cantidad de información que vamos a leer.

Pues manos a la obra:

  1. Abrimos el SP Flasher.
  2. Entramos en la pestaña de Download.
  3. Cargamos el fichero scatter para el Acer e380 con MT6589

Comunix

Carga del fichero scatter

A continuación:

  1. Abrimos la pestaña ReadBack.
  2. Pulsamos en Add.
  3. Hacemos doble click en la nueva entrada que nos aparecen.
  4. Seleccionamos el nombre que le vamos a poner al fichero de salida del dump.
  5. A continuación introducimos la dirección de inicio (0x0) y de final de lectura(0x100000000).
  6. Pulsamos el botón ReadBack con la flecha verde.
  7. Pulsar el botón Volumen Down (bajar volumen) del terminal y enchufar el cable microUSB al PC y al terminal, si pide drivers ponedlos.
  8. Acto seguido comenzara la lectura y soltará el error.

 

Comunix

Introducir el nombre del fichero de salida que contendrá el dump

 

Comunix

Introducir el inicio y longitud del rango de lectura, en el caso de estudio 4gb = 0x100000000

 

Como hemos dicho antes se debe provocar si todo va bien un ERROR de fuera de rango como el de la imagen que hay mas abajo. Pero fijaos en el detalle en la parte izquierda inferior en la pestaña EMMC Flash el campo UA Size, BINGOOOOOOOOOOOOOOOOOO!!!!!!!!!!!!!!!!!!!!!!!!

 

Comunix

Pantalla del error esperado con el valor correcto del rango de lectura en EMMC Flash – UA Size

 

Ahí esta nuestro tamaño de lectura, que para el caso de estudio es 0xEC000000 que corresponde a algo menos de 4gb, si el error no saltase la lectura continuaría hasta el final, ya que le valdría el valor del rango y es direccionable.

Pues bien:

  1. Pulsamos OK hacemos doble click en la linea de lectura que añadimos en el paso anterior.
  2. Desconectamos el cable, apagamos el teléfono (re-insertamos la batería si no es interna).
  3. Volvemos a poner el nombre del fichero de salida.
  4. Introducimos el nuevo valor corrector de la longitud de lectura, en el caso de estudio 0xEC000000.
  5. Pulsamos de nuevo en ReadBack.
  6. Pulsar el botón Volumen Down (bajar volumen) del terminal y enchufar el cable microUSB al PC y al terminal.

Se iniciará el proceso con la barra roja de terminal detectado y a continuación cambiará de color avanzando la linea de progreso lentamente hasta el fin del proceso de lectura hasta que nos de el OK, momento en el cual podremos desconectar el terminal.

Comunix

Proceso de lectura

 

Comunix

Finalización del proceso correctamente

Ya tenemos nuestro dump

También llamado full firmware, full read o full dump. Ya que contiene firmware, secciones de encendido, el recovery, para realizar borrados, la cache, el sistema y como no… los datos que queremos extraer con las fotos, videos, bases de datos, configuraciones, logs,……TODO vamos.

Recordáis que os dije que prestásemos atención al valor de USRDATA en el fichero scatter, bien era:

1
2
3
4
5
6
7
8
9
ANDROID 0x4D00000
{
}
CACHE 0x43500000
{
}
USRDATA 0x4B300000
{
}

Tendremos la posición donde comienza la partición de datos de usuario. El mapa de direcciones, el scatter es lo que nos indica.

Pues, desde esa posición, para este caso, 0x4B300000 hasta el final del fichero que hemos leído, es lo normal, que sea el ÁREA DE DATOS DE USUARIO, y los vamos a extraer con el editor hexadecimal, en este caso usaremos HxD. Así que cargamos el fichero leído en el HxD.

Fijémonos en un detalle, si vamos a la posición 0x4B300000, con la opción Buscar- Ir A… que pasa??? resulta que en esa posición no hay nada, pero y como situación normal con un
desplazamiento de 0x400 con respecto a la posición indicada si esta el inicio de nuestra partición de datos data que esta en formato EXT3/4.

Como dice mi compañero Antonio ese 0x400 que pasa que es magia vudú?? pues no lo se así que de momento nos lo comemos con patatas. Pero fijaos que en la segunda imagen podemos ver que realmente la información aparece a partir de la dirección de inicio de partición más ese desplazamiento de 0x400.

Comunix

Inicio de la partición de datos. Pero esta vacía.

 

Comunix

Voila, el inicio de la partición con desplazamiento de 0x400

Pero no todo es de color de rosa, puede ocurrir, raro pero puede suceder, que el scatter no sea correcto y el inicio de la partición no sea ese, aunque la lectura si, o que por ejemplo nos diese un fichero de estos para análisis sin ni siquiera tener el scatter, ni siquiera el modelo del terminal sea correcto del dump, nos lo haya dicho mal o peor aún que no lo sepamos. Esto puede ocurrir incluso en las herramientas de pago. Entonces también podemos tratar esta anomalía de la siguiente forma.

Para tratar esta anomalía vamos a la opción Buscar – Buscar y escribimos en el cuadro de diálogo Partition Information:

comunix

 

Fijaos que justo debajo, pone .preloader que comienza en la dirección 0x0, a esa dirección absoluta le sumamos el desplazamiento que pone c0000 tenemos el inicio de mbr, si ahora sumamos el desplazamiento siguiente 80000 tendremos el inicio de ebr1, y ahora sumamos el siguiente desplazamiento que es otra vez 80000, tendremos el inicio de pmt, y así sucesivamente hasta que llegamos a usrdata y en ese momento tendremos el inicio de esa partición. Recordemos que estamos sumando en hexadecimal, la calculadora de Windows se puede configurar en modo programador y así hacer estas sumas.

Como veis no estaba todo perdido. En este caso como el scatter es correcto esta suma debe darnos los mismo valores, podéis comprobarlo.

Continuemos extrayendo nuestra partición usrdata. Lo que vamos a hacer puede parecer raro, pero es para no perder tiempo, en ir sacando partición a partición hasta llegar a la de USRDATA. Lo que haremos es borrar temporalmente desde el inicio del fichero hasta el inicio de la partición y lo que nos queda, realmente la partición USRDATA guardarla en otro fichero con otro nombre y salir del programa, así no perderemos todo el dump y no nos entretendremos haciéndolo así.

Para ello vamos a, seleccionar desde la dirección 0 a la dirección de inicio de la partición, desde la opción Edición – Seleccionar bloque, ponemos el inicio 0 y en LONGITUD la dirección de comienzo de la partición USRDATA, que hemos deducido del scatter o bien usando el método explicado.

Comunix

Podemos ver que queda seleccionado tal bloque entonces pulsamos SUPR, o bien Edición Borrar y confirmamos, acto seguido guardamos con otro nombre el fichero, así no dañamos el dump original y tendremos 2 ficheros, en nuestro caso:

Comunix

Veamos nuestros datos

  • Para ello abrimos el FTK Imager Lite.
  • Pulsamos el primer icono, Add Evidence Item.
  • Seleccionamos Image File.
  • Buscamos nuestro fichero de la partición de usrdata.

 

Comunix

Seleccionar la imagen usrdata como Image File

 

Comunix

 

Podemos navegar por todo el árbol de directorios. Como la partición se ha identificado como EXT4, dentro la carpeta [root] que contiene todos las carpetas, las que nos interesan son media que contiene en este caso el almacén interno de datos, la memoria interna de Android, recordemos la externa es si fuera el caso la microsd. En DCIM están las fotos, vemos la carpeta de música, download,…..

Podemos exportar cualquier carpeta, ficheros sueltos o lo que queramos recuperar, pulsando con el botón derecho del ratón y dándole una ruta de nuestro disco duro. Como vemos es una foto de mi teclado lo que había en el terminal.

No menos importante es la carpeta /data ya que contiene todas la bases de datos y datos necesarios de cada aplicación que hay instalada en el termina, de ahí podemos sacar la base de datos en SQLite3 que tiene los contactos y procesarlos con script en java o python, o nuestro lenguaje favorito. O recuperar nuestras conversaciones de WhatsApp y/o realizar un análisis más exhaustivo.

Comunix

 

Comunix

 

Algo muy interesante de FTK Imager Lite es que nos permite montar la imagen como una unidad por ejemplo en solo lectura, pulsando sobre userdata con el botón derecho y eligiendo “Mount Image to Drive”, nos asignara la siguiente letra libre para unidades externas en este caso F:, para que naveguemos como si fuera un pendrive normal. Ojo lo ficheros debemos seleccionarlo y copiar si es necesario ya que al salir del FTK hay desmontar las unidades de la misma forma que las hemos creado, no lo olvidéis.

Comunix

 

Con esto ya esta bien, hemos terminado, si te ha gustado dímelo, también si algo no es correcto, no estas de acuerdo o necesitas algún servicio más avanzado, búscame en Telegram como @nomed1, próximamente también en www.tallerdeandroides.com, hasta la próxima.

Buenaventura Salcedo | @nomed1

www.tallerdeandroides.com



Tú escuela de Hacking Ético.
Avda. de Las Américas 3, 4º A
29002, Málaga, Málaga,
(+34) 951 043 792 - info@comunixgroup.com

Suscríbete a nuestro Boletin

  Suscribirse ahora
Copyright © 2018 - Todos los derechos reservados.

X