The Apple Geek

Чему ты научился сегодня?

Как прочитать архив SMS из резервной копии iPhone в iTunes

Случайно наткнулся на статью ”How to Access and Read the iPhone SMS Text Message Backup Files”, рассказывающую, как прочитать архив SMS с iPhone из резервной копии, которую делает iTunes.

Сразу же замечу, что если вы параноидальны и не хотите, чтобы ваши SMS прочитали, то криптуйте свои бекапы (панель опций на закладке Summary вашего iPhone):

Бекапы iOS-устройств находятся в каталоге ~/Library/Application Support/MobileSync/Backup. Меня интересует список, отсортированный в порядке проведения бекапов, для этого использую “ls -lt”:

$ cd "~/Library/Application Support/MobileSync/Backup"$ ls -ltdrwxr-xr-x  6026 ctrld  staff  204884 Nov 12 16:34 09213b6660a22d13977258d480ced2a880ff8390drwxr-xr-x  5633 ctrld  staff  191522 Oct 19 23:07 09213b6660a22d13977258d480ced2a880ff8390-20101019-230647

Имя состоит из UDID устройства и времени формирования предыдущих копий.

Метод, приведённый в указанной выше статье не работает - файлы с расширением .mddata и .mdbackup в моём бекапе отсутствуют. Поэтому ищу почти наугад.

Первый способ - поиск по известному фрагменту текста

Я знаю, что мне приходил SMS из банка о снятии денег за программу из iTunes в пользу “ITUNES-USD”. Нахожу grep’ом файл, убеждаюсь, что это SQLite:

$ cd "~/Library/Application Support/MobileSync/Backup/"$ cd 09213b6660a22d13977258d480ced2a880ff8390$ grep ITUNES-USD *Binary file 3d0d7e5fb2ce288813306e4d4636395e047a3d28 matches$ file 3d0d7e5fb2ce288813306e4d4636395e047a3d283d0d7e5fb2ce288813306e4d4636395e047a3d28: SQLite 3.x database

Второй способ - поиск по структуре базы

Сделал скрипт 1.sh, который снимает схемы всех баз SQLite (в него нужно вставить ваши данные):

#!/bin/bashUDID=09213b6660a22d13977258d480ced2a880ff8390dir=~/Library/Application\ Support/MobileSync/Backup/$UDIDif [ -e "$dir" ]; then    echo "Time: $(date)"else    echo "Directory $dir does not exists"    exit ficd "${dir}"lst=$(file * | grep SQLite | awk -F : '{print $1}')for l in ${lst}; do    echo ${l}    echo ".schema" | sqlite3 ${l}doneecho "Time: $(date)"

Запускаю скрипт, записываю вывод в файл:

$ ./1.sh > 1.out

Ищу в результатах строку “CREATE TABLE message” - именно так определяется таблица с SMS. Нахожу нужный файл, у меня это 3d0d7e5fb2ce288813306e4d4636395e047a3d28.

Вывод данных

Копирую найденный файл в рабочий каталог

$ cp "~/Library/Application Support/MobileSync/Backup/09213b6660a22d13977258d480ced2a880ff8390/3d0d7e5fb2ce288813306e4d4636395e047a3d28" ~/sms.sqlite

Открываю, смотрю схему (несколько приёмов работы с SQLite я приводил в статье по Mail.app):

$ sqlite3 sms.sqlitesqlite> .schemaCREATE TABLE _SqliteDatabaseProperties (key TEXT, value TEXT, UNIQUE(key));CREATE TABLE group_member (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, group_id INTEGER, address TEXT, country TEXT);CREATE TABLE message (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, address TEXT, date INTEGER, text TEXT, flags INTEGER, replace INTEGER, svc_center TEXT, group_id INTEGER, association_id INTEGER, height INTEGER, UIFlags INTEGER, version INTEGER, subject TEXT, country TEXT, headers BLOB, recipients BLOB, read INTEGER);CREATE TABLE msg_group (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, type INTEGER, newest_message INTEGER, unread_count INTEGER, hash INTEGER);CREATE TABLE msg_pieces (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, message_id INTEGER, data BLOB, part_id INTEGER, preview_part INTEGER, content_type TEXT, height INTEGER, version INTEGER, flags INTEGER, content_id TEXT, content_loc TEXT, headers BLOB);...

Делаю выборку из messages:

sqlite> select * from message;...2925|10060|1289398514|Parol: 11111111 www.privat24.ua -- Modem naprokat za 0 grn. v mesyats. Zakagi na privat24.ua i plati za Internet 60 ili 80 grn.|2|0||481|0|0|0|0||ua|||0...

Данные видны, а уже с ними можно работать.

Если вы ищете клиент под Mac OS X, то не смотрите на RazorSQL - такого кроссплатформенного уродца (да ещё и небесплатного) я давненько не встречал. Посмотрите обсуждение на StackOverflow и сравнительную таблицу клиентов. Посоветовать ничего не могу, я их не смотрел, мне достаточно консоли.

Mac, iPhone

« Bonjour Browser Учёт персональных финансов. iFinance/Mac OS X »

Comments