¿Puedo acceder a los nombres de contacto en chat.db?

1

He estado jugando con el archivo chat.db en Library/Messages para ver mis mensajes desde una perspectiva de SQL. Me pregunto si es posible ver los nombres de contacto en esta db, específicamente de alguna manera uniéndose a la tabla message . Mi búsqueda no ha sido útil, y tampoco lo ha hecho Google.

¡Se agradece cualquier información!

    
pregunta Peter Dolan 04.04.2018 - 22:58

1 respuesta

4

Puedes unir la tabla de manejadores a la tabla de mensajes.

select date, id, text
from message
left join handle
on message.handle_id = handle.ROWID

Sinembargo,estosoloproporcionaelnúmerodeteléfonooladireccióndecorreoelectrónicodeIDdeApple.Estosedebeaquechat.dbnoalmacenalosnombresdeloscontactos,losmensajeslobuscanalinstante

Puedeadjuntarlabasededatosdelalibretadedireccionesyrealizarunaconsultauniendotablasdelasdosbasesdedatosparaobtenerlainformaciónquenecesita.

  1. Iniciaunasesiónsqlite3.AbrelaTerminalycorre

    sqlite3
    SQLiteversion3.19.32017-06-2716:48:08Enter".help" for usage hints.
    Connected to a transient in-memory database.
    Use ".open FILENAME" to reopen on a persistent database.
    sqlite>
    
  2. Determina qué base de datos de Contactos usar. Los contactos pueden provenir de múltiples fuentes. En mi caso, todos mis contactos están en iCloud, por lo que es fácil elegir la base de datos más grande. Ir a

    ~/Library/Application Support/AddressBook/Sources
    

    y busque la carpeta con el tamaño más grande, o busque en la carpeta de Metadatos de cada carpeta usando QuickLook para encontrar contactos dentro de la base de datos.

  3. UnavezquehayaencontradolacarpetaenFuentesquecontienenloscontactosquedesea,obtengalarutaalabasededatos.HazclicderechoenAddressBook-v22.abcddbdentrodelacarpetacontuscontactos,manténpresionadoyselecciona"Copiar" AddressBook-v22.abcddb "como Pathname’.

  4. En la Terminal dentro de sqlite3, ejecute lo siguiente:

    attach "/Users/yourusername/Library/Messages/chat.db" as cdb;
    attach "<paste your path>" as adb;
    

    Reemplace ‘su nombre de usuario’ en el primer comando y pegue la ruta que copió en el segundo.

  5. Ejecuta este SQL. Copia y pega todas estas líneas en.

    select date, id, ZFIRSTNAME || ' ' || ZLASTNAME, text
    from cdb.message
    left join cdb.handle
    on message.handle_id = handle.ROWID
    left join adb.ZABCDPHONENUMBER
    on replace(substr(handle.id, 4), ' ', '')
    like '%' || substr(replace(ZABCDPHONENUMBER.ZFULLNUMBER, ' ', ''), 2)
    left join adb.ZABCDRECORD
    on ZABCDPHONENUMBER.ZOWNER = ZABCDRECORD.Z_PK;
    

    Tenga en cuenta que este SQL contiene algunos números mágicos.

    • substr(handle.id, 4) supone que los números de teléfono de los mensajes comienzan con un código de país en el formato de un signo más seguido de 2 dígitos.
    • substr(replace(…), 2) supone que los números de teléfono de los Contactos comienzan con un 0.

    Este es el formato internacional estándar. Esto tendrá que ser ajustado para EE. UU.

  6. Deberías obtener una salida que se parezca a:

    datetimestamp|+441234567890|First Last|Lorem ipsum dolor sit amet
    
respondido por el grg 05.04.2018 - 09:59

Lea otras preguntas en las etiquetas