Вилучення контактів з резервної копії iPhone

Опублікував Сергій Макаренко 28-01-2013 об 13:59

Якщо б люди були відповідальними і уважно відносились до питання створення резервних копій особистої інформації світ би був кращим. Не було б істерик, пов'язаних з втратою особистих даних, викликаних збоєм у роботі якоїсь програми, або операційної системи, виходу з ладу пристроя, на якому зберігалась втрачена інформація, тощо. Особисто я вже добре навчений життям в цьому плані. Працюючи в компанії «Київстар» я адміністрував кілька великих системи, що забезпечували роботу кол центра і можу вам сказати, що в цій роботі найжахливіше — це втрата даних користувачів. Тому бекапи робились постійно і я уважно слідкував за тим, щоб резервні копії робились регулярно і безперервно.

Цей досвід я переніс і у особисте життя. Резервні копії комп'ютерів, а з появою iPhone і даних, що на ньому зберігались, я робив регулярно і старанно. Винагородою за це, мабуть, було те, що свої контакти я ніколи не губив. Не важливо, що траплялось з пристроєм, або програмами, дані в решті решт можна було відновити, причому з мінімумом рухів. Але, як показує мій досвід на роботі, більшість людей кладуть на резервне копіювання відомо що. Тому у нас є робота. Найцінніше, за що піклуються люди це, звичайно, контакти в записнику iPhone. Другий тип інформації, який благають врятувати — це фотографії. Третій — це SMS повідомлення. Зараз я розповім, як маючи базові навички в PL/SQL програмувані і прямі руки самостійно витягнути контакти з резервної копії iPhone.

Уявімо, що сталося щось жахливе і у вас від вашого iPhone залишилась тільки резервна копія. Контакти конче потрібні, а розгорнути її на новий пристрій теж немає можливості, припустимо, через пошкодження структури бекапу. Таке іноді трапляється з резервними копіями пристроїв, на яких робили jailbreak. Задача номер один: вилучити контакти записної книги і інші дані, що для нас важливі. По-перше, для цього нам потрібен сам бекап. Знайти його можна в папці /Users/user_name/Library/Application Support/MobileSync/Backup/. Якщо в папці будуть резервні копії ви побачите папки такого виду, що зображено на малюнку.

Папки з резервними копіями

В середині папки буде кілька тисяч файлів різного розміру без розширень, з нечитабельними назвами і чотири конфігураційних файла, які містять дані про бекап. В файлі Info.plist містяться різноманітні дані про ваш пристрій: назва, номер телефону, GUID, IMEI, серійний номер, перелік встановлених програм, версію iOS тощо. Файл Status.plist містить, власне, статус, з яким закінчилось резервне копіювання. В бінарнику Manifest.mbdb зберігаються дані, завдяки яким при відновленні з резервної копії бекап з купи окремих файлів збирається у структуру системних файлів з даними користувача, які потім завантажуються на цільовий пристрій. Файл Manifest.plist містить інформацію що до переліку встановлених на пристрої програм. Для того, щоб з бекапом можна було працювати требо його «зібрати». Я, наприклад, для цього використовую програму iPhone Backup Extractor.

Вміст папки з резервною крпією

Після того, як бекап буде зібрано мандруємо по файли, що нам потрібні до теки iOS Files/Library. Тут знаходяться теки, подібні до таких, які в OS X, з даними користувача. Нас цікавить записна книга, тому шукаємо папку AddressBook. В ній нас цікавить файл AddressBook.sqlitedb Це звичайна SQLite база даних, в якій і зберігаються дані, що нам потрибни. Тут в нас є два варіанти. Перший — суворий і по справжньому гіківський. Ми можемо для вилучення даних скористуватися терміналом і через командну строку за допомогою консольної утілити sqlite3 (man sqlite3 вам в поміч) та інструкції по роботі з SQLite вилучити інформацію, що нам потрібна.

Другий варіант, більш цивілізований. Замість консолі ми можемо скористуватись однією з численних програм для роботи з SQLite базами даних. Це може бути, наприклад, Base за $28.99, SQLite Professional за $8.99, SQLiteManager за $49, Navicat Essentials for SQLite за $9.99, безкоштовні SQLite Database Browser, SqliteQuery і SQLite Database Browser 1.3 / 2.0 Beta 1 або SQLite Inspector за $8.99. Потім підключаємось до файлу бази даних записника на iPhone і виконуємо PL/SQL запит зразка, що наведено нижче.

select
    ABPerson.first as "Name",
    ABPerson.last as "Surname",
    ABMultiValue.value as "Phone number"
from ABPerson, ABMultiValue
    where ABMultiValue.record_id=ABPerson.ROWID;

Коротко поясню вміст скрипта. В базі даних записної книги iOS є дві табилці: ABPerson та ABMultiValue. В першій містяться ім'я та прізвища контактів, в другій — номера телефонів, мейли тощо. Для того, що б зв'язати імена та номери телефонів ми використовуємо ключі record_id в ABMultiValue та ROWID в ABPerson, які співпадають. На виході маємо інформацію, яка нам потрібна. Уважно вивчивши структуру бази даних, розібравшись з таблицями і їх вмістом можна допиляти скипт і змусити його виводити додатково купу інформації по контактам, що вас цікавлять. А якщо ще трохи розвинути свої знання PL/SQL і підключити файл SMS.db, який знаходиться в папці iOS Files/Library/SMS можна зв'язати адресатів в записній книзі з текстами повідомлень і отримати історію SMS або iMessage чатів з вашими контактами.

Сподіваюсь, що ця інформація стане вам у пригоді, і ви, при потребі, зможете врятувати дані, що вам потрібні. А якщо у вас немає до цього хисту, або бажання приходьте в наш сервісний центр по ремонту iPhone та iPad «Computers Art». Ми залюбки все зробимо і надамо інформацію у зручному для вас виді.