Apple

Sauvegarde iTunes – Le wiki de l'iPhone

Par Maximus63 , le 26 mai 2019 - 10 minutes de lecture

La description suivante décrit le système de sauvegarde d'iTunes, qui est souvent utilisé pour l’analyse médico-légale des iDevices. Cette description concerne le format utilisé dans iTunes 10.5.3 et une version plus récente. Les versions les plus anciennes sont légèrement différentes (voir Présentation des fichiers de sauvegarde sur iPhone). La description concerne uniquement les sauvegardes non chiffrées.

Sur le périphérique, le fichier /System/Library/Backup/Domains.plist détermine quels fichiers sauvegarder. Il y a une différenciation entre "domaines" et fichiers relatifs.

L'emplacement de sauvegarde (voir ci-dessous) contient toutes les sauvegardes effectuées par iTunes jusqu'à présent. Chaque nom de dossier de sauvegarde correspond à l'UDID du périphérique pour une sauvegarde complète. Une sauvegarde différentielle porte le même nom de dossier, mais est accompagnée d'un tiret et de la date ISO de la sauvegarde (8 chiffres aaaaammjj) et d'un tiret et de l'heure au format 24 heures avec les secondes.

Dans chaque sauvegarde, il y a quatre fichiers avec des informations, qui seront décrits plus tard:

  • Info.plist
  • Manifest.mdbd
  • Manifest.plist
  • Status.plist

Il y a aussi les fichiers eux-mêmes, mais avec un nouveau nom de fichier.

Les noms de fichiers sont créés par un hachage SHA-1 de leur nom, avec leur chemin d'accès et leur domaine. Entre le domaine et le chemin, il y a un tiret. Exemple:

SHA1 ('Bibliothèque principale / SMS / sms.db') = 3d0d7e5fb2ce288813306e4d4636395e047a3d28

On ne sait pas ce qui se passerait en cas de collision de hasch. Apple suppose probablement que cela n'arrivera pas.

Les données elles-mêmes sont cryptées avec AES-256 CBC.

emplacement de sauvegarde iTunes

  • Windows XP: % HOMEPATH% Application Data Ordinateur Apple MobileSync Backup {UDID}
  • Windows Vista / 7/8: % HOMEPATH% AppData Roaming Ordinateur Apple MobileSync Backup {UDID} ou % APPDATA% Apple Computer MobileSync Backup {UDID}
  • OS X: ~ / Bibliothèque / Application Support / MobileSync / Backup / {UDID}

Info.plist

Ceci est un texte en clair contenant le dict suivant:

  • Version de construction (chaîne): 9A406 (version de construction iOS du périphérique sauvegardé)
  • Nom du périphérique (chaîne): (nom du périphérique sauvegardé)
  • Nom d'affichage (chaîne): (nom du périphérique sauvegardé)
  • GUID (chaîne): GUID inconnu sur 16 octets sans tirets
  • ICCID (chaîne)
  • IMEI (chaîne)
  • Date de la dernière sauvegarde (date): format "aaaa-mm-jjThh: mm: ssZ"
  • Numéro de téléphone (chaîne)
  • Type de produit (chaîne): iPhone4,1
  • Version du produit (chaîne): 5.0.1
  • Numéro de série (chaîne)
  • Paramètres de synchronisation (dict):
    • Jour limite calendaire (entier): 30
    • Collections de calendriers: (tableau de dict, 1 élément):
      • AMSCollectionDisplayName (string): Calendrier
      • AMSCollectionFiltered (bool): false
      • AMSCollectionName (string): Calendrier
      • AMSCollectionReadOnly (bool): false
    • Informations sur la classe de données: (tableau de dict, 5 éléments)
      • [0] dict:
        • kAMSDataClassEnabled (bool): false
        • kAMSDataClassName (string): com.apple.Bookmarks
        • kAMSDataClassReset (bool): false
      • [1] dict:
        • kAMSDataClassEnabled (bool): false
        • kAMSDataClassName (string): com.apple.Calendars
        • kAMSDataClassReset (bool): false
      • [2] dict:
        • kAMSDataClassEnabled (bool): false
        • kAMSDataClassName (string): com.apple.Accounts
        • kAMSDataClassReset (bool): false
      • [3] dict:
        • kAMSDataClassEnabled (bool): false
        • kAMSDataClassName (string): com.apple.MailAccounts
        • kAMSDataClassReset (bool): false
      • [4] dict:
        • kAMSDataClassEnabled (bool): true
        • kAMSDataClassName (string): com.apple.Notes
        • kAMSDataClassReset (bool): false
    • Nouveau nom du calendrier d'enregistrement (chaîne): Accueil
    • Nom d'utilisateur iTunes (chaîne): (code hexadécimal de 8 octets)
  • Identificateur de cible (chaîne): code hexadécimal de 20 octets
  • Type de terget (chaîne): périphérique
  • Identifiant unique (chaîne): même code hexadécimal de 20 octets
  • iBooks Data 2 (data): (objet blob codé en base 64, voir ci-dessous)
  • Fichiers iTunes (dict):
    • IC-Info.siv (data): (Blob codé en base 64, voir ci-dessous)
    • PhotosFolderAlbums (data): (Blob codé en base 64, voir ci-dessous)
    • PhotosFolderName (data): (Blob codé en base 64, voir ci-dessous)
    • PhotosFolderPrefs (data): (Blob codé en base 64, voir ci-dessous)
    • ShowMarketing (données): (vide)
    • iTunesPrefs (data): (objet blob codé en base 64, voir ci-dessous)
    • iTunesPrefs.plist (data): (objet blob codé en base 64, voir ci-dessous)
  • Paramètres iTunes (dict):
    • LibraryApplications (tableau de chaîne): Le tableau de chaîne contient la chaîne d'identification de chaque application, par exemple com.apple.store.caseprogram
  • Version iTunes (chaîne): 10.5.3

Données iBooks 2

Ce blob est en réalité un autre plist (dict):

  • 1.2 (dict):
    • BKBookmark (tableau de dict):
      • [0] dict:
        • bookDatabaseKey (chaîne)
        • date (entier)
        • suppriméFlag (bool)
        • highlightColor (entier)
        • lastModification (entier)
        • locationBPlist (data): (objet blob codé en base 64, voir ci-dessous)
        • ordinal (entier)
        • serverSyncUniqueId (string): emplacement de lecture
        • type (entier): 1
  • CollectionsData-1.2 (dict):
    • BKCollection (tableau de 2 dict):
      • [0] dict:
        • databaseKeys (tableau): (vide)
        • lastModification_Since1970 (entier)
        • ServerSyncUniqueId (chaîne): ID_Collenction_Pdfs
        • sortKey (entier): -2
        • titre (chaîne): PDF
      • [1] dict:
        • databaseKeys (tableau): (vide)
        • lastModification_Since1970 (entier)
        • ServerSyncUniqueId (chaîne): ID_Collenction_Pdfs
        • sortKey (entier): -1
        • titre (chaîne): Livres
    • rolling_version (entier): 17
Lieu BPList

C'est en fait une plist binaire avec le contenu suivant (dict): (exemple):

  • class (string): BKEpubLocation
  • endOffset (réel): 0,0
  • endPath (tableau de dict):
    • [0] dict
      • id (chaîne): seeAlsoSection
      • indice (entier): 32
      • tagName (chaîne): div
    • [1] dict
      • index (entier): 3
      • tagName (chaîne): p
  • startOffset (réel): 0.0
  • startPath (tableau de dict):
    • [0] dict:
      • id (chaîne): seeAlsoSection
      • indice (entier): 32
      • tagName (chaîne): div
    • [1] dict:
      • index (entier): 3
      • tagName (chaîne): p
  • super (dict):
    • classe (chaîne): BKLocation
    • ordinal (entier): 3

IC-Info.siv

fichier binaire, contenu inconnu

PhotosFolderAlbums

fichier binaire frpd. Commence par 0x66 0x72 0x70 0x64 ('frpd'). Alors seulement très peu d’octets et le contenu est presque nul. Ensuite, à 0x68 et 0x26C, 0x470, 0x674, etc., il existe des noms de dossier (en unicode, commençant par la longueur du nom).

PhotosFolderName

Un fichier long de 0x200 octets, commençant par le texte "Pictures" (en unicode) et la longueur du nom le précédant. Reste rempli de zéros.

iTunesPrefs

Ceci est un autre fichier frpd. Il contient les noms des ordinateurs trouvés sur le réseau, comme iPodPrefs ci-dessous.

iTunesPrefs.plist

Plist avec ce contenu (dict):

  • ApplicationIDs (tableau de chaîne): liste des applications (comme com.apple.iBooks
  • AudiobookPlaylistIDs (array): (vide)
  • AudioTrackIDs (array): (vide)
  • BookTrackIDs (tableau d'entier): (valeurs d'entier long signées)
  • LibraryBookTrackIDs (tableau d'entier): (valeurs d'entier long signées)
  • MoviePlaylistIDs (array): (vide)
  • MovieTrackIDs (tableau): (vide)
  • MusicAlbumIDs (tableau): (vide)
  • MusicArtistIDs (tableau): (vide)
  • MusicGenreNames (tableau): (vide)
  • MusicPlaylistIDs (tableau d'entier): (valeurs d'entier long signées)
  • MusicTrackIDs (tableau): (vide)
  • PodcastChannelIDs (tableau): (vide)
  • PodcastPlaylistIDs (tableau): (vide)
  • PodcastTrackIDs (tableau d'entier): (valeurs d'entier long signées)
  • RingtoneTrackIDs (tableau): (vide)
  • TVShowAlbumIDs (tableau): (vide)
  • TVShowNames (tableau): (vide)
  • TVShowPlaylistIDs (tableau): (vide)
  • TVShowTrackIDs (tableau): (vide)
  • iPodPrefs (data): (Blob codé en base 64, voir ci-dessous)
  • iTunesUChannelIDs (tableau): (vide)
  • iTunesUPlaylistIDs (tableau): (vide)
  • iTunesUTrackIDs (array): (vide)
iPodPrefs

Fichier frpd, contenu inconnu, mais contenant les noms de serveur du réseau sur lequel il a été synchronisé, comme iTunesPrefs ci-dessus.

Manifest.mbdb

Fichier binaire contenant de nombreuses chaînes de texte. Probablement une base de données de noms de fichiers dans la sauvegarde. Format (à partir d'ici):

6 octets: 'mbdb  5  0'

Enregistrement (taille variable)

chaîne Domaine Sauvegarde domaine (un des
                       "AppDomain-com.some.user.installed.app",
                       "CameraRollDomain",
                       "DatabaseDomain"
                       "HomeDomain",
                       "KeychainDomain",
                       "ManagedPreferencesDomain",
                       "MediaDomain",
                       "MobileDeviceDomain",
                       "RootDomain",
                       "SystemPreferencesDomain",
                       "WirelessDomain",
                       ... autres?
chemin de la chaîne
string LinkTarget chemin absolu
chaîne DataHash SHA-1 du contenu du fichier, objets de fichier réels uniquement
string encryptionKey Clé de cryptage pour les sauvegardes cryptées
uint16 Autorisations de fichiers en mode Unix Voir /usr/include/stat.h et stat (2)
                               mode de fichier: lien symbolique 0xAxxx (aussi appelé S_IFLNK ou 00120000)
                                Répertoire 0x4xxx (aussi appelé S_IFDIR ou 0040000)
                                Fichier régulier 0x8xxx (aussi appelé S_IFREG ou 0100000)
                               Masquer ~ 0xf000 (S_IFMT) pour les autorisations de fichiers
uint32 inode inode numéro
uint32 uid owner
uint32 gid group
uint32 heure mtime de la dernière modification
uint32 atime heure du dernier accès
uint32 heure de la dernière modification du statut
Taille du fichier de longueur uint64 (toujours 0 pour le lien ou le répertoire)
uint8 protectionclass inconnu
uint8 PropertyCount nombre de propriétés suivant

La propriété est composée de deux chaînes:

nom de chaîne
valeur de chaîne peut être une chaîne ou un contenu binaire

Toutes les valeurs sont en gros caractères, les chaînes sont composées d'un uint16 contenant la longueur ou 0xffff pour NULL, puis les caractères en UTF-8 avec décomposition canonique (forme D de normalisation Unicode).

Pour déterminer le nom de fichier correspondant à un enregistrement (il s'agira du fichier réel dans le répertoire de sauvegarde mobile), calculez la somme de contrôle sha-1 du domaine et du chemin séparés par '-' comme suit:

                            SHA1 (-)

Il est possible de modifier des fichiers dans une sauvegarde mobile en comprenant également cette structure. Si vous modifiez le contenu du fichier, mettez à jour le DataHash et la longueur

Manifest.plist

Plist binaire avec le contenu suivant (dict):

  • Applications (dict):
    • com.apple.iBooks (dict)
      • CFBundleIdentifier (chaîne): com.apple.iBooks
      • CFBundleVersion (chaîne): 804
      • Chemin (chaîne de caractères): / private / var / mobile / Applications /[GUID]/iBooks.app
    • etc. pour d'autres applications
  • BackupKeyBag (data): (objet blob codé en base 64, voir ci-dessous)
  • Date (date): aaaa-mm-jjThh: mm: ssZ
  • IsEncrypted (bool): false
  • Lockdown (dict):
    • BuildVersion (chaîne): 9A406
    • DeviceName (chaîne)
    • Type de produit (chaîne): iPhone4,1
    • ProductVersion (chaîne): 5.0.1
    • Numéro de série (chaîne)
    • UniqueDeviceID (chaîne): hexadécimal de 20 octets
    • com.apple.Accessibility (dict):
      • InvertDisplayEnabledByiTunes (bool): false
      • MonoAudioEnabledByiTunes (bool): false
      • VoiceOverTouchEnabledByiTunes (bool): false
      • ZoomTouchEnabledByiTunes (bool): false
    • com.apple.MobileDeviceCrashCopy (dict):
      • ShouldPrompt (bool): false
      • Devrait Soumettre (bool): false
    • com.apple.TerminalFlashr (dict): (vide)
    • com.apple.iTunes.backup (dict):
      • LastBackupComputerName (chaîne)
      • LastBackupComputerType (string): PC
    • com.apple.itunesstored (dict):
      • AccountAvailableServiceTypes (entier): 0
      • AccountKind (entier): 0
      • AccountServiceTypes (entier): 0
      • AccountSocialEnabled (bool): false
      • AccountStoreFront (string): (chaîne de texte inconnue)
      • AccountURLBagType (chaîne): production
      • AppleID (chaîne)
      • CreditDisplayString (chaîne): (chaîne vide)
      • DSPersonID (entier)
      • TempStorefront (chaîne): (chaîne de texte inconnue)
    • com.apple.mobile.data_sync (dict):
      • Signets (dict):
        • AccountNames (tableau de chaîne, 1 élément): iCloud
        • Sources (tableau de chaîne, 1 élément): iCloud
      • Calendriers (dict):
        • AccountNames (tableau de chaîne, 1 élément): iCloud
        • Sources (tableau de chaîne, 1 élément): iCloud
      • Contacts (dict):
        • AccountNames (tableau de chaîne, 1 élément): iCloud
        • Sources (tableau de chaîne, 1 élément): iCloud
    • com.apple.mobile.iTunes.accessories (dict): (vide)
    • com.apple.mobile.wireless_lockdown (dict): (vide)
  • SystemDomainsVersion (string): 12.0
  • Version (chaîne): 9.0
  • WasPasscodeSet (bool): false

BackupKeyBag

Fichier binaire au format suivant:

  • Identifiant de bloc sur 4 octets
  • Longueur de bloc de 4 octets (octet de poids le plus significatif en premier), longueur 4 signifie une longueur totale de bloc de 0xC octets.
  • Les données

Le premier bloc est "VERS" avec un numéro de version de 3. Il existe de nombreux types de blocs: VERS, TYPE, UUID, HMCK, WRAP, SALT, ITER, UUID, CLAS, WRAP, KTYP, WPKY, etc.

Status.plist

Plist binaire avec le contenu suivant (dict):

  • BackupState (string): nouveau
  • Date (date): "aaaa-mm-jjThh: mm: ssZ"
  • IsFullBackup (bool): false
  • SnapshotState (string): terminé
  • UUID (chaîne)
  • Version (chaîne): 2.4

Des dossiers

Voici une liste des fichiers couramment utilisés:

Références

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.