Benutzer:Florian/Datenrettung nach Werksreset

Aus Android Wiki
In diesem Artikel oder Abschnitt fehlen wichtige Informationen. Hilf DroidWiki, sichte die Diskussion und recherchiere in deinen Quellen zu dem Thema Benutzer:Florian/Datenrettung nach Werksreset und füge die Informationen ein, aber bitte kopiere keine urheberrechtlich geschützten Inhalt in diesen Artikel.

Die Hauptautoren wurden noch nicht informiert. Bitte benachrichtige sie!

Das Wiederherstellen von ungesicherten Daten von einem Android-Gerät ist, nachdem der interne Speicher mit einem Werksreset gelöscht wurde, nahezu aussichtslos. Alle Möglichkeiten, die sich bieten, generieren i.d.R. einen erheblichen Aufwand, der sich leicht durch regelmäßige Backups vermeiden lässt. Daher sei an dieser Stelle angemerkt, dass die Informationen auf dieser Seite dafür gedacht sind, zur Anwendung zu kommen, wenn das Kind, umgangssprachlich, bereits in den Brunnen gefallen ist, nicht jedoch als Ersatz für ein Backup der persönlichen Daten.

Bei den xda-developers[1] wurde dennoch ein Weg beschrieben, der dass Wiederherstellen von Dateien, die auf dem internen Speicher gespeichert waren, auch dann noch möglich macht, wenn dieser mit der eingebauten Funktion Auf Werkseinstellungen zurücksetzten gelöscht wurden. Dieser Weg ist im folgenden beschrieben.

Hintergrund[Bearbeiten | Quelltext bearbeiten]

Die folgende Möglichkeit der Wiederherstellung ist mit der Datenrettung einer Festplatte, bspw. eines Computers, vergleichbar. Diese basiert darauf, dass die Daten nicht wirklich gelöscht werden, sondern lediglich der Verweis auf diese im Dateisystem (oder das gesamte Dateisystem bei einer Formatierung). Dadurch ist es theoretisch möglich, dass die Daten problemlos wiederhergestellt werden. In der Praxis muss das allerdings abstrakter betrachtet werden, da die Speicherblöcke, nachdem sie vom Dateisystem freigegeben wurden, sofort wieder für neue Daten genutzt und überschrieben werden können. Daher schwindet die Chance auf eine erfolgreiche Datenrettung mit der Zeit, bzw. der Anzahl der Schreibvorgänge auf das Speichermedium, die seit dem Löschen der gewünschten Datei vergangen ist.

Zudem stellt sich bei Android das Problem, dass der interne Speicher nicht einfach mit einem Datenrettungs-Tool durchsucht werden kann, da dieser (beim Verbinden mit dem PC) als MTP-Gerät eingebunden wird, nicht aber als physischer Speicher. Daher muss zur Wiederherstellung bei einem Android-Gerät ein Umweg gegangen werden, der einen entsperrten Bootloader, sowie Root-Zugang erfordert.

Datenwiederherstellung[Bearbeiten | Quelltext bearbeiten]

Voraussetzungen[Bearbeiten | Quelltext bearbeiten]

Für eine erfolgreiche Durchführung müssen folgende Voraussetzungen erfüllt sein:

Vorbereitung[Bearbeiten | Quelltext bearbeiten]

Bevor der interne Speicher mit einem Datenrettungs-Tool untersucht werden kann, müssen wir es diesem Tool ermöglichen, auf den Speicher als festplatte zuzugreifen. Aufgrund der oben beschriebenen Problematik, dass dieser als MTP-Gerät verwendet wird, können wir den Speicher nicht direkt als Festplatte über eine USB-Verbindung einbinden. Daher ist es nötig, dass wir eine Kopie des Speichers erstellen, welche wir anschließend als Image-Datei als virtuelle festplatte in unser System einbinden können.

Zuerst müssen wir dafür herausfinden, wie der Name der Partition ist, die wir sichern möchten. Damit ist nicht der Name gemeint, unter der diese eingebunden wird (also bspw. /data, /system o.Ä.), sondern der der Gerätedatei. Da sowohl verschiedene Hersteller, als auch verschiedene Geräte eines Herstellers unterschiedliche Partitions-Layouts haben und auch auf unterschiedliche Speichermedien aufbauen, kann keine allgemeine Zuordnung getroffen werden, weshalb die passende Gerätedatei bei jedem Gerät erneut herausgesucht werden muss. Eine Übersicht, wie bei verschiedenen Speichermedien eine Liste der Gerätedateinamen ausgegeben werden kann, findet ihr hier.

Anschließend muss das Gerät per USB-Kabel an den PC angeschlossen werden. Nun öffnen wir eine neues Cygwin.Terminal und geben folgenden Befehl ein (unter der Annahme dass busybox unter /system/xbin/busybox installiert ist, möglich ist allerdings auch bspw. /system/bin/busybox, sowie der Annahme, dass die Daten aus der Gerätedatei mmcblk0p37 (die Userdaten bei einem HTC One M7) wiederhergestellt werden soll:

adb forward tcp:5555 tcp:5555

Damit stellen wir sicher, dass die Daten zwischen dem Android-Gerät und dem PC (jeweils auf dem Port 5555) ausgetauscht, bzw. weitergeleitet) werden. Anschließend erstellen wir mit Hilfe von Netcat einen Listener auf dem besagten Port:

adb shell
su
/system/xbin/busybox nc -l -p 5555 -e /system/xbin/busybox dd if=/dev/block/mmcblk0p37

Was macht das jetzt genau? nc, auch bekannt als Netcat, ist quasi ein einfaches Programm für Übertragungen über Netzwerkverbindungen. Die Implementierung von nc der busybox funktioniert geringfügig anders als bei der Linux-Standard-Implementierung und ist hier dokumentiert. Prinzipiell wird mit dem Befehl einfach ein Listener auf den Port 5555 aufgemacht und nc angewiesen den Befehl im Parameter e auszuführen, wenn ein Client auf diesen Listener verbindet. Der Befehl ist dabei ein einfach dd zum Bytegenauen kopieren von Daten (in diesem Fall der mmcblk0p37). Grundsätzlich wird das Ergebnis von dd über den nc Listener an den verbundenen Client gesendet.

Da wir nun einen Listener erstellt haben, benötigen wird nun noch einen Client, der sich mit ihm verbindet. Hierfür öffnen wir ein neues Cygwin-Terminalfenster und geben folgende Befehle nacheinander ein:

adb forward tcp:5555 tcp:5555

nc 127.0.0.1 5555 | pv -i 0.5 > mmcblk0p37.raw

Hier haben wir wieder nc, diesmal allerdings als Client. Wir verbinden uns mit dem eben erstellten Listener (was den Trigger für das Ausführen von dd auslöst) und verarbeiten die Ausgabe im zweiten Teil (nach dem Trenner "|"). Die Ausgabe von nc wird mit pv (Pipe Viewer) verarbeitet, ein einfaches Pipeline Programm mit Statusanzeige. Grundsätzlich wird einfach das, was in stdin (kommend von nc) hereinkommt an stdout (das sollte in diesem Fall das Terminal sein) gesendet. stdout wird dann nach mmcblk0p12.raw geschrieben, wodurch daraus eine neue Datei erstellt wird. Das ist dann eine exakte Kopie des ursprünglichen device-Blocks, also der Partition, die wir von unserem Gerät gesendet haben. Diese raw-Kopie können wir nun weiter verwenden.

HINWEIS: Je nachdem, wie groß die zu sichernde Partition ist, kann dieser Vorgang einige Minuten bis zu mehreren Stunden dauern!

  1. Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.