4 votes

Puis-je accéder aux noms des contacts dans chat.db ?

Je me suis amusé avec le chat.db dans Library/Messages de regarder mes messages d'un point de vue SQL. Je me demande s'il est possible de voir les noms des contacts dans cette base de données, en particulier en rejoignant d'une manière ou d'une autre la base de données des contacts. message table. Mes recherches n'ont pas été utiles, pas plus que les recherches sur Google.

Tout commentaire sera apprécié !

10voto

grg Points 181593

Vous pouvez joindre la table des poignées à la table des messages.

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

Toutefois, cela ne fournit que le numéro de téléphone ou l'adresse électronique de l'Apple ID. Cela est dû au fait que chat.db ne stocke pas les noms des contacts - ceux-ci sont recherchés à la volée par Messages.

Vous pouvez joindre la base de données du carnet d'adresses et effectuer une requête joignant les tables des deux bases de données pour obtenir les informations dont vous avez besoin.

  1. Démarrer une session sqlite3. Ouvrez le Terminal et exécutez

    sqlite3
    
    SQLite version 3.19.3 2017-06-27 16:48:08
    Enter ".help" for usage hints.
    Connected to a transient in-memory database.
    Use ".open FILENAME" to reopen on a persistent database.
    sqlite>
  2. Déterminez la base de données des contacts à utiliser. Les contacts peuvent provenir de plusieurs sources. Dans mon cas, tous mes contacts sont sur iCloud, il est donc facile de choisir la plus grande base de données. Allez à

    ~/Library/Application Support/AddressBook/Sources

    et trouver le dossier ayant la plus grande taille, ou bien parcourir le dossier des métadonnées de chaque dossier en utilisant QuickLook pour trouver des contacts dans la base de données.

    Finder Sources folder

  3. Une fois que vous avez trouvé le dossier dans Sources contenant les contacts que vous souhaitez, obtenez le chemin d'accès à la base de données. Cliquez avec le bouton droit de la souris sur AddressBook-v22.abcddb dans le dossier contenant vos contacts, maintenez enfoncé et sélectionnez "Copier "AddressBook-v22.abcddb" comme nom de chemin".

  4. Dans le Terminal de sqlite3, exécutez ce qui suit :

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

    Remplacez 'yourusername' dans la première commande et collez le chemin que vous avez copié dans la seconde.

  5. Exécutez ce SQL. Copiez et collez toutes ces lignes.

    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;

    Notez que ce SQL contient quelques chiffres magiques.

    • substr(handle.id, 4) suppose que les numéros de téléphone de Messages commencent par un code de pays sous la forme d'un plus suivi de 2 chiffres.
    • substr(replace(…), 2) suppose que les numéros de téléphone des contacts commencent par un 0.

    Il s'agit du format international standard. Il devra être adapté pour les États-Unis.

  6. Vous devriez obtenir une sortie ressemblant à :

    datetimestamp|+441234567890|First Last|Lorem ipsum dolor sit amet

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X