¿Quién es Texting? El Sms.db iOS6

No pasó mucho tiempo desde el lanzamiento de iOS6 en 14/09/12 hasta que conseguí mi primer dispositivo iOS6 de proceso: 18 días. En este caso, se trataba de un iPhone4 con iOS6. En tan poco tiempo, no hay demasiadas herramientas que hay preparados para analizar el nuevo sistema operativo o de sus nuevos formatos de datos.

Por suerte para mí, el teléfono no estaba cerrada con llave comerciales o de código abierto. Para procesar el teléfono, en la que el interés primordial era mensajes de texto y contactos, he utilizado las últimas iTunes para crear una copia de seguridad del teléfono. Fortuna fue de nuevo a mi lado:. El teléfono no estaba preparado para las copias de seguridad cifradas

iTunes copia de seguridad

Si usted no está familiarizado con las copias de seguridad de iTunes, y luego permitir que me presente a en general. datos de copias de iTunes del usuario (los medios de comunicación, bases de datos, configuración, aplicaciones, etc) a un directorio en el sistema operativo. La ubicación del directorio varía según el sistema operativo y la versión. Dado que se trata fundamentalmente de una discusión sobre el nuevo Sms.db iOS6, voy a dejar que encuentre la ubicación usted mismo. Lo más importante a saber es esto:

  1. las copias de seguridad son planos : todos los archivos se descargan en un directorio y no se conservan en su árbol original . estructura
  2. los archivos se cambian de nombre :. los nombres de los archivos son valores SHA1 calculado a partir del dominio, la ruta y nombre de archivo del archivo original
La naturaleza de hash de resumen es que producen valores de longitud únicos, fijos basados ​​en los datos presentes en la estructura de datos que se está analizando. Esto significa que un archivo de 1 byte y un flujo de datos de 200 GB ambos producen un valor de hash SHA1 de 40 bytes. Esto también significa que los datos en los que se calculó el valor hash no se pueden ingeniería inversa a partir del valor solo. ¿Por qué acabo de afirmar todo esto? Ciertamente no encender otra controversia de hash por nada yo podría inexactitudes, pero en vez de señalar que en realidad no podemos conocer el nombre original del archivo, la ruta y dominio de los nombres de archivo de valor sha1 encuentran en la copia de seguridad. Claro, usted encontrará publicaciones que indican la Sms.db se cambia el nombre «3d0d7e5fb2ce288813306e4d4636395e047a3d28», pero no vas a encontrar un nombre de archivo para cada archivo en la copia de seguridad. Y usted no sabrá ningún metadatos sobre alguno de los archivos de copia de seguridad desde el valor hash, tampoco.

Ahora, Linux nos ayuda aquí. En la línea de comando, el comando file nos dirá el tipo de archivo de cada uno de los archivos de copia de seguridad, y la mayoría de los administradores de archivos de Linux se representará en miniatura para tipos de archivo conocidos. Esto significa que es bastante fácil de ver archivos multimedia e identificar las bases de datos con sólo abrir un explorador de archivos señaló en el directorio de copia de seguridad. Es bueno para fruta madura, pero ¿cómo diferenciar entre las bases de datos, por ejemplo? Búsqueda de palabra clave en un nombre de tabla, tal vez? Claro, eso podría reducir el campo, pero es un menor de solución perfecta.

Identificación de archivos en la copia de seguridad

Mantener el discusión general, saber una cosa más acerca de las copias de seguridad de iTunes antes de proceder con la discusión Sms.db: hay archivos de base de datos incluidos en la copia de seguridad que identifican los archivos de dominio, la ruta y nombre del archivo. De hecho, los metadatos de archivos de un momento de MAC, propietario, permisos, y el tamaño de tales archivos están incluidos en las bases de datos.

Ahora, las bases de datos han cambiado con cada evolución iOS – al menos desde iOS3 cuando empecé examinar las copias de seguridad de iTunes. Bueno, mejor dicho, me cambiaron con cada evolución excepto iOS6. iOS6 conserva el formato presentado en iOS5. Eso fue una vez más una suerte, porque da la casualidad de que yo programé una herramienta, basada en un guión python publicado en stackoverflow Publicado por Galloglass usuario, a la copia de seguridad de iTunes unback ‘basado en la información en el bases de datos de copia de seguridad. La herramienta iOS5-unback.py funciona muy bien en la copia de seguridad iOS6.

El Sms.db

Cuando el formato de copia de seguridad no cambió en iOS6, la Sms.db cambió notablemente. Compare, si se quiere, la parte del esquema de base de datos a lado con un sms.db. iOS5

iOS6 iOS5
Número de tablas: 10 8
Nombres de tablas: SqliteDatabaseProperties, mensaje, sqlite_sequence, chat, apego, Manilla, message_attachment_join, chat_handle_join, chat_message_join, sqlite_stat1 _SqliteDatabaseProperties, mensaje, sqlite_sequence, msg_group, group_member, msg_pieces, madrid_attachment, madrid_chat
Número de disparadores: 9 7
Disparador nombres: , update_message_roomname_cache_insert, delete_attachment_files , clean_orphaned_attachments, clean_orphaned_handles, clear_message_has_attachments, clean_orphaned_messages, update_message_roomname_cache_delete, clean_orphaned_handles2 insert_unread_message, mark_message_unread, mark_message_read, delete_message, insert_newest_message, delete_newest_message, delete_pieces
Número de índices: 16 18
Índice de nombres: sqlite_autoindex__SqliteDatabaseProperties_1, sqlite_autoindex_message_1, sqlite_autoindex_chat_1, sqlite_autoindex_attachment_1, sqlite_autoindex_handle_1, sqlite_autoindex_handle_2, sqlite_autoindex_message_attachment_join_1, sqlite_autoindex_chat_handle_join_1, sqlite_autoindex_chat_message_join_1, message_idx_is_read, message_idx_failed, message_idx_handle, chat_idx_identifier, chat_idx_room_name, message_idx_was_downgraded, chat_message_join_idx_message_id sqlite_autoindex__SqliteDatabaseProperties_1, madrid_attachment_message_index, madrid_attachment_guid_index, madrid_attachment_filename_index, madrid_chat_style_index, madrid_chat_state_index, madrid_chat_account_id_index, madrid_chat_chat_identifier_index, madrid_chat_service_name_index, madrid_chat_guid_index, madrid_chat_room_name_index, madrid_chat_account_login_index, message_group_index, message_flags_index, pieces_message_index, madrid_guid_index, madrid_roomname_service_index, madrid_handle_service_index

Para cualquiera que esté familiarizado con la estructura de base de datos Sms.db iOS5, el cambio más evidente en el Sms.db iOS6 es la falta de cuadros «Madrid». En iOS5, la aplicación iMessage fue introducido, y los mensajes de texto SMS y mensajes de texto iMessage se unificaron en el sms.db. Esto sigue siendo cierto en iOS6, pero se maneja de manera muy diferente, y por el «diferente», quiero decir «mejor».

Sellos de Tiempo

Al analizar la base de datos iOS5, era necesario convertir dos formatos de fecha diferentes: Unix tiempo época y Mac Tiempo Absoluto. Las fechas de los mensajes SMS enviados a través del operador de telefonía móvil se registraron en tiempo unix época en el campo de fecha de la tabla de mensajes. mensajes de iMessage, por otro lado, se registraron en Mac Tiempo absoluto en la misma mesa y de campo como la fecha de mensajes SMS!

¿Cuál es la diferencia entre Unix época y Mac Tiempo Absoluto? Exactamente 978307200 segundos. Época Unix comienza el 01/01/1970, mientras que Mac El tiempo absoluto comienza el 01/01/2001. Consultas SQLite que integran los textos SMS y IMessage tenían que dar cuenta de estas diferencias. Algunos examinadores con herramientas automatizadas para analizar el Sms.db probablemente felizmente ignorante de este tema, pero salieron de ninguno de los de menos. Pero presenta desafíos a los de uso extraer datos de la base de datos con el programa de línea de comandos de SQLite o un navegador GUI SQLite.

El Sms.db iOS6 simplifica la edición actualizada. Todo mensaje de texto data, ya sea SMS o iMessage se registran en tiempo Mac Absoluto. La función de fecha y hora en SQLite se puede utilizar para convertir ese momento mediante la adición de 978307200 segundos para los datos de fecha. Esto convierte el tiempo de unix época que es uno de los ‘modificadores’ la función de fecha y hora se codificó para manejar (Mac Tiempo Absoluto no es un modificador de fecha y hora válido):

sqlite> seleccione datetime (370884516 + 978307200, ‘unixepoch’);
datetime (370884516 + 978307200, ‘unixepoch ‘)
2012-10-02 22:28:36

Mientras que en el tema de las marcas de tiempo, dos marcas de tiempo adicionales son posibles en cada registro: date_read y Courier New, Courier, monospace;»> date_delivered . En la versión de iOS5, la «dirección» fue el número de teléfono del contacto remoto de la conversación de texto. El campo de dirección ha sido sustituido por el Courier New, Courier, monospace;»> handle_id handle_id corresponde al style=»font-family: Courier New, Courier, monospace;»> ROWID manejar tabla, que contiene el número de teléfono del contacto en el id

Banderas

voy a mencionar rápidamente un par de otros cambios. En las versiones anteriores de la Sms.db, campos como y leer fueron utilizados para marcar el tipo (enviado, recibido, etc) y el estado (leído, no leído, etc) de el mensaje. Existen nuevas áreas para estos atributos incluidos is_from_me, is_empty, is_delayed, is_auto_reply, is_prepared, is_read, is_system_message, is_sent. Los valores 0 y 1 son utilizados como «no» y «sí», respectivamente, en la interpretación de estos campos.

He mencionado antes que el servicio que se utiliza para transmitir el texto, SMS o iMessage, dio lugar a diferentes Tipo de marca de tiempo. También dio lugar a diferentes campos que se están pobladas en la tabla de mensajes. En iOS6, los mensajes comparten las mismas banderas, independientemente del servicio que se utiliza para enviarlos. El servicio utilizado es registrada en el nuevo servicio style=»font-family: Courier New, Courier, de la tabla de mensajes.

Uniendo todas las piezas

No he venido a acercarse a la descripción de todos los datos en la nueva tabla Sms.db, ni cómo relacioné todas las mesas. Yo sólo la intención de alertar a los investigadores que hay diferencias en la nueva base de datos que deben ser considerados.

Dicho esto, sería negligente si no le proporcionamos una consulta de ejemplo para producir una básica lista de chat. La siguiente consulta genera una lista con varios campos importantes ( ROWID, Fecha, Número de teléfono, servicio | Tipo | Fecha de lectura / Enviados | Texto):

SELECT m.rowid como ROWID, DATETIME (fecha + 978307200, ‘unixepoch’, ‘localtime’) como Date, h.id como» número de teléfono «, m.service como Servicio, is_from_me CASO CUANDO ENTONCES 0 «Recibido» CUANDO 1 ENTONCES ELSE END «Desconocido» «enviados» como Tipo, CASO CUANDO date_read> 0 ENTONCES DATETIME (date_read + 978307200, ‘unixepoch’) CUANDO date_delivered> 0 ENTONCES DATETIME (date_delivered + 978307200, ‘unixepoch’) ELSE NULL END como «Fecha de lectura / Enviado», el texto como texto de mensaje m, manejar h DONDE h.rowid = m.handle_id ORDER BY ASC m.rowid;


Voy a hacer que un poco más fácil de leer:

SELECT
m.rowid como ROWID,
DATETIME (fecha + 978307200, ‘unixepoch’, ‘localtime’) como Date,
h.id como» número de teléfono «, m.service como Servicio,
CASE is_from_me
0 ENTONCES CUANDO» Recibido «
; CUANDO 1 ENTONCES «Enviados»
ELSE «Desconocido»
END como Tipo,
CASE
CUANDO date_read> 0 entonces DATETIME (date_read + 978307200, ‘unixepoch’)
CUANDO date_delivered> 0 ENTONCES DATETIME (date_delivered + 978307200, ‘unixepoch’)
ELSE END NULL como «Fecha de lectura / Enviado»,
texto como texto
de mensaje m, manejar h
DONDE h.rowid = m.handle_id
ORDER BY ASC m.rowid;

Sus resultados, al importarse a una hoja de cálculo, debe ser similar a esto:

ROWID Fecha número de teléfono Servicio Tipo Fecha de lectura / Enviados texto
2484 2012-10-02 08:28:36 11231234567 iMessage Enviado 2012-10-02 08 : 28:39 Hey
2485 2012-10-02 08:45:17 11231234567 iMessage Sent 2012-10-02 08:46:11 Llámame cuando oigas esto sdnum=»1033;»
2486 2012-10-02 08:46:06 13217654321 SMS Recibido 2012-10-02 08:47:21 ¿Puedo pedir prestado algo de dinero?
2487 2012-10-02 08:47:10 1321765321 SMS Sent
No! Yo no tengo ninguna hembra.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *