Wenn man ein Android-Gerät gerootet hat, sind mit diesem einige Dinge möglich welche vorher nicht machbar waren. Unter anderem kann man den internen Speicher eines solchen Gerätes dumpen, das bedeutet ihn Bit für Bit in eine Image-Datei schreiben. Dazu verbindet man das gerootete Gerät mit dem Rechner und öffnet die ADB-Shell. ADB steht dabei für die Android Debug Bridge und befindet sich in den Plattform Tools des Android SDKs:
./adb remount ./adb shell
Kann die Verbindung nicht hergestellt werden, weil der ADB-Server bereits läuft, hilft es diesen vorher noch einmal zu beenden:
./adb kill-server
In der ADB-Shell gibt man nun su ein damit man auf der Root-Konsole landet. Anschließend kann man das Blockgerät welches für den internen Speicher steht auf die eingelegte SD-Karte schreiben. Dies geschieht dabei mit Hilfe des Befehls dd:
dd if=/dev/block/mmcblk0 of=/storage/extSdCard/imageInternalStorage.img
Probleme bekommt man bei diesem Prozess wenn das Image größer als 4 GiB ist. Da die SD-Karten meist standardmäßig mittels FAT32 formatiert sind, erlauben sie keine Dateien größer 4 GiB. Abhilfe schafft es hier die SD-Karte mit dem Dateisystem ext3 zu formatieren. Dieses kann von Android genutzt werden und erlaubt größere Dateien. Unter Umständen muss das ext3-Dateisystem dabei nochmals neu mit Schreibrechten eingebunden werden:
mount -t ext3 /dev/block/mmcblk1p1 /storage/extSdCard
Anschließend sollte das Image ohne Probleme geschrieben werden können. Je nach Größe und Geschwindigkeit der SD-Karte, kann der Prozess dabei einige Zeit in Anspruch nehmen. Nach der erfolgreichen Operation meldet dd-Vollzug und zeigt einige Statistiken zum Prozess an. Das Image kann nun von der SD-Karte auf den Rechner kopiert werden und dort z.B. dem FTK Imager gemountet und analysiert werden.
Das funktioniert so aber nur unter unixoiden Systemen, Windows kann ohne Weiteres kein ext3, dafür FAT32.
Der Rest ist übrigens auch nicht ganz richtig, unter Umständen ist „mmcblk0“ eben nicht das Gleiche wie „der interne Speicher“, da es nicht jeden Sektor des NAND-Speichers enthalten muss. (Beispiel: OEM-Firmware.)
Das funktioniert auch unter Windows, da die Befehle sich auf dem ADB-Shell beziehen und damit auf dem Gerät laufen. Wie ich die SD-Karte mit ext3 formatiere und unter Windows lese ist natürlich wieder ein anderes Problem. Das konkrete Block-Device ist hier eher als Beispiel zu verstehen, da man dort wie du schon sagtest, je nach Gerät schauen muss.
Kann es nicht zu Problemen kommen wenn man während des Betriebs einfach den Speicher kopiert. Man kann ja nicht sicher sein ob gerade nicht was auf das blockdevice geschrieben wird. Oder übersehe ich da was?
Das man in diesem Fall ein 100% konsistentes Image bekommt, kann nicht garantiert werden – für solche Fälle müsste ein Snapshot oder ähnliches angelegt werden und dieser dann kopiert werden.
Wie kann ich ein Image erstellen wenn ich beim Handy keine SD-Card einlegen kann?
Falls die SD-Card mit ext3-Dateisystem nicht erkannt wird, kann man die Karte als ext4-Dateisystem mounten, funktioniert dann :)
mount -t ext4 /dev/block/mmcblk1p1 /storage/extSdCard