Sauvegarde iTunes – Le wiki de l'iPhone
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.
Contenus
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
- [0] dict:
- 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
- LibraryApplications (tableau de chaîne): Le tableau de chaîne contient la chaîne d'identification de chaque application, par exemple
- 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
- [0] dict:
- BKBookmark (tableau de dict):
- 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
- [0] dict:
- rolling_version (entier): 17
- BKCollection (tableau de 2 dict):
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
- [0] dict
- 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
- [0] dict:
- 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
- com.apple.iBooks (dict)
- 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
- Signets (dict):
- 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:
Commentaires
Laisser un commentaire