Je voulais voir les fichiers de mon iPhone sur mon ordinateur, j'ai donc restauré les fichiers créés lorsque j'ai sauvegardé mon iPhone avec iTunes. La raison était que je voulais pouvoir voir les discussions et les photos de mon PC au cas où les données LINE disparaîtraient lors de la migration de l'iPhone. J'utilise Windows, mais Windows a des applications qui parcourent directement le contenu de l'iPhone. Cependant, je ne lui faisais pas vraiment confiance et je ne voulais pas y accéder directement à l'intérieur de l'iPhone, j'ai donc cherché un moyen de restaurer le fichier de sauvegarde.
L'environnement est le suivant.
Lorsque vous sauvegardez votre iPhone avec iTunes, un fichier de sauvegarde est créé dans le dossier suivant. Notez que vous devez vous assurer de ne pas «chiffrer» lors de la sauvegarde avec iTunes.
C:\Users\[username]\Apple\MobileSync\Backup\XXXXX
«XXXXX» est une chaîne de caractères qui semble être différente pour chaque environnement. Si vous avez plusieurs sauvegardes, vous avez plusieurs dossiers. Notez que l'emplacement du dossier est différent sur iOS (iTunes?) Il y a quelque temps.
Les données de sauvegarde de l'iPhone sont contenues dans le dossier «XXXXX» ci-dessus. Les principaux fichiers sont les suivants.
Manifest.db Fichier DB au format SQLite. Les informations sur chaque fichier sont répertoriées. Le chemin du fichier dans l'iPhone et le nom du fichier dans le dossier de sauvegarde sont liés.
Les données Le fichier d'origine de l'iPhone a été remplacé par un nom de fichier aléatoire de 40 caractères (une valeur de hachage?) Et placé. Chaque fichier est distribué et stocké dans le dossier des deux premiers caractères du nom de fichier. Si vous ne le cryptez pas avec l'option iTunes, le contenu du fichier restera le même, vous pouvez donc voir les données en l'ouvrant avec un éditeur ou une visionneuse.
Il semble y avoir d'autres informations, mais je ne les ai pas analysées davantage.
J'ai créé un script Python qui génère le nom de fichier d'origine pour tous les fichiers de sauvegarde. La gestion des erreurs n'est pas effectuée correctement.
--Depuis qu'il a été créé avec Python 3.7 sous Windows, vous devez changer le délimiteur de chemin sur Mac. Je voudrais changer '\\' dans le fichier source en '/', mais je ne l'ai pas essayé sauf sous Windows.
src_basepath
par le chemin dans votre environnement.restore.py
import os
import shutil
import sqlite3
#Séparez le chemin dans un répertoire et un nom de fichier
#(Exemple)
# Input: '.\\output\\Library\\Logs\\test.log'
# Output: ('.\\output\\Library\\Logs\\', 'test.log')
def get_dst_filepath(relative_filepath):
path_array = relative_filepath.split('\\')
dst_path = ''
for direcoty_name in path_array[0:-1]:
dst_path += direcoty_name + '\\'
filename = path_array[-1]
return dst_path, filename
#Définition du chemin
src_basepath = r'C:\Users\username\Apple\MobileSync\Backup\00000000-0000000000000000'
dst_basepath = r'.\output'
db_filepath = src_basepath + '\Manifest.db'
#Connexion DB
connection = sqlite3.connect(db_filepath)
cursor = connection.cursor()
cursor.execute('SELECT fileID, relativePath, flags FROM Files')
result = cursor.fetchall()
connection.close()
###Description du champ DB#######################
# fileID:Nom de fichier dans le répertoire de sauvegarde
# relativePath:Chemin relatif
# flags = 1:Le fichier d'origine existe dans le répertoire de sauvegarde
# flags = 2:Le fichier d'origine n'existe pas dans le répertoire de sauvegarde
#############################################
#Traitement pour chaque fichier
for row in result:
src_filename = row[0]
dst_relative_path = row[1].replace('/', '\\')
src_exists = row[2] is 1
src_filepath = src_basepath + '\\' + src_filename[0:2] + '\\' + src_filename
dst_filepath, dst_filename = get_dst_filepath(dst_basepath + '\\' + dst_relative_path)
#Ignorer si le fichier d'origine n'est pas dans le répertoire de sauvegarde
if not src_exists:
continue
print('{}\t{}\t{}'.format(src_filepath, dst_filepath, dst_filename))
try:
#Créer un répertoire de manière récursive
os.makedirs(dst_filepath, exist_ok=True)
#Copier un fichier
shutil.copy2(src_filepath, dst_filepath+'\\'+dst_filename)
except :
pass
Voici quelques chemins de fichiers pour référence.
--Fichier photo: Media \ DCIM --LINE data (discussion): Library \ Application Support \ PrivateStore \ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \ Messages \ Line.sqlite
Je l'ai recherché il y a environ 5 ans, donc je ne me souviens pas de l'URL à laquelle je faisais référence. L'emplacement et la structure de fichier du fichier examiné à ce moment-là sont différents de maintenant.