iPhoneのバックアップデータを漁る方法
iPhoneのバックアップデータを漁る
iPhoneのデータをAndroid端末に移行するなど、様々なケースでiPhoneからデータを抽出したくなることがあります。 普通はiTunesを使ってデータを同期させてデータを抽出するのですが、同期させるとデータが消えることがあり、あまり同期したくありません。 そんな場合は同期せずにiPhoneのバックアップをiTunesでとり、PCに保存されたバックアップデータを漁ってデータを取り出すのも一つの方法です。 今回はiPhoneのバックアップデータを漁る方法について紹介します。
バックアップデータはどこにある?
まずはバックアップデータがどこにあるのか確認しましょう。
$HOME/Library/Application Support/MobileSync/Backup/
の下にハッシュ化されたディレクトリがあるので確認しましょう。
ディレクトリがたくさんあってわからない場合は、ディレクトリの作成日時の最新のものを探しましょう。
$ ls "$HOME/Library/Application Support/MobileSync/Backup/"
1b345454cbec76848e94c41ce0a2d6b7328973e9
私の環境では$HOME/Library/Application Support/MobileSync/Backup/1b345454cbec76848e94c41ce0a2d6b7328973e9
にバックアップデータがあります。
それではバックアップデータのあるディレクトリに移動してどんなファイルがあるか確認してみましょう。
$ cd "$HOME/Library/Application Support/MobileSync/Backup/1b345454cbec76848e94c41ce0a2d6b7328973e9"
$ ls
0000001db666a0b4c679276b401a13bc7ada287c
0012522986309dacda6c05e68fccb104fcbf4e41
....
なにやら大量に出てきますね。
ハッシュ化のルール
バックアップデータのディレクトリにあるファイル名はそれぞれハッシュ化されています。
ハッシュ化のルールは実は単純でsha1(domain名+'-'+パス)
となっています。
例えば、アドレス帳のデータはドメイン名HomeDomain
でLibrary/AddressBook/AddressBook.sqlitedb
に格納されていますが、この場合
$ ruby -r digest/sha1 -e 'puts Digest::SHA1.hexdigest("HomeDomain-Library/AddressBook/AddressBook.sqlitedb")'
31bb7ba8914766d4ba40d6dfb6113c8b614be442
と31bb7ba8914766d4ba40d6dfb6113c8b614be442
になっています。
実際、
$ file 31bb7ba8914766d4ba40d6dfb6113c8b614be442
31bb7ba8914766d4ba40d6dfb6113c8b614be442: SQLite 3.x database
とSQLite3のデータベースファイルになっていることがわかります。
アドレス帳のデータはこのファイルのABPerson
というテーブルに格納されているのでここから抽出できます。
次のような簡単なスクリプトで抽出できます。
{% gist 6608998 %}
backup_dir
の値を適当に環境に合わせて書き換えるとご自分の環境でも使えるでしょう。
あとはニーズに合わせて適当にコードを編集すればvCardに変換することもできます。
写真や動画に関数情報は、ドメイン名CameraRollDomain
、パスMedia/PhotoData/Photos.sqlite
のデータベースファイルに格納されているので、同様にして12b144c0bd44f2b3dffd9186d3f9c05b917cee25
から取り出すことができます。
以下、写真や動画を抽出する簡単なスクリプトの例です。 {% gist 6609106 %}
参考文献
- iOS6 Photo Streams: "Recover" Deleted Camera Roll Photos
- View/Export contacts from iPhone AddressBook.sqlitedb file
- Stealing iPhone Backups using Metasploit
- iTunes Backup
まとめ
今回はiPhoneのバックアップデータを漁る方法について解説しました。 この方法を知っていれば、バックアップデータさえあれば、データを取り出すことができます。
ご質問等、何かありましたらこちらへ。