[PYTHON] Stellen Sie die iPhone-Sicherungsdatei wieder her

Einführung

Ich wollte die Dateien auf meinem iPhone auf meinem Computer sehen, also habe ich die Dateien wiederhergestellt, die beim Sichern meines iPhones mit iTunes erstellt wurden. Der Grund war, dass ich Gespräche und Fotos von meinem PC aus sehen wollte, falls die LINE-Daten bei der Migration des iPhones verschwanden. Ich benutze Windows, aber Windows hat Apps, die den Inhalt des iPhone direkt durchsuchen. Ich habe ihm jedoch nicht wirklich vertraut und wollte nicht direkt im iPhone darauf zugreifen. Deshalb habe ich nach einer Möglichkeit gesucht, die Sicherungsdatei wiederherzustellen.

Die Umgebung ist wie folgt.

Speicherort und Konfiguration der Sicherungsdatei

Ort

Wenn Sie Ihr iPhone mit iTunes sichern, wird im folgenden Ordner eine Sicherungsdatei erstellt. Beachten Sie, dass Sie beim Sichern mit iTunes sicherstellen müssen, dass Sie nicht "verschlüsseln".

C:\Users\[username]\Apple\MobileSync\Backup\XXXXX

"XXXXX" ist eine Zeichenfolge, die für jede Umgebung unterschiedlich zu sein scheint. Wenn Sie mehrere Sicherungen haben, haben Sie mehrere Ordner. Beachten Sie, dass der Ordner unter iOS (iTunes?) Vor einiger Zeit anders war.

Verfassung

Die iPhone-Sicherungsdaten sind im obigen Ordner "XXXXX" enthalten. Die Hauptdateien sind wie folgt.

Es scheint einige andere Informationen zu geben, aber ich habe sie nicht weiter analysiert.

Python-Skript zum Wiederherstellen

Ich habe ein Python-Skript erstellt, das den ursprünglichen Dateinamen für alle Sicherungsdateien ausgibt. Die Fehlerbehandlung wird nicht ordnungsgemäß durchgeführt.

restore.py


import os
import shutil
import sqlite3


#Trennen Sie den Pfad in ein Verzeichnis und einen Dateinamen
#(Beispiel)
# 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


#Pfaddefinition
src_basepath = r'C:\Users\username\Apple\MobileSync\Backup\00000000-0000000000000000'
dst_basepath = r'.\output'
db_filepath = src_basepath + '\Manifest.db'

#DB-Verbindung
connection = sqlite3.connect(db_filepath)
cursor = connection.cursor()
cursor.execute('SELECT fileID, relativePath, flags FROM Files')
result = cursor.fetchall()
connection.close()

###DB Feldbeschreibung#######################
# fileID:Dateiname im Sicherungsverzeichnis
# relativePath:Relativer Pfad
# flags = 1:Die Originaldatei befindet sich im Sicherungsverzeichnis
# flags = 2:Die Originaldatei ist nicht im Sicherungsverzeichnis vorhanden
#############################################

#Verarbeitung für jede Datei
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)

    #Überspringen, wenn sich die Originaldatei nicht im Sicherungsverzeichnis befindet
    if not src_exists:
        continue

    print('{}\t{}\t{}'.format(src_filepath, dst_filepath, dst_filename))

    try:
        #Verzeichnis rekursiv erstellen
        os.makedirs(dst_filepath, exist_ok=True)
        #Datei kopieren
        shutil.copy2(src_filepath, dst_filepath+'\\'+dst_filename)
    except :
        pass

Der Inhalt der Datei usw.

Hier sind einige Dateipfade als Referenz.

Verweise

Ich habe es vor ungefähr 5 Jahren nachgeschlagen, daher erinnere ich mich nicht an die URL, auf die ich verwiesen habe. Der Speicherort und die Dateistruktur der zu diesem Zeitpunkt untersuchten Datei unterscheiden sich von jetzt.

Recommended Posts

Stellen Sie die iPhone-Sicherungsdatei wieder her
Erstellen Sie eine inkrementelle Sicherung von Linux (Wiederherstellung)