Extracción de Datos en Android para Un Análisis Forense
Extracción de Datos en Android para Un Análisis Forense
2018
UNIVERSIDAD DE ALCALÁ
ESCUELA POLITÉCNICA SUPERIOR
Tribunal:
Calificación: ..........................................................................
Fecha: ...................................................................................
Dedicado a mis padres por su paciencia infinita y haberme apoyado en todo momento. . .
“I have not failed, I just found 10,000 ways that do not work”
(Tomas Alva Edison)
“Focus is a matter of deciding what things you’re not going to do.”
(John Carmack)
Agradecimientos
Gracias a mis compañeros de la Universidad, en especial a todos los de la Cátedra, por la ayuda, la
compañía y por haber hecho mas ameno mi trabajo. A los profesores que han estado siempre ahí. Y por
encima de todo a mi familia, por haberme apoyado hasta el final.
vii
Resumen
A día de hoy se está viviendo una revolución tecnológica como nunca antes se había visto. Este crecimiento
es casi exponencial en el campo de los dispositivos móviles. Actualmente se predice que habrá más de 9
billones de dispositivos móviles conectados en el mundo para el 2020. Esta estadística por sí sola refleja
el crecimiento sin precedentes de los dispositivos móviles. Los teléfonos móviles no solo han aumentado
en número sino que también se han vuelto más sofisticados en términos de funcionalidad.
El análisis forense móvil es una rama del análisis forense digital que está evolucionando muchísimo en
la actualidad. Un forense se ocupa de extraer, recuperar y analizar los datos presentes en un dispositivo
móvil a través de una variedad de técnicas. Sin embargo, es importante tener una comprensión clara de
la plataforma y otros fundamentos antes de sumergirse a descubrir cómo extraer datos.
En este trabajo se explicara todo el conocimiento necesario para poder realizar una extracción de
datos para un análisis forense de un dispositivo Android. Veremos como esta formado el sistema operativo
Android su funcionamiento y el funcionamiento de las aplicaciones para poder hacer una extracción de
la máxima cantidad de datos y lo mas completa posible. Con estos conocimientos adquiridos se hará una
demostración creando un programa para la extracción de datos de la aplicación de Telegram.
Palabras clave: Telegram, Reversing, Forense, Mensajería, Andorid.
Abstract
Today a technological revolution is being experienced like no other. This growth is almost exponential in
the field of mobile devices. It is currently predicted that there will be more than 9 billion mobile devices
connected in the world by 2020. This statistic alone shows the unprecedented growth of mobile devices.
Mobile phones Not only have they increased in number but they have also become more sophisticated in
terms of functionality.
Mobile forensics is a branch of digital forensics that is evolving in huge leaps. A forensic analist is in
charge of extracting, recovering and analyzing the data present in a mobile device through a variety of
complex techniques. However, it is important to have a clear understanding of the platform and other
fundamentals before diving and discovering how to extract data.
In this paper we will explain all the necessary knowledge that is needed to be able to perform a
data extraction for a forensic analysis of an Android device. We will see how the Android operating
system works review all of its functioning and how andorid Apps work internaly in order to extract the
maximum amount of data and recover as much information as possible. With the knowladege aquired in
this document we will create as an example a program for data extraction of the Telegram app.
Keywords: Telegram, Reversing, Forensics, Messeging, Android.
Resumen extendido
Actualmente hay varias herramientas que permiten a peritos o investigadores extraer la información que
está contenida en dispositivos móviles con sistema operativo Android, pero no hay herramientas o muy
pocas para poder descifrar la información extraída de aplicaciones particulares que en algunos casos, por
ejemplo con la aplicación de Telegram sin estas herramientas la información extraída es totalmente inútil
sin un posterior análisis.
La mensajería instantánea es una de los usos mas extendidos de los dispositivos móviles. Permiteque los
usuarios puedan comunicarse con cualquier persona de una manera interactiva y fácil. Estasaplicaciones
permiten el envió de texto voz imágenes y archivos. Existen varias aplicaciones de este tipopero suelen
haber unos 3 que son los que mas se utilizan, dentro de estas tres se encuentra la aplicaciónde Telegram
que es la que vamos a estudiar en profundidad
Telegram prácticamente no tiene ninguna herramienta de extracción de datos. Esto es a causa de que
los datos son difíciles de visualizar y ofuscan por así decir sus datos y están de una manera que son
difícil de extraer y recuperar. A partir de la situación de falta de herramientas para esta aplicación, se
procedió a la realización de una herramienta para la extracción y visualización de los datos contenidos
en la aplicación de Telegram.
Para realizar este trabajo tocaremos los siguientes puntos.
Resumen ix
Abstract xi
Índice general xv
1 Introducción 1
1.1 Justificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Estado del arte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 Que es Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Análisis Forense Móvil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 Breve descripción de la metodología de la investigación . . . . . . . . . . . . . . . . . . . . 4
1.6 Esquema del Trabajo de Fin de Grado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Estudio teórico 7
2.1 Proceso de análisis Forense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.1 Confiscación y aislamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.2 Adquisición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.3 Análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.4 Documentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.1 Arquitectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.1.1 Kernel Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.1.2 Librerias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
xvi ÍNDICE GENERAL
3 Descripción experimental 21
3.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 App Telegram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3 Preparación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.4 Extracción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.5 Extracción de artefactos en Telegram Messenger . . . . . . . . . . . . . . . . . . . . . . . 24
3.5.1 Código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.5.2 Base de datos Telegram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.5.3 Ver Lista de todos los usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.5.4 Ver Contactos en contacts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.5.5 Ver Contactos Bloqueados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.5.6 Ver mensajes de un contacto específico . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.5.7 Ver todos los BOTS utilizados en los grupos . . . . . . . . . . . . . . . . . . . . . . 30
3.5.8 Mensajes eliminados o secretos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
ÍNDICE GENERAL xvii
4 Resultados 41
4.1 Desarrollo de la Herramienta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1.1 Adquisición de aplicación del dispositivo . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1.2 Adquisición de datos de la base de datos . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1.3 Adquisición de mensajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1.4 Almacenamiento de datos para la visualización . . . . . . . . . . . . . . . . . . . . 44
4.2 La Herramienta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3 Extracción de datos directos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.4 Visualización de datos e interpretación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Bibliografía 55
A Manual de usuario 57
A.1 Instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
A.2 Utilizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
B Herramientas y recursos 61
D Fragmentos de código 67
Índice de figuras
Introducción
1.1 Justificación
A día de hoy se esta viviendo un avance tecnológico como nunca se había visto antes en la que los disposi-
tivos móviles están siendo imprescindibles en la vida cotidiana de cualquier persona. Este crecimiento es
casi exponencial en el campo de los dispositivos móviles. En la actualidad se predice que habrá más de 9
billones de usuarios con móviles conectados para el 2020. Esta estadística por sí sola refleja el crecimiento
sin precedentes de los dispositivos móviles. Los teléfonos móviles no solo han aumentado en número sino
que también se han vuelto más sofisticados en términos de funcionalidad, últimamente los dispositivos
móviles han permitido que se puedan tomar fotografías grabar vídeos, enviar mensajes, chatas, Emails,
localización por GPS, por lo que puede ser una fuente importante para un caso de investigación. Teniendo
en cuenta que un usuario medio utiliza su móvil 147 minutos al día se puede acumular mucha información
sobre los hábitos y comportamientos de la persona a investigar. ¿Con tanta cantidad de datos existe una
metodología para conseguir estos datos? ¿Como se analizan estos datos? y ¿Como se buscan y extraen
en el caso de un análisis forense? ¿Que información obtenemos de ellos? Estas son las preguntas que
intentaremos responder este trabajo.
Actualmente hay varias herramientas que permiten a peritos o investigadores extraer la información que
está contenida en dispositivos móviles con sistema operativo Android, pero no hay herramientas o muy
pocas para poder descifrar la información extraída de aplicaciones particulares que en algunos casos, por
ejemplo con la aplicación de Telegram sin estas herramientas la información extraída es totalmente inútil
sin un posterior análisis.
Nuestros Smartphones permiten la comunicación constante e instantánea con nuestra familia, amigos
e incluso compañeros de trabajo. Los mensajes de texto se encuentran entre las formas más populares de
comunicarse en todo el mundo. Las aplicaciones de mensajería han crecido para ofrecer servicios completos
que ofrecen todo tipo de interacciones con los demás, desde mensajes de texto gratuitos hasta llamadas
de voz y vídeo, y uso compartido de fotos y archivos con el beneficio adicional de el cifrado. Aquí esta
una lista de las aplicaciones mas usadas de mensajería en Android.[1]
2 Capítulo 1. Introducción
• Telegram [2]
• WhatsApp [3]
• WeChat [4]
• Snapchat [5]
• Line [7]
Una de las aplicaciones que mas herramientas tiene para el análisis forense son para la App de
Whatsapp en esta podemos encontrar una lista infinita entre las mas conocidas
• Whapa[8]
• WhatsApp Viewer[9]
Telegram en cambio es de las segundas mas utilizadas pero no tiene ninguna herramienta. Esto es a
causa de que en la aplicación de Whatsapp la información es fácil de extraer, simplemente abriendo la base
de datos tenemos toda la información en claro de la aplicación entera, por el otro lado tenemos Telegram
que ofusca por así decir sus datos y los pone de una manera que son difícil de extraer y recuperar.
Esta fue la inquietud que motivó la realización de este trabajo. A partir de la situación de falta de
herramientas para esta aplicación, se procedió a la realización de una herramienta para la extracción y
visualización de los datos contenidos en la aplicación de Telegram, con esto veremos todos los pasos que
se han tomado para poder realizar esta herramienta y esta información podría servir para desarrollar
una metodología que permitirá desarrollar herramientas especificas para la extracción de estos datos en
distintas aplicaciones Andorid desde la extracción de los datos de el dispositivo hasta la extracción de los
datos de la propia aplicación. Al mismo tiempo, se demuestra como con la extracción es posible realizar
un análisis de la actividad y comportamiento del usuario que no era información intencionadamente
almacenada.
1.3 Que es Android 3
En este articulo trabajaremos sobre el sistema operativo Andorid exclusivamente, existen otros como
pueden ser iPhoneOS Symbian webOS Bada.. Pero al ser Android uno de los mas populares en España
seguido de IOS nos concentraremos solo en Android. ¿Pero que es Android?
[10]Android es un sistema operativo basado en el núcleo Linux. Fue diseñado principalmente para
dispositivos móviles con pantalla táctil, como teléfonos inteligentes, tabletas y también para relojes inte-
ligentes, televisores y automóviles. Inicialmente fue desarrollado por Android Inc., empresa que Google
respaldó económicamente y más tarde, en 2005, compró. Android fue presentado en 2007 junto la funda-
ción del Open Handset Alliance (un consorcio de compañías de hardware, software y telecomunicaciones)
para avanzar en los estándares abiertos de los dispositivos móviles.
La versión básica de Android es conocida como Android Open Source Project (AOSP) Este sistema
operativo se utiliza no solo en smartphone pero en varios dispositiovs como pueden ser vehículos neveras
tablets ordenadores radios...
El análisis forense móvil es una rama del análisis forense digital que está evolucionando muchísimo en la
actualidad. Un forense se ocupa de extraer, recuperar y analizar los datos presentes en un dispositivo para
una investigación a través de una variedad de técnicas. Para esto es importante tener una comprensión
clara de la plataforma su estructura y funcionamiento tanto del dispositivo como las aplicaciones.
La mensajería instantánea es una de los usos mas extendidos de los dispositivos móviles. Permite
que los usuarios puedan comunicarse con cualquier persona de una manera interactiva y fácil. Estas
aplicaciones permiten el envió de texto voz imágenes y archivos. Existen varias aplicaciones de este tipo
pero suelen haber unos 3 que son los que mas se utilizan, dentro de estas tres se encuentra la aplicación
de Telegram que es la que vamos a estudiar en profundidad exclusivamente en un capitulo.
La velocidad a la que se crean nuevos modelos y actualización es bastante elevada por lo que seguir un
procedimiento igual para todos los modelos y aplicaciones es bastante complicado por lo tanto lo que se
aplica en esta investigación puede que sea distinta en otras versiones y aplicaciones pero la metodología
se mantiene.
En este trabajo se explicara todo el conocimiento necesario para poder realizar una extracción de datos
para un análisis forense de un dispositivo Andorid. Veremos como esta formado el sistema operativo
Android y su funcionamiento para poder hacer una extracción lo mas completa posible.
El problema que nos encontramos es que una vez tenemos los datos no siempre podemos utilizarlos ya
que cada aplicación es distinta una de otra. Al haber millones de aplicaciones en el mercado para Android
nos centraremos en recuperar datos para la aplicación Telegram específicamente que es una aplicación
de uso muy popular, no tiene casi ninguna herramientas desarrollada para este fin y es un reto compleja
que nos permitirá tocar varios puntos de la extracción de datos. Explicaremos todos los pasos que se han
tomado para poder extraer los datos de una manera que puedan ser utilizados para un análisis Forense.
Con estos conocimientos adquiridos los los utilizaremos para crear una aplicación de extracción de datos
para un análisis forense y podremos aplicar esta misma metodología en otras aplicaciones.
1.6 Esquema del Trabajo de Fin de Grado 5
Estudio teórico
En esta sección se explicara la base de conocimientos que debemos tener para poder hacer una análisis
forense y lo necesario para conocer el funcionamiento de el sistema operativo Android y las técnicas que
necesitamos para poder hacer una extracción, donde y como buscar estos datos.
A la hora de confiscar el dispositivo se deberá tener cuidado de no modificar ni que sean modificados los
datos datos durante la manipulación. Lo primero que debemos de tener en cuenta a la hora de adquirir
un dispositivo móvil para un análisis forense es que los datos sean alterado lo mínimo posible durante
todo el proceso de manipulación y análisis.
Cuando se confiscó el dispositivo si es posible hay que hacerse con el dispositivo ya desbloqueado ya
que es un paso muy importante si se puede realizar ya que esto nos dará un acceso sin problemas a móvil
sin tener que preocuparnos por saltarnos el bloqueo.
Una vez con el dispositivo es importante que este no se bloque por lo tanto debemos de poner el
móvil de una manera para que no se nos bloquee y es importante que este no se apague por lo tanto
inmediatamente poner a cargar en caso de que la batería esté baja y desactivar el bloqueo automático.
Para hacer que no se nos apague el dispositivo y se bloque se puede hacer del siguiente modo Activando
el modo Desarrollador en opciones de desarrollo y activando la opción de “Pantalla activa” y también
poniendo el tiempo de suspensión al máximo
Es importante también aislar el dispositivo de comunicaciones ya que se podría alterar los datos por
actualizaciones conexiones o programas ejecutándose o se puede borrar o bloquear el dispositivo remota-
mente por el usuario mediante los programas anti-robo, estos pueden ser por el Android Device Manager
que permite el borrado remoto por internet o el Mobile Device Management que permite el borrado
y bloqueo mediante un SMS por lo tanto es importante que no tenga conexión y esté completamente
aislado. Esto se puede hacer activando el modo avión o metiendo el dispositivo en una Jaula de Faraday
que impedirá que tenga ninguna señal. También aprovechar para activar el modo de depuración Android
ADB (Android Debug Bridge) que nos dará acceso a la interfaz de desarrollo del dispositivo móvil.
8 Capítulo 2. Estudio teórico
2.1.2 Adquisición
La fase de adquisición es en la que mas detalle entraremos es donde se extraen los datos de el dispositivo.
Dependiendo de el modelo versión y marca del dispositivo se tendrá distintas maneras disponibles por lo
que siempre se debe elegir la mejor para cada caso.
• Adquisición lógica, Extracción de datos mediante las herramientas de el propio dispositivo como
backups de el dispositivo mensajes archivos fotos vídeos aplicaciones...
• Adquisición física, Adquisición bit a bit de la memoria flash de un dispositivo en la que se tiene
un clonado perfecto de el dispositivo que asegura la originalidad de la evidencia y que no va a ser
alterada durante la investigación
En algunas de estas fases son necesarias técnicas ofensivas como crackeo de contraseñas y rooting.
Hay que tener en cuenta que una vez obtenidos los datos también tendremos el problema de la extracción
de datos de cada aplicación en la que unas sera mas fáciles que otras en la que se almacenan los datos de
una manera distinta por cada aplicación. Tendremos un capitulo entera dedicado a sacar datos en detalle,
como extraer la aplicación de Telegram, y veremos donde están almacenados los datos, ver como sacarle
un sentido a estos datos para poder reconstruir los mensajes de la aplicación.
2.1.3 Análisis
En esta fase se extraen y analizan los datos utilizando distintas herramientas. Estos datos pueden ser
desde archivos creados por el propio usuario como imágenes musica o datos que quedan tras el uso de
aplicaciones como logs caches bases de datos. Estos datos nos pueden no solo dar información directa como
fotos, contactos si no que podemos encontrar apartar de ellos información no intencionada como pueden
ser los patrones de uso o de actividades diarias a partir de logs de tiempos de carga, Posicionamiento a
partir de logs de conexiones de torres de telefonía móvil y así podemos conocer la actividades que suele
hacer una persona diariamente, podemos averiguar sus gustos por logs de búsquedas. Para facilitar el
trabajo en esta sección existen varias herramientas que podríamos utilizar para la búsqueda de estos
datos como puede ser la aplicación de Autopsy. Una vez se obtienen estos datos se pasaría a un análisis
en profundidad para poder obtener esta información.
2.1.4 Documentación
En esta fase se crea un documento claro de todos los pasos y datos encontrados durante el análisis
apuntando: cada fase realizada
• Fases de la extracción: Detallando cada fase realizada en la extracción de los datos encontrados.
2.2 Android
Android es un sistema operativo creado por Open Handset Allience a comienzos del 2005 y luego fue
adquirido por Google en el 2007. Este sistema operativo fue creado para una arquitectura ARM está
basado en Linux y es de código abierto con licencia Apache 2.0. Es actualmente el sistema operativo más
utilizado por los dispositivos móviles gracias a que cualquier fabricante puede adaptar Android para sus
dispositivos. actualmente cuenta con más de 2 billones de dispositivos activos en todo el mundo.
2.2.1 Arquitectura
El sistema operativo es de código libre por lo tanto cualquier fabricante puede utilizar el código modificarlo
a sus necesidades y aplicarlo a su dispositivo, Android está construido sobre un kernel Linux esta le permite
una gran compatibilidad con una gran cantidad de hardware y hace que la adaptación distinto hardware
sea muy sencillo. El sistema operativo funciona en varia capas conocidos como STACKS
El kernel Linux es igual a cualquier otro kernel que puede estar incluida en cualquier distribución Linux
y es la que da una capa de abstracción para el hardware del dispositivo como puede ser la pantalla la
cámara Bluetooth Wifi audio etc. Esta también es la encargada de manejar la seguridad el manejo de la
memoria protocolos de redes y los drivers de los dispositivos.
2.2.1.2 Librerias
Son un conjunto de librerías nativas de Android programadas en C/C++ Están creadas por el fabricante
para el hardware específico y son que se utilizan para manejar los datos como pueden ser multimedia
OpenGL SQLite etc.
• android.databaseDa acceso a datos con un sistema de interfaz con bases de datos sqlite.
La parte más importante de esta es la llamada Dalvik Virtual Machine. Esta es una máquina virtual java
optimizada para Android en la que se encarga de que cada aplicación Android este encerrada y funcione
en su propia instancia virtual Dalvik por lo tanto haciendo que el sistema operativo sea muy seguro.
Esta capa está formada por las clases y servicios que las aplicaciones utilizan durante la ejecución y
son ejecutadas en la máquina virtual Dalvik para que los desarrolladores puedan utilizar los en sus
aplicaciones. algunos de estos servicios son
• Activity Manager El encargado de controlar el ciclo de vida de la aplicación como puede ser la
ejecución, sleep, segundo plano.
• Content Providers Permite que las aplicaciones compartan datos entre ellos.
• Resource Manager Da acceso a recursos como strings, colores y elementos de la interfaz graficas.
2.2 Android 11
Aquí es donde se encuentra la ejecución de las aplicaciones en donde el desarrollador puede programar
y crear las aplicaciones utilizando todos los recursos que da Android a su disposición. Estos pueden ser
Navegadores Calendarios Juegos..
Es importante conocer cómo Android se inicializa para poder empezar a hacer un análisis forense de el
dispositivo por lo tanto aquí hay una breve explicación del proceso
• Boot ROM Hay una dirección predefinida que al iniciar el microprocesador busca y encontrarás
el bootloader por la cual procederá a cargar en memoria.
• El proceso InitUna vez montado el sistema de archivos se ejecutara el proceso de init encargado
de comenzar el sistema operativo Android cargando las librerías a el sistema para el funcionamiento
correcto de esta.
• Zygote y Dalvik Init inicializa el servicio de Zygote que es el encargado de inicializar las librerías
de clases de Android el encargado de que se inicialice las máquinas virtuales Dalvik que es la
máquina virtual similar a las máquina virtual java donde se ejecutarán los procesos
• Servicios del Sistema o Servicios Zygote también inicializará los servicios de sistema como son
los sensores el módem teclado batería etc..
• Boot completado Una vez completado el inicio de mandara un disparo de acción de tipo BROAD-
CAST al sistema con el mensaje “ACTION_BOOT_COMPLETED” que indicará el fin de la carga
del proceso y debería de ver ya por pantalla nuestro escritorio Android
#cat /proc/mtd
dev : size erasesize name
mtd0 : 00040000 00020000 " m i s c "
mtd1 : 00500000 00020000 " r e c o v e r y "
mtd2 : 00280000 00020000 " b o o t "
mtd3 : 04380000 00020000 " s y s t e m "
mtd4 : 04380000 00020000 " c a c h e "
mtd5 : 04 ac0000 00020000 " u s e r d a t a "
12 Capítulo 2. Estudio teórico
• Bootloader Es donde encontramos el bootloader del teléfono y será lo primero que nuestro dispo-
sitivo iniciará.
• Recovery Desde el bootloader podemos elegir bootear desde esta partición y aquí tendremos
herramientas de mantenimiento para el móvil. Al igual que la partición boot tiene su propio kernel
y ramdisk.
• Boot Esta partición contiene el kernel y ramdisk de Android y es la que se inicia en un booteo
normal.
• Cache Aquí se almacena los datos que el usuario utiliza con más frecuencia para agilizar la carga
de ellos.
Android Debug Bridge (ADB)[11] es una herramienta de líneas de comandos versátil que te permite
comunicarte con una instancia de un emulador o un dispositivo Android conectado. Esta herramienta
proporciona diferentes acciones en dispositivos, como la instalación y la depuración de Apps, y proporciona
acceso a un Shell Unix que puedes usar para ejecutar varios comandos en un emulador o un dispositivo
conectado. Con esta Herramienta accederemos al dispositivo para poder extraer los datos o hacer un
clonado de el sistema. Para poder Utilizar esta herramienta debemos de conectar el dispositivo por USB
o por red y debemos conectarnos a el con el cliente que nos proporciona Android SDK[12]. Se debe activar
desde el menú de configuración y poner el Dispositivo en modo Debug. Otro método seria iniciando un
programa que ya lo lleve iniciado por defecto como por ejemplo un Custom Recovery de TWRP[13].
Fastboot es otra herramienta que no nos proporciona una consola ni manera de copiar archivos pero
al entrar en modo Fastboot en el dispositivo nos da la posibilidad de poder flashear particiones de el
dispositivo y nos permitirá desbloquear el bootloader en caso de que lo este bloqueado.
2.3 Extracción de datos 13
Cuando haya que hacer una extracción de datos de un dispositivo móvil para un análisis forense hay dos
maneras en la que se pueden extraer los datos esta es la física y la lógica. Estos métodos de extracción de-
penderá de el acceso que tengamos al dispositivo, fabricante, modelo, etc.. Una nos dará mas información
que otra y dependiendo de la situación estaremos obligados a utilizar una de las dos.
Si es posible, siempre es recomendable hacer una adquisición física, ya que se clona todo el dispositivo
bit a bit. Con esta tendremos una copia exacta de el dispositivo no solo de los archivos de el usuario si
no también de todo el sistema. Esto nos dará mas posibilidades a la hora de recuperar datos tantos los
eliminados o que a lo mejor a plena vista no se sabia que estaban. Esta nos ocupara el tamaño que tenga
el dispositivo de almacenamiento.
• ADB + ROOT Consiste en tener acceso root en el sistema y hacer una copia de el sistema
• Boot loader Hacer una adquisición desde el propio bootloader de el dispositivo con las herramintas
especifivas para cada fabricante
• Chip Off Sacar el chip eMMC y hacer una lectura directa y dumpeado de esta misma.
• JTAG ISP En algunos dispositivos tenemos los puertos de JTAG o ISP que vienen en los SOC
(Sistem On Chip) de los dispositivos y se utilizan para diagnostico y fabricación, Estas suelen ser
accesibles desde la placa base o se puede modificar la placa base para conectarse a este puerto
directamente en el chip. Con una herramienta conectada a este puerto se puede hacer un dumpeado
de la memoria de el dispositivo.
• Custom Recovery Consiste en instalar un Recovery sobre el original que nos de acceso al sistema
de archivos y nos permita hacer un clonado de la misma. Al iniciar como recovery tendremos acceso
a todo el dispositivo sin necesidad de rootear el Sistema operativo Andorid. Aveces incluso podemos
bootear este recovery desde memoria sin flashear.
Esta extracción consiste solo en copiar los archivos en las que el usuario tiene acceso. Esto incluye archivos
multimedia, backups de aplicaciones descargas y algunos datos que las aplicaciones van guardando dentro
de el espacio de el usuario. Nos ocupara solo el tamaño que tengamos en archivos de usuario.
• AFLogical AFLogical es una herramienta que nos automatiza el trabajo de conectarse por adb y
copiar los archivos.
• De forma Manual Podemos extraer los datos uno a uno abriendo una consola con ADB utilizando
.ADB SHELL.a una sd externa o compilando los archivos directamente con .ADB PULL"
14 Capítulo 2. Estudio teórico
2.3.3.3 Desafíos
Por lo tanto ¿Cual de los dos métodos utilizamos y por que tenemos que elegir? En la extracción lógica
sera en el caso de que no tengamos acceso de superusuario (ROOT) en el sistema o no haya alguna
manera de poder extraer la memoria completa por medio de hardware u otros métodos así que la única
opción que nos queda es hacer la exacción lógica. Siempre que sea posible y no estemos limitados por
espacio de almacenamiento ni herramientas.
Root o superusuario es el usuario con máximos privilegios de un sistema por lo que rootear un dispositivo
es intentar conseguir de alguna manera ser el usuario root para poder tener todos los privilegios de un
sistema desde acceso a carpetas o funcionalidades del sistema. En un sistema Android por seguridad se
tiene acceso a una cuenta de usuario con privilegios limitados y no tenemos acceso a el dispositivo entero
por lo tanto esto es muy necesario a la hora de hacer una análisis forense si queremos tener acceso y
poder hacer una copia lo más completa del dispositivo para su análisis.
Antes de rootear debemos de tener en cuenta esto dos modos de bootear un dispositivo android Para
poder entrar en estos modos lo que hacemos en iniciar mediante una serie de combinaciones de botones
al encender que dependerá de el fabricante de el dispositivo.Estos son pequeños sistemas operativos que
se inician en la que podemos administrar y hacer un servicio a nuestro dispositivo.
Dependiendo de el dispositivo entrara en el modo Recovery o Fastboot
• El modo Recovery es un sistema operativo que nos permite recuperar archivos instalar actualizacio-
nes, hacer pruebas o restaurar el sistema a fabrica. Hay que tener en cuenta que desde este sistemas
operativos tenemos acceso al dispositivo completo. Si podemos instalar un Custom Recovery que
nos permitira utilizar adb o alguna herramienta podremos hacer un clonado físico de el dispositivo.
• En modo Fastboot esta creado para poder tener una manera de flashear y actualizar el sistema
completo para poder recuperar el sistema en caso de que falle y os permitirá elegir a donde bootear
si al sistema operativo a Recovery o incluso desde memoria. Este es útil ya que podremos utilizarlo
para poder instalar un Recovery Custom que nos permitirá utilizar ADB o alguna herramienta para
clonar el dispositivo y fastboot nos facilita ya que no necesitamos software especifico para tener que
flashaer el dispositivo.
Para poder conseguir ser ROOT en un dispositivo Android tenemos varios caminos. Estos dependerán
de el dispositivo el fabricante la versión de Android que tengan, si existen exploits recientes sin parchear
si esta bloqueado... y varios otros factores que se tendrán que estudiar a la hora de conseguir rootear
el dispositivo. No entraremos en mucho detalle ya que estos datos varían muchísimo con el tiempo y es
cuestión de buscar la información en el momento. Aquí se deja algunos de los métodos actuales a día de
la escritura de esta trabajo y algunos métodos comunes para poder conseguir esto. Estos pueden ser
16 Capítulo 2. Estudio teórico
• Roots universales
– DIRTY COW
– KING ROOT
– MAGESTIC
Si nos encontramos con un Bootloader Bloquado se puede desbloquear desde Fastboot con el comando
.OEM Unlock"pero esto tiene un gran problema, por seguridad los dispositivos borrando toda la memoria
de le dispositivo poniendo lo de fabrica al desbloquear el bootloader por lo tanto esta es una opción que
tendríamos que descartar e intentar flashear de otro modo como seria con las aplicaciones especificas de
cada fabricante.
Un Custom Recovery nos permitirá poder tener acceso root de nuestro dispositivo y nos permitirá hacer
una extracción física de el dispositivo. Este recovery puede ser uno programado o modificado por nosotros
2.4 Estructura de las aplicaciones móviles 17
mismos basado en el original, que venga con nuestra herramienta forense o podemos buscar una de las
muchas disponibles creadas por la comunidad. Algunas de las mas populares son
• TWRP https://twrp.me/
También es de gran interés hacer una extracción de la memoria volátil. Esta puede contener informa-
ción de las aplicaciones que se están ejecutando claves de cifrados contraseñas en claro y puede haber
información de mucho valor en ella. No entraremos en esto ya que daría para un trabajo completo
por si solo pero si es importante que se conozca. Esta se podría hacer con una herramienta llama-
da lime y un kernel customizado para Android. https://www.youtube.com/watch?v=KN9kxn6htMU
https://github.com/504ensicslabs/lime
Las aplicaciones en el sistema operativo Android se instalan y siguen una estructura igual en casi todas
las versiones de Android. A la hora de extraer una aplicación de Android nos interesaran las siguiente s
carpetas.
• Core de las aplicaciones: ((/data/xxx.xxxx.xxxx)) En esta encontramos todos los archivos pro-
pios de la aplicación, las imágenes de la propia aplicación las bases de datos, archivos temporales,
logs..
SQLite es un sistema completo de bases de datos que soporta múltiples tablas, índices, triggers y vistas. No
necesita un proceso separado funcionando como servidor ya que lee y escribe directamente sobre archivos
que se encuentran en el disco duro. El formato de la base de datos es multiplataforma e indistintamente
se puede utilizar el mismo archivo en sistemas de 32 y 64 bits. La base de datos se almacena en un único
fichero a diferencia de otros DBMS que hacen uso de varios archivos. SQLite emplea registros de tamaño
variable de forma tal que se utiliza el espacio en disco que es realmente necesario en cada momento.
La mayoría de Apps móviles almacenan información en SQLite. Suelen están almacenadas en la
carpeta de la aplicación en /databases/ dentro de el Core de la aplicación. Los archivos SQLite suelen
18 Capítulo 2. Estudio teórico
tener la extensión .db aunque hay que tener en cuenta que no todos los archivos de SQLite van a tener
esta extensión por esto hay que analizar cada uno de los archivos que encontremos mirando las cabeceras.
Ejemplos
Al borrarse información de las bases de datos sqlite no se eliminan realmente solo se marcan como libres.
SQlite ha implementado Vacuum para eliminar los datos de una manera segura y se hacen poniendo a
0 estos bloques.En el caso de los dispositivos móviles con Andorid para poder ahorrar en procesado y
consumo de batería esta no esta activada por defecto ni en iPhone ni Android. Si no se han sobrescrito
estos datos borrados pueden ser recuperados fácilmente con un lector hexadecimal.
• Logs de Providers
• Logs de Geolocalizacion No solo necesitamos informacion gps para poder geolocalizar un dis-
positivo. viendo direciones ip datos de connecion con la wifi o datos de las torres moviles po-
driamos geolocalizar el dispositivo y tener un historial de las ubicaciones por las que ha estado.
https://github.com/NoSuitsSecurity/GeoAndroid/blob/master/README.md
• Logs de Bluetooth
– com.android.settings/databases/search_index.db Prefs_index
– misc/bluedroid/bt_config.conf
• Logs de Habitos
2.4 Estructura de las aplicaciones móviles 19
• Logs de uso
– Lista Apps Instaladas: /system/packages.list Última vez que se ha utilizado una aplicación:
– /system/packages-usage.list
Capítulo 3
Descripción experimental
3.1 Introducción
En este articulo se ha desarrollado una herramienta para la extracción de datos automatizada para la
aplicación de Telegram. Esta aplicación es bastante compleja de extraer los datos por lo que iremos
explicando todos los pasos que se han tomado. Muchas cosas quedaran sin poder ser resueltas ya que no
existe ninguna documentación publica de esta aplicación por lo que se intentara extraer todo lo posible
que podría ser de utilidad en un caso de Análisis Forense, estos datos siendo desde los mensajes, usuarios,
archivos multimedia y también poder visualizar estos en un sentido temporal y a quien va dirigido los
mensajes.
Con las técnicas explicadas anteriormente se extraerán los datos de la aplicación de Telegram y estos
los vamos a analizar para ver como poder sacar los datos contenidos dentro de la propia aplicación para
poder utilizarlos para un Análisis Forense ya que a diferencia de otras aplicaciones como Whatsapp los
datos en Telegram no tienen una estructura que se puede ver a simple vista. Para realizar estas pruebas
se ha utilizado un móvil limpio y preparado con un mensaje de cada tipo en la que estamos seguros y
tenemos control de la información que tenemos, también se ha utilizado un móvil de uso real para verificar
que funciona y para poder observar los datos y comparar con mayor cantidad de datos.
Es una aplicación creada por Pavel y Nikolai Durov fundadores de la red social VK Rusa. La aplicación
de Telegram es una aplicación gratuita de mensajería instantánea que ha nacido como una alternativa a
Whatsapp. Esta es de código abierto (aunque poco actualizado)
3.3 Preparación
Para realizar una herramienta es de gran ayuda estudiar bien la aplicación antes de comenzar y crear
un entorno de pruebas con todos los posibles datos y combinaciones que podamos tener en la aplicación
apuntando estos datos y sabiendo exactamente que son. Esto nos vendrá de gran ayuda a la hora de
buscar la información en la aplicación.
En un dispositivo limpio con Telegram recién instalado y con una cuenta nueva. En este caso se ha
utilizado un emulador para facilitar la extracción y con un numero de teléfono nuevo.
22 Capítulo 3. Descripción experimental
• —Recibidos—
• —Enviados—
– Archivo: extracciontelegram.zip
3.4 Extracción 23
Es muy recomendable también tener un móvil con una aplicación que ha tenido un uso real, esto nos
ayudara muchísimo al tener una gran cantidad de datos para poder comparar.
En el caso de Telegram sabemos que podemos enviar mensajes enviar multimedia crear chats secretos
hacer llamadas de voz. También sabemos que la aplicación mantiene los mensajes se sincroniza con
nuestros contactos, guarda archivos en el dispositivo.. Se han utilizado dos dispositivos Android uno real
y otro limpio en la que se han creado una serie de mensajes de cada tipo, mensajes en distintos estados,
mensajes borrados, mensajes multimedia, contactos añadidos y borrados. Ya con esto podemos continuar
en la extracción de datos de el dispositivo y utilizaremos estas dos durante la extracción de datos de la
aplicación.
3.4 Extracción
Para la extracción de la aplicación de Telegram se ha optado por una extracción Física. Para poder acceder
a los archivos de los mensajes que nos interesan están dentro de la carpeta de el sistema de androide por
lo tanto necesitamos poder tener acceso ROOT y conectar el dispositivo y copiar con DD una imagen
de el sistema. Una vez teniendo ROOT para facilitar el trabajo podemos utilizar la aplicación Magnet
Aquire [14] que nos hará el trabajo de extracción automáticamente y podremos visualizar los datos con
la aplicación de AUTOPSY [15].
iniciar tiene una sesión de ADB escuchando. Una vez esta ha bootead iniciara una sesión con ADB en la
que tendremos acceso a todo el dispositivo como root y hacemos una copia
• Conversaciones.
• Horas de Conexión
• Mensajes Borrados
• Ubicaciones
• Core de Telegram
– /data/org.telegram.messenger/
∗ files/cache4.db
• Apk de Instalacion
– /data/app/org.telegram.messenger-2/base.apk
– /sdcard/Telegram/
Un archivo de gran interés en este caso es el de cache4.db. Este archivo es una base de datos sqlite en
la que se encuentran todos los datos de la aplicación Esta tiene la siguiente estructura
3.5 Extracción de artefactos en Telegram Messenger 25
3.5.1 Código
Para poder ayudarnos a la hora de interpretar los datos seria de buena ayuda tener el código fuente de
la aplicación. Primero se ha optado por intentar reversear la aplicación para esto se ha pasado el apk que
podemos encontrar en ((/data/app/org.telegram.messenger-2/base.apk)) por el programa APK TOOLS.
Esta nos ha dado un código fuente interpretado por la herramienta que nos ayuda a la hora de descifrar
los datos y ver como se tratan pero aun así es complicado para leer.
Tenemos la suerte de que podemos encontrar el código fuente de la aplicación de Telegram en Github
[16] ya que es de código libre y esta públicamente abierta. El código fuente de Telegram es de una calidad
bastante mala es muy lioso y muy difícil de leer pero con un poco de paciencia y habilidad para buscar
nos puede ayudar muchísimo para ver como se estructuran los datos, como se leen y como se guardan.
Las bases de datos de Telegram y de muchas otras aplicaciones de Android utilizan SQLite.[17]. Para
poder visualizar el contenido de una manera fácil y cómoda de los archivos .db de SQLite utilizaremos una
aplicación llamad DBrowser [18] que es la que hemos utilizado para ir navegando los datos para su estudio.
Luego estos datos son extraídos en nuestra programa mediante una librería de Python.Explorando las
bases de datos que encontramos la que mas información contiene es cache4.db. Al abrir la base de datos
nos encontraremos con un listado amplio de tablas 3.3. Dentro de cada una de estas tablas podemos
extraer información de gran valor de la que iremos mostrando las mas interesantes.
26 Capítulo 3. Descripción experimental
• Chats En esta tabla podemos encontrar los grupos de Telegram el nombre y la descripción se
encuentra con mas metadatos en el campo de data como un binario.
• enc_chats En esta tabla podemos encontrar los contactos que el usuario tiene agregados a la
agenda y están en Telegram con su nombre en texto claro y UID.
• media_v2 En esta tabla podemos encontrar los datos guardados y referencias de la ubicación o el
enlace de los mensaje de multimedia que se encuentran en binario en el campo data. También cabe
destacar el campo MID que es el message id el UID que es el UID de el usuario que lo envió date
que es la fecha en Epoch y type que nos indicara el tipo de mensaje enviado.
3.5 Extracción de artefactos en Telegram Messenger 27
• user_contacts_v7 En esta tabla podemos encontrar los nombres sacados de la lista de contactos
de el dispositivo con una UID asociada.
• user_phones_v7 En esta tabla podemos encontrar los teléfonos sacados de la lista de contactos de
el dispositivo y destacar que se puede ver que números ya no están en la agenda y fueron eliminados.
• users En esta tabla podemos encontrar todos los usuarios de Telegram que tiene el usuario, tanto
usuarios de su lista de contactos como los usuarios de los grupos que no tiene en su lista de contactos.
28 Capítulo 3. Descripción experimental
• messages En esta tabla podemos encontrar todos los mensajes enviados desde los usuarios con su
UID que nos hará referencia de que grupo viene, el texto en binario con otros meta datos y el id de
el mensaje MID. Algunos datos que podemos interpretar son los siguientes.
• media_v2 En esta tabla podemos encontrar los mensajes media que se han enviado y recibido
3.5 Extracción de artefactos en Telegram Messenger 29
• sent_files_v2 En esta tabla podemos encontrar los archivos enviados y su ubicación en la memoria
interna.
Podemos ver que cada uno de las tablas necesita de otras para poder completar los datos por
lo tanto es necesario hacer relaciones entre ellas para poder sacar información con sentido. En el
siguiente apartado se hace demostración de esto haciendo querys a la base de datos.
Podemos sacar un listado de todos los usuarios tanto los agregados por el usuario de el dispositivo como
los agregados por los grupos de chats utilizando la siguiente query
SELECT ∗ FROM u s e r s
Para ver los contactos que tiene en Telegram y son conocidos por el usuario es decir que los tiene en
la agenda y no son de un grupo debemos de ver los usuarios que coinciden con la UID en la tabla de
contactos
Podemos ver los contactos bloqueados como hemos visto previamente hay una tabla llamada bloc-
ked_users si en esta tabla aparece el UID de un contacto o usuario podemos ver los contactos que
han sido bloqueados por el usuario u podemos sacar el nombre e información de estos contactos.
Si queremos sacar todos los datos de un usuario específico sabiendo su uid podemos hacer la siguiente
querys
Telegram permite crear y utilizar BOTS en grupos de chats estas pueden ser para obtener noticias avisos
y notificaciones de una manera automatizada. Cuando una de estas se agrega se almacenan en la tabla
bot_info Podemos sacar un listado de los bots con la siguiente query
Las bases de datos sqlite para mejorar el rendimiento hacen uso de un sistema llamado WriteAheadLog
el la que se van almacenando las acciones a la base de datos temporalmente. En el caso de telegram para
la base de datos cache4.db el archivo de esta es cache4.db-wal. De aquí podemos ir sacando mensajes
borrados o de chat secreto que se van almacenando en este archivo [19]. Tirando el comando
s t r i n g s c a c h e 4 . db−wal | g r e p m e n s a j e b o r r a d o
Podemos observar que el mensaje que habíamos creado y borrado lo podemos encontrar en este archivo
mucho después de haberse borrado. iddqd
Figura 3.16: Comparacion cache4.db con cache4.db-wal vemos el mensaje de chat secreto
3.5 Extracción de artefactos en Telegram Messenger 31
Si sacamos solo el texto de estos datos tendremos los mensajes pero no sabemos a quien van dirigidos
ni quien los ha enviado, si pertenece a un grupo, tipo de mensaje o cuando se ha enviado. Vemos que en
los datos almacenados en la base de datos hay mas información binaria antes de el texto de el mensaje.
Estos datos binarios nos interesa sacar para poder reconstruir el mensaje y decodificar y poder dar sentido
a los mensajes. Viendo un ejemplo de mensaje lo podemos encontrar en el siguiente formato.
Como podemos observar entre varios caracteres raros encontramos el texto claro del mensaje esto nos
dice que no sólo contiene el mensaje de texto si no que hay mas meta datos antes de el mensaje y después
de el mensaje.
Tenemos la suerte de que el código fuente de Telegram está en GitHub para poder descifrar el contenido
[20].
Analizando el código nos damos cuenta de que los datos están serializados esto quiere decir que los
datos están uno detrás de otro observando varios mensajes de la base de datos podemos ver que cada
dato está categorizada con una cabecera de 32 bits que va cambiando dependiendo de el tipo de mensaje.
Vemos que se van haciendo lecturas de 32 en 32 bit por lo tanto observemos los primero 32 bit de él data
32 Capítulo 3. Descripción experimental
Observando varios mensajes parece ser que los primeros 32 bit son cabeceras para identificar el tipo
de mensaje ya que en todos se repiten. En el ejemplo anterior haciendo varias búsquedas de el código
3db4f94 en el código fuente de Telegram no aparece nada por lo tanto me da la pista de que puede estar
en little endian.
Viendo la cabecera de 32bit “Esta está codificada en little endian” y lo podemos colocar como
Este código pertenece la categoría “TL message” y es interpretado en el archivo TLRPC.java dentro
de el código fuente de la aplicación de Telegram [21]. Aquí ya podemos identificar el tipo de mensaje y
podemos ver cómo se decodifica el stream para poder extraer los datos que queremos
Después de la cabecera se encuentran otros 32 bit que son flags. Por cada flag se van leyendo distintos
datos y se va actuando sobre ellos. Los flags que se han identificado en el caso de el TL_Message son los
siguientes
• out
• mentioned
• media
• unread
• silent
• post
• from_id
• fwd_from
• via_bot_id
• replay_to_msg_id
• media, replay_markup
• magic
• views
• edit_date
• post_author
• grouped_id
3.5 Extracción de artefactos en Telegram Messenger 33
Cada flag se activa en una posición distinta de el número binario de 32 bits, pueden estar varias flags
activadas a la vez por lo que revisamos cada una de ellas si una está activa deberemos leer los datos que
nos pide el flag y decodificarlos
Esto hace que el tamaño de el mensaje varía dependiendo de si unos flags están activos o no, por lo
tanto complica la extracción ya que no están en una posición fija.
Con los flags vamos viendo que bit está a 1 y podemos ver que acción tomar Tomando el ejemplo
puesto anteriormente tenemos como flags 0x02030000 en little endian es
En este caso vemos que las acciones que Telegram toma para este mensaje son las siguientes
f l a g 512 i f ( ( f l a g s & 5 1 2 ) != 0 ) {
media = MessageMedia . T L d e s
f l a g 256 i f ( ( f l a g s & 2 5 6 ) != 0 ) {
from_id = stream . r e a d I n t 3 2 ( e x c e p t i o n ) ;
vemos que hemos sido mencionados tiene un stream de texto y es un mensaje saliente.
34 Capítulo 3. Descripción experimental
3.5.10 Ejemplos
Ejemplo1:
El mensaje grupo Cátedra es de Carlos Catedra pone “Este esta vacilando Nico” 2 abril 10:47 Admi-
nistrador
Ejemplo2:
Enviado por mi a Junquera “No entiendo por que va guardando de izq a derecho de cada valor”
Se puede observar que dependiendo de el flag que se active hace distintas cosas. En el ejemplo anterior
vemos como el flag de la posición 256 activa otra lectura de 32 bits de la trama de datos.
36 Capítulo 3. Descripción experimental
Ejemplo3:
Mensaje de Grupo enviado por Enrique “Pues sì que hay contactos lejanos en la cátedra”
En un TL_message entre los flags encontramos el mensaje en texto claro. Este está siempre en una
posición distinta dependiendo de los flags anteriormente activas. Esta tampoco tiene un tamaño fijo por
lo que tenemos que ver donde comienza y dónde termina.
El flag de media es el que nos variara la interpretación de el mensaje si el flag de media está activo
tendrá más meta datos en el caso de que no esté activo el flag de media es un mensaje de texto normal.
Utilizando la herramienta online de ascii to hex de la siguiente pagina web [22] podemos observar que
0x4e6f es la palabra “No” vemos que tiene datos delante en el mensaje puede ser un posible indicador de
tamaño de el string, en el resto de mensajes no vemos ningún carácter que indique fin de mensaje que
nos coincida en el resto de mensajes.
Buscando en la base de datos los primeros 32 bits pasado a little endian y luego a decimal vemos que
coincide con la UID de el grupo de chat de Telegram que nos ha enviado el mensaje por lo tanto podemos
utilizar esta para saber a que grupo pertenece el mensaje y la uid de la base de datos nos indica quien lo
ha escrito.
El ultimo valor que nos queda por descifrar es el marcado en verde en la figura. Este coincide con el
valor de tiempo EPOCH que también esta en little endian. 0xd333d25a ->0x5ad233d3 ->1523725267
https://www.epochconverter.com/
Este valor pertenece a el tiempo en el que el mensaje se ha escrito. El resto de datos son de menos
importancia por lo que no vale la pena descifrar ya que no nos aportan nada de información de interés.
Por lo tanto con esto ya podemos reconstruir los mensajes para poder visualizarlos cronológicamente,
podemos saber quien lo ha escrito, conocemos el mensaje, con los UID podemos sacar el grupo al que
pertenece sabemos de que tipo son y si son enviados o recibidos y otros datos que nos proporcionan los
flags. Estos datos combinados con los que podemos sacar en la propia base de datos nos dará suficiente
para una reconstrucción de los mensajes.
Capítulo 4
Resultados
En este apartado mostraremos como a partir de el estudio y la metodología que hemos utilizado podemos
llegar a crear una herramienta especifica para la aplicación de Telegram, luego se mostrara unos ejemplos
de como se podrá sacar información visualizando los datos con nuestra herramienta.
Con toda la información anterior somos capaces ahora de construir una herramienta para poder extraer
los datos de una forma automatizada. Para el desarrollo de este programa se ha optado por el lenguaje
de programación Python. Esta aplicación cuenta con distintas partes que veremos en detalle
Esto es una opción que es opcional ya que si se ha obtenido los datos de otra forma también se podrán
cargar. Para conseguir los datos utilizamos ADB que pondrá el móvil en modo fastboot y cargara una
Custom Recovery en RAM por la cual extraemos los datos de la aplicación. Para esto necesitaremos tener
la ISO de el Custom Recovery Corespondiente a nuestro dispositivo en la carpeta de TOOLS/TWRP
def extractApp():
hackerPrint("[-] Extracting telegram app data from phone\n", "GOOD", True)
os.system("""./Tools/platform-tools/adb reboot bootloader""")
time.sleep(20)
os.system("""./Tools/platform-tools/fastboot boot ./Tools/TWRP/twrp.img""")
time.sleep(20)
os.system(’’’./Tools/platform-tools/adb pull /data/data/org.telegram.messenger/files/
cache4.db dump’’’)
hackerPrint("[-] DONE!\n", "GOOD", True)
Con los datos que se han extraído de el dispositivo con nuestro programa nos conectamos a la base de
datos cache4.db. Aquí hacemos la adquisición de los datos que se pueden extraer directamente de la base
42 Capítulo 4. Resultados
de datos con las querys de SQL. Esta no nos crea gran complicación ya que es simplemente relacionar los
datos de la base de datos y mostrarlos por pantalla.
Los mensajes guardados en Telegram están serializados como se ha explicado en el capitulo anterior. A
la hora de decodificar los mensajes de los chats se hará un puntero que ira recorriendo los datos de el
mensaje. Esta leerá el tipo de los primeros 32 bits y los flags que encontramos en los siguientes 32 bits
de la trama.
Cada flag esta en una posición determinada que hemos podido sacar de el código fuente de Telegram.
A partir de aquí iremos actuando haciendo caso a los flags que están activos de los que se han leído. En
el caso de los de tipo TL_message hay unos flags que indicaran el tipo de mensaje y sus características
por cada flag guardaremos estos datos. Estos flags son:
4.1 Desarrollo de la Herramienta 43
out: Este flag indica que es un mensaje saliente nuestro mentioned: Este flag indica que hemos sido
mencionados en el mensaje media Unread: Esta flag indica que no se ha leído silent: Este flag indica que
es un mensaje sin notificación post: Este flag indica que es un post
El resto de flags activara distintas lectura de datos que las iremos guardando en sus variable corres-
pondiente a la vez moviendo el puntero por cada lectura.
trama = message[tramacursor:tramacursor + 4]
tramacursor = tramacursor + 4
ids = struct.unpack(’<i’, trama)[0]
...
...
# print(hex(flags & 2048))
if (flags & 32768) is not 0x0:
flagsActive.append("edit_date")
tramacursor = tramacursor + 4
En el caso de la trama de datos de los mensajes de texto tendremos que ver también el Timestamp, el
from_UID, el tamaño de el texto incluyendo el texto. Para esto vamos moviendo el puntero acorde con
los datos de tamaños que vamos recibiendo ya que si aquí fallamos el resto de datos estarán descuadrados.
44 Capítulo 4. Resultados
trama = message[tramacursor:tramacursor + 4]
tramacursor = tramacursor + 4
date = struct.unpack(’<I’, trama)[0]
trama = message[tramacursor:tramacursor + 4]
tramacursor = tramacursor + 4
#tramaMsg = binascii.hexlify(trama)
fromuid = struct.unpack(’<i’, trama)[0]
c.execute(’SELECT name FROM chats WHERE uid= %s’ % fromuid)
chatsstream = c.fetchall()
for rowss in chatsstream:
usernameChats = rowss[0]
c.execute(’SELECT name FROM users WHERE uid= %s’ % fromuid)
chatsstream = c.fetchall()
# conn.commit()
for rowss in chatsstream:
usernameUsers = rowss[0]
trama = message[tramacursor:tramacursor + 4]
tramacursor = tramacursor + 4
timestamp = struct.unpack(’<i’, trama)[0]
trama = message[tramacursor:tramacursor + 1]
tramacursor = tramacursor + 1
bytes = struct.unpack(’<b’, trama)[0]
# bytes = int.from_bytes(trama[0:9], byteorder=’little’)
size = bytes
trama = message[tramacursor:tramacursor + bytes]
tramacursor = tramacursor + bytes
messagetext = str(trama)
Los datos los almacenaremos en Elastic Search Elasticsearch puede ser usado para buscar todo tipo de
documentos. La búsqueda es escalable y casi en tiempo real, soportando multi-tenencia y es perfecto para
la utilización que le vamos a dar.
Para poder usarlo necesitamos Java Runtime Environemnt Necesitamos descargar la aplicación de
Elastic Search /elasticsearch-6.2.4/bin$ ./elasticsearch con esto la ejecutamos y nos creara un servidor
en localhost:9200
Cada uno de los datos irán guardados con una categoría poder identificarlos Ejemplo:
interactuamos con la base de datos desde Python y almacenaremos todos los datos extraídos de la
aplicación de Telegram para que se pueda hacer búsquedas y análisis de los datos extraídos.
4.2 La Herramienta 45
Para poder facilitar la visualización de los datos utilizaremos Kibana Kibana es una herramienta open-
source perteneciente a Elastic, que nos permite visualizar y explorar datos que se encuentran indexados
en ElasticSearch.
/kibana-6.2.4-linux-x86_64/bin$ ./kibana Para instalar Kibana nos descargamos los archivo y eje-
cutamos el servidor una vez ejecutado la de ElasticSearch. Esto nos abrirá un servidor en la siguiente
dirección http://localhost:5601
4.2 La Herramienta
Aquí ya tenemos la herramienta completada por lo que podemos ya visualizar los datos de Telegram.
En este programa tenemos varias opciones en la que vamos extrayendo los datos que se han comentado
anteriormente. A continuación podemos ver que todo el trabajo anterior ha servido para poder obtener
la información que antes era ilegible a algo que podemos utilizar para un análisis forense
Como se ha mencionado anteriormente podemos extraer todos los datos que están directamente en la
aplicación. Aquí tenemos una extracción de los contactos que están agregados por el propio usuario desde
su lista e contactos.
Podemos observar que tenemos los mensajes con su tiempo y q quien van dirigido, incluso podemos
ver el nombre de el grupo al que esta asignado. Toda esta información nos servirá para poder reconstruir
los chats en un análisis Forense de este dispositivo y poder sacar la conversación íntegramente.
4.3 Extracción de datos directos 47
Podemos observar que tenemos un listado completo de todos los usuarios que tiene registrado el
dispositivo en la aplicación Android y no solo los que están guardados en la agenda y podemos ver los
bots registrados con su descripción.
El fin de este trabajo no es la explicación de la interpretación de los datos pero si es importante que lo
mencionemos para tener una idea de el potencial que nos puede dar una herramienta que nos permita
colocar los datos de manera que podamos visualizarlos y relacionarlos de otras formas. Como hemos
mostrado anteriormente tenemos los datos directos los mensajes los contactos pero a partir de estos datos
podemos sacar mucha mas información y que puede ser de igual o mas importancia que los anteriores.
En nuestra herramienta almacenamos todos los datos que extraemos con una base de datos Elastic-
Search. Esto nos permitirá utilizar el Plugin de Kibana para poder hacer búsquedas y visualizaciones
sencillas que nos proporcionaran inteligencia apartar de estos datos.
Una vez que tenemos los datos en la base de datos podremos buscar todos los mensajes que pertenecen
a un mismo usuario.
4.4 Visualización de datos e interpretación 49
En esta caso buscamos el usuario nicotrial en la que podemos ver que tiene un total de 11,058 mensajes
Podemos visualizar la cantidad de mensajes y la utilización que ha hecho este usuario en la vida entera
de la aplicación.
50 Capítulo 4. Resultados
Si dividimos en mensajes por día de semana podemos ver el patrón de uso de este usuario podemos
sacar conclusiones de que los fines de semana y por la mañana no suele tener disponibilidad para hablar
puede indicar su horario de trabajo o alguna actividad esto puede que sea un dato de gran importancia
en un caso.
Aquí podemos visualizar el uso que le da a la aplicación durante el día. Indirectamente de aquí se
podría sacar información sobre la ubicación de esta persona viendo el horario en el que no hay actividad
y en el que si ya que indica que es de noche y esta durmiendo.
4.4 Visualización de datos e interpretación 51
En esta figura podemos visualizar los contactos y los grupos con los que mas interactúa el usuario
Figura 4.11: Contactos y los grupos con los que mas interactúa el usuario
Capítulo 5
5.1 Conclusión
Podemos ver que con esta ejemplo se puede sacar una metodología siguiendo estos pasos adaptados a
cada situación y se puede realizar una herramienta para la extracción de datos de los dispositivos móvil de
Android y que puede ser de gran utilidad para un análisis Forense. Hay millones de dispositivos distintos
y de aplicaciones y con el tiempo estas van cambiando por lo que no se puede depender de que exista
una sola herramienta que lo pueda hacer todo así que es importante tener estos conocimientos y estas
habilidades para poder crear tus propias herramientas en un Analisis forense.
Esta trabajo ha servido como demostración para crear una herramienta que a día de hoy es inexistente
y que sirve para el apoyo en un Análisis Forense móvil. La aplicación de Telegram es un aplicación muy
compleja en la que cuenta con mas de un millón de lineas de código. Con este ejemplo apenas se a
abordado un 1 % de lo que es podría extraer con un análisis en profundidad y con un tiempo menos
limitado.
Uno de los trabajos futuro seria hacer un análisis de la aplicación de Telegram con mas profundidad
para poder interpretar los cientos de datos que aun han quedado como desconocidos y poder utilizar estos
datos para ver si se puede sacar mas información.
Otro trabajo futuro seria hacer esta metodología estandarizada que fuera aplicable en cualquier apli-
cación y en la que se abarquen todas los posibles caminos que se puedan a llegar a tomar para poder
hacer una extracción de datos de una aplicación o dispositivo en un análisis forense de la manera mas
efectiva posible.
Bibliografía
Manual de usuario
A.1 Instalación
• Instalar Python3
• Instalar ElasticSearch
• Instalar Kibana
A.2 Utilizacion
python teleparser.py -h
Abrira ayuda con todas las opciones disponibles
-h, --help show this help message and exit
-f PATH Path of db file
-e Autoextract Telegram app from phone
-ec Show Telegram Contacts
-eu Show Telegram Users
-eb Show Telegram Bots
-eblk Show Telegram Blocked Users
-em Show Telegram Messages
-eme Extract Telegram Messages to Elastic
-b Do not show Banner
Para esto hay que poner el dispositivo móvil en modo debug y luego enchufar por un cable usb al
ordenador.
58 Apéndice A. Manual de usuario
Antes de nada descargar en TWRP.me la versión de recovery para tu dispositivo y poner en la carpeta
de ./TOOLS/TWRP
Ejecutar python teleparse.py -e
Esto el dispositivo se reiniciara solo y nos devolverá la base de datos cache4.db
A partir de aquí podemos extraer la información con las opciones
Con esta podremos visualizar los datos desde Kibana en la dirección http://localhost:5601
Herramientas y recursos
• Ordenador portátil
• Plataforma ShareLATEX[26]
Figura C.6: Contactos y los grupos con los que mas interactúa el usuario
Fragmentos de código
def extractApp():
hackerPrint("[-] Extracting telegram app data from phone\n", "GOOD", True)
os.system("""./Tools/platform-tools/adb reboot bootloader""")
time.sleep(20)
os.system("""./Tools/platform-tools/fastboot boot ./Tools/TWRP/twrp.img""")
time.sleep(20)
os.system(’’’./Tools/platform-tools/adb pull /data/data/org.telegram.messenger/files/
cache4.db dump’’’)
hackerPrint("[-] DONE!\n", "GOOD", True)
def loadFile(file):
print("loading file " + file)
try:
conn = sqlite3.connect(file)
c = conn.cursor()
print("OK")
except Exception as e:
raise e
return c, conn
68 Apéndice D. Fragmentos de código
#
trama = message[tramacursor:tramacursor + 4]
tramacursor = tramacursor + 4
ids = struct.unpack(’<i’, trama)[0]
trama = message[tramacursor:tramacursor + 4]
tramacursor = tramacursor + 4
date = struct.unpack(’<I’, trama)[0]
71
trama = message[tramacursor:tramacursor + 4]
tramacursor = tramacursor + 4
#tramaMsg = binascii.hexlify(trama)
fromuid = struct.unpack(’<i’, trama)[0]
c.execute(’SELECT name FROM chats WHERE uid= %s’ % fromuid)
chatsstream = c.fetchall()
for rowss in chatsstream:
usernameChats = rowss[0]
c.execute(’SELECT name FROM users WHERE uid= %s’ % fromuid)
chatsstream = c.fetchall()
# conn.commit()
for rowss in chatsstream:
usernameUsers = rowss[0]
trama = message[tramacursor:tramacursor + 4]
tramacursor = tramacursor + 4
timestamp = struct.unpack(’<i’, trama)[0]
trama = message[tramacursor:tramacursor + 1]
tramacursor = tramacursor + 1
bytes = struct.unpack(’<b’, trama)[0]
# bytes = int.from_bytes(trama[0:9], byteorder=’little’)
size = bytes
trama = message[tramacursor:tramacursor + bytes]
tramacursor = tramacursor + bytes
messagetext = str(trama)
Universidad
de Alcalá