ゆったりWeb手帳

気になったことをのんびり書くよ

📱

iOSのiTunesバックアップの解析

iOSのバックアップからファイルを復元

iPhoneやiPadなどのiOS端末は(Windowsの場合)iTunesでバックアップが取れます。
MacはiTunesが廃止になったんでしたっけ。
今はどうバックアップ取るのよくわかってない笑
"このコンピュータ"でバックアップしてある場合は、バックアップディレクトリからデータを直接復元できるらしいので、その方法を紹介したいと思います。

バックアップの構成

以下の場所にバックアップディレクトリがあります。
Windows: \Users\AppData\Roaming\Apple Computer\MobileSync\Backup
Mac: /Users/Library/Application Support/MobileSync/Backup(後で確認する)

ディレクトリの構成

バックアップディレクトリはデバイスごとにハッシュされた名前がつけられています。
その中は00-ffの大量のディレクトリとInfo.plistManifest.dbManifest.plistStatus.plistから成ります。
バックアップするときに暗号化を有効にしていても、.plistファイルは暗号化されないみたいです(未確認)
.plistファイルのAppleのドキュメントはこちら
About Information Property List Files

Info.plistファイル

Info.plistはバックアップの情報が入っています。
バックアップした日時や端末の情報が確認できます。
普通にテキストエディタでも開けます。
  • バックアップ日: Last Backup Date
  • 端末の名前: Product NameもしくはProduct Type
  • iOSのバージョン: Product Version
Ctrl+Fとかで探してみてください。

Manifest.plistとStatus.plist

開き方がわからない。
Status.plistの方はすごく軽いです。
バックアップ時の状態を記録しているのかな(未確認)

Manifest.db

SQLiteデータベースです。
すべてのファイルの情報がここに記録されています。
DB Browser for SQLiteなどを使って読むことができます。
ひとことでいうと、iOS内のファイルはバックアップ時にハッシュ化された(ランダムな?)名前で保存され、その名前と元のファイル名との関係がここに記録されています。
  • fileID
  • domain
  • relativePath
  • falgs
  • file
relativePathが元のファイル名で、fileIDの名前でバックアップに保存されています。
domainではそのファイルを使用しているアプリがわかります。
flagsは1がファイル、2がディレクトリ、4は不明です。

復元

Manifest.dbを使ってバックアップファイルを直接復元することができます。
fileIDをバックアップフォルダで検索し、そのファイルをrelativePathの名前に書き換えると開けるようになると思います。
fileIDの最初の2文字のディレクトリにファイルの本体が保存されています。
一気に戻すには、flag2のデータを元に、domain/relativePathとなるようにディレクトリを作成し、そこに含まれるファイルを復元していきます。
flag1のデータを読みだしてきてファイル名を変更していけばバックアップファイルを再構成することができると思います。
次の記事Macのzshでaliasを使う