Posso accedere ai nomi dei contatti in chat.db?

3

Ho giocato con il file chat.db in Library/Messages per guardare i miei messaggi da una prospettiva sql. Mi chiedo se è possibile vedere i nomi dei contatti in questo db, in particolare in qualche modo partecipare alla tabella message . La mia ricerca non è stata utile, e nessuno dei due ha googlato.

Qualsiasi opinione apprezzata!

    
posta Peter Dolan 04.04.2018 - 22:58
fonte

1 risposta

5

Puoi unire la tabella degli handle alla tabella dei messaggi.

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

Tuttavia,questoforniscesoloilnumeroditelefonool'indirizzoemaildell'IDApple.Ciòèdovutoalfattochechat.dbnonmemorizzainomideicontatti:questovienecercatoalvolodaMessaggi.

Puoiallegareildatabasedellarubricaedeseguireunaqueryunendoletabelledeiduedatabaseperottenereleinformazioninecessarie.

  1. Avviaunasessionesqlite3.ApriTerminaleedesegui

    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 quale database dei contatti utilizzare. I contatti possono provenire da più fonti. Nel mio caso, tutti i miei contatti sono su iCloud, quindi è facile scegliere il database più grande. Vai a

    ~/Library/Application Support/AddressBook/Sources
    

    e trova la cartella con la dimensione più grande, o altrimenti guarda attraverso la cartella Metadata di ogni cartella usando QuickLook per trovare i contatti all'interno del database.

  3. UnavoltatrovatalacartellainSorgenticontenentiicontattichedesideri,ottieniilpercorsodeldatabase.FaiclicdestrosuAddressBook-v22.abcddball'internodellacartellaconituoicontatti,tienipremuto⌥eseleziona"Copia" AddressBook-v22.abcddb "come Pathname".

  4. In Terminale in sqlite3, esegui quanto segue:

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

    Sostituisci "nomeutente" nel primo comando e incolla il percorso che hai copiato nel secondo.

  5. Esegui questo SQL. Copia e incolla tutte queste righe in.

    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;
    

    Si noti che questo SQL contiene alcuni numeri magici.

    • substr(handle.id, 4) presume i numeri di telefono da Messaggi iniziano con un codice paese nel formato di un segno più seguito da 2 cifre.
    • substr(replace(…), 2) presuppone che i numeri di telefono da Contatti inizi con uno 0.

    Questo è il formato internazionale standard. Questo dovrà essere modificato per gli Stati Uniti.

  6. Dovresti ottenere un risultato simile a:

    datetimestamp|+441234567890|First Last|Lorem ipsum dolor sit amet
    
risposta data 05.04.2018 - 09:59
fonte

Leggi altre domande sui tag