Чи можу я отримати доступ до імен контактів у chat.db?


3

Я розігрувався з chat.dbфайлом, Library/Messagesщоб подивитися на мої повідомлення з точки зору sql. Мені цікаво, чи можна побачити імена контактів у цьому db, конкретно якось приєднавшись до messageстолу. Моя роздумка не була корисною, і не гугла.

Будь-яке розуміння оцінено!


1
Був сторонній додаток, призначений для легкого та ефективного перегляду всіх ваших журналів iChat / Messages.app. Але я не можу його знайти. Здається, це просто те, що вам потрібно.
l008com

Дякую @ l008com! Це має відношення до звучання, я б хотів отримати доступ до них на самому місці. Як ви вважаєте, це краще питання для переповнення стека?
Пітер Долан

Відповіді:


5

Ви можете приєднати таблицю обробки до таблиці повідомлень.

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

Однак це лише номер телефону або електронна адреса Apple ID. Це пов’язано з тим, що chat.db не зберігає імена контактів - це підшукується під час повідомлення Messenger.

Ви можете приєднати до бази адресних книг і виконати запит, що з'єднує таблиці з двох баз даних, щоб отримати необхідну інформацію.

  1. Почніть сеанс sqlite3. Відкрийте термінал і запустіть

    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. Визначте, яку базу даних контактів використовувати. Контакти можуть надходити з різних джерел. У моєму випадку всі мої контакти знаходяться на iCloud, тому легко вибрати найбільшу базу даних. Йти до

    ~/Library/Application Support/AddressBook/Sources
    

    і знайдіть папку з найбільшим розміром або іншим чином перегляньте папку Метадані кожної папки за допомогою QuickLook для пошуку контактів у базі даних.

    Папка джерел Finder

  3. Знайшовши папку в Джерелах, що містять бажані контакти, знайдіть шлях до бази даних. Клацніть правою кнопкою миші AddressBook-v22.abcddbв папці з контактами, утримуйте клавішу select та виберіть "Копіювати" AddressBook-v22.abcddb "як Pathname".

  4. У Терміналі в sqlite3 запустіть наступне:

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

    Замініть "yourusername" у першій команді та вставте шлях, який ви скопіювали у другій.

  5. Запустіть цей SQL. Скопіюйте та вставте всі ці рядки в.

    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;
    

    Зауважте, що цей SQL містить деякі магічні числа.

    • substr(handle.id, 4) припускає, що номери телефонів з Повідомлень починаються з коду країни у форматі плюс, а потім 2 цифри.
    • substr(replace(…), 2) передбачає, що номери телефонів у Контакти починаються з 0.

    Це стандартний міжнародний формат. Це потрібно буде скоригувати для США.

  6. Ви повинні отримати вихід, що нагадує:

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

Велике спасибі @grgarside Чи є спосіб, який ви знаєте, як зробити цей on-the-flyпошук? Я думаю, я міг би скласти новий стіл, але це здається досить важким. Чи є щось із існуючих у телефоні стільників контактів?
Пітер Долан

@Peter На даний момент я не вдома за своїм комп’ютером, а потім перегляну його ще пізніше, але просто для того, щоб додати ще якусь інформацію: під назвою "під час руху" я маю на увазі, що повідомлення не зберігає інформації про самі контакти ніде в чаті .db, натомість він шукає цю інформацію через додаток "Контакти" (рамки), і ці API роблять все необхідне для отримання інформації, будь то з бази даних, як chat.db, але для контактів чи чогось іншого, я не знаю, я розберуся. Ось чому, коли ваш iPhone або Mac вийшли з системи, ім'я контакту не заповнюється повідомленнями про повідомлення.
гр

Ах, цікаво. Вдячний за всю допомогу! Не виходьте занадто сильно у дорогу, але будь-яке розуміння буде дуже вдячне :) Цікаво про вихід. Ще раз дякую, дайте мені знати, що ви знайдете!
Пітер Долан

@Peter Кілька годин цікавих досліджень за допомогою деяких баз даних приводять мене до редагування, який я зробив на свою відповідь, дайте мені знати, як це відбувається!
гр

Нічого собі, справді вище та далі на цю відповідь @grgarside. Ваша пристрасть і робота дуже цінуються! Дуже дякую!
Пітер Долан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.