===== Motorola Milestone (EU) bzw. Droid (US) =====
==== Vorbereitung(en) ====
* das ausgediente [[http://www.gsmarena.com/motorola_milestone-3001.php|Motorola Milestone]] vom Schwiegervater ausleihen //(erledigt)//
* "USB-Debugging" + "Aktiv lassen" aktivieren! //(erledigt)//
* [[https://santoku-linux.com/|Santoku Linux]] (VirtualBox VM) installieren //(erledigt)//
==== (nachträgliche) Dokumentation ====
Santoku Linux enthält von Haus aus sowohl den "Dalvic Debug Monitor" (deprecated) als auch den "[[http://developer.android.com/tools/help/monitor.html|Android Device Monitor]]".
Zuletzt genannter kann z. B. aus einem Terminal wie folgt gestartet werden:
user@Santoku:~$ monitor
{{ :wip:android_device_monitor.png?600 |Android Device Monitor}}
Das "Device Screen Capture"-Fenster kann über die Fotoapperat-Schaltfläche (den habe ich mit einem roten Kreis hervorgehoben) aufgerufen werden:
{{ :wip:device_screen_capture.png?250 |Device Screen Capture}}
Immer bevor ein Screencapture vom Mobiltelefon erstellt werden soll, muss mit einem Klick auf die Schaltfläche "Refresh" (blau eingefärbte) die Vorschau aktualisiert werden.
Mit einem Klick auf "Save" kann der Screencapture gespeichert werden. Hier ein paar Beispiele („USB-Debugging“ + „Aktiv lassen“ aktivieren):
{{:wip:01_menue.png?200|Menü}} {{:wip:02_einstellungen.png?200|Einstellungen}} {{:wip:03_anwendungen.png?200|Anwendungen}} {{:wip:04_entwicklung.png?200|Entwicklung}}
Wie man die beiden Anwendungen beendet, sollte selbsterklärend sein!?
==== ADB ====
Per [[http://developer.android.com/tools/help/adb.html|Android Debug Bridge]] eine Kommandozeile auf dem Mobiltelefon öffnen:
user@Santoku:~$ adb shell
==== MTD ====
Eine grobe Übersicht über die "Partitionierung" des Flash-Speichers ausgeben lassen (oldschool, deprecated aber kompakt):
$ cat /proc/mtd
dev: size erasesize name
mtd0: 00180000 00020000 "pds"
mtd1: 00060000 00020000 "cid"
mtd2: 00060000 00020000 "misc"
mtd3: 00380000 00020000 "boot"
mtd4: 00480000 00020000 "recovery"
mtd5: 008c0000 00020000 "cdrom"
mtd6: 0afa0000 00020000 "system"
mtd7: 06a00000 00020000 "cache"
mtd8: 0c520000 00020000 "userdata"
mtd9: 00180000 00020000 "cust"
mtd10: 00200000 00020000 "kpanic"
Daten des Benutzers sollten sich ausschließlich in "userdata" (mtd8) und "cache" (mtd7) befinden!?
Es geht auch etwas umfangreicher (newworld, aktuell, ausführlich aber umständlicher):
$ for int in 0 1 2 3 4 5 6 7 8 9 10 ; do for file in uevent dev type flags size erasesize writesize subpagesize oobsize numeraseregions name ; do echo "/sys/class/mtd/mtd${int}/${file}:" ; cat "/sys/class/mtd/mtd${int}/${file}" ; done ; echo ; done
/sys/class/mtd/mtd0/uevent:
MAJOR=90
MINOR=0
DEVNAME=mtd0
DEVTYPE=mtd
/sys/class/mtd/mtd0/dev:
90:0
/sys/class/mtd/mtd0/type:
nand
/sys/class/mtd/mtd0/flags:
0x400
/sys/class/mtd/mtd0/size:
1572864
/sys/class/mtd/mtd0/erasesize:
131072
/sys/class/mtd/mtd0/writesize:
2048
/sys/class/mtd/mtd0/subpagesize:
512
/sys/class/mtd/mtd0/oobsize:
64
/sys/class/mtd/mtd0/numeraseregions:
0
/sys/class/mtd/mtd0/name:
pds
/sys/class/mtd/mtd1/uevent:
MAJOR=90
MINOR=2
DEVNAME=mtd1
DEVTYPE=mtd
/sys/class/mtd/mtd1/dev:
90:2
/sys/class/mtd/mtd1/type:
nand
/sys/class/mtd/mtd1/flags:
0x400
/sys/class/mtd/mtd1/size:
393216
/sys/class/mtd/mtd1/erasesize:
131072
/sys/class/mtd/mtd1/writesize:
2048
/sys/class/mtd/mtd1/subpagesize:
512
/sys/class/mtd/mtd1/oobsize:
64
/sys/class/mtd/mtd1/numeraseregions:
0
/sys/class/mtd/mtd1/name:
cid
/sys/class/mtd/mtd2/uevent:
MAJOR=90
MINOR=4
DEVNAME=mtd2
DEVTYPE=mtd
/sys/class/mtd/mtd2/dev:
90:4
/sys/class/mtd/mtd2/type:
nand
/sys/class/mtd/mtd2/flags:
0x400
/sys/class/mtd/mtd2/size:
393216
/sys/class/mtd/mtd2/erasesize:
131072
/sys/class/mtd/mtd2/writesize:
2048
/sys/class/mtd/mtd2/subpagesize:
512
/sys/class/mtd/mtd2/oobsize:
64
/sys/class/mtd/mtd2/numeraseregions:
0
/sys/class/mtd/mtd2/name:
misc
/sys/class/mtd/mtd3/uevent:
MAJOR=90
MINOR=6
DEVNAME=mtd3
DEVTYPE=mtd
/sys/class/mtd/mtd3/dev:
90:6
/sys/class/mtd/mtd3/type:
nand
/sys/class/mtd/mtd3/flags:
0x0
/sys/class/mtd/mtd3/size:
3670016
/sys/class/mtd/mtd3/erasesize:
131072
/sys/class/mtd/mtd3/writesize:
2048
/sys/class/mtd/mtd3/subpagesize:
512
/sys/class/mtd/mtd3/oobsize:
64
/sys/class/mtd/mtd3/numeraseregions:
0
/sys/class/mtd/mtd3/name:
boot
/sys/class/mtd/mtd4/uevent:
MAJOR=90
MINOR=8
DEVNAME=mtd4
DEVTYPE=mtd
/sys/class/mtd/mtd4/dev:
90:8
/sys/class/mtd/mtd4/type:
nand
/sys/class/mtd/mtd4/flags:
0x400
/sys/class/mtd/mtd4/size:
4718592
/sys/class/mtd/mtd4/erasesize:
131072
/sys/class/mtd/mtd4/writesize:
2048
/sys/class/mtd/mtd4/subpagesize:
512
/sys/class/mtd/mtd4/oobsize:
64
/sys/class/mtd/mtd4/numeraseregions:
0
/sys/class/mtd/mtd4/name:
recovery
/sys/class/mtd/mtd5/uevent:
MAJOR=90
MINOR=10
DEVNAME=mtd5
DEVTYPE=mtd
/sys/class/mtd/mtd5/dev:
90:10
/sys/class/mtd/mtd5/type:
nand
/sys/class/mtd/mtd5/flags:
0x400
/sys/class/mtd/mtd5/size:
9175040
/sys/class/mtd/mtd5/erasesize:
131072
/sys/class/mtd/mtd5/writesize:
2048
/sys/class/mtd/mtd5/subpagesize:
512
/sys/class/mtd/mtd5/oobsize:
64
/sys/class/mtd/mtd5/numeraseregions:
0
/sys/class/mtd/mtd5/name:
cdrom
/sys/class/mtd/mtd6/uevent:
MAJOR=90
MINOR=12
DEVNAME=mtd6
DEVTYPE=mtd
/sys/class/mtd/mtd6/dev:
90:12
/sys/class/mtd/mtd6/type:
nand
/sys/class/mtd/mtd6/flags:
0x400
/sys/class/mtd/mtd6/size:
184156160
/sys/class/mtd/mtd6/erasesize:
131072
/sys/class/mtd/mtd6/writesize:
2048
/sys/class/mtd/mtd6/subpagesize:
512
/sys/class/mtd/mtd6/oobsize:
64
/sys/class/mtd/mtd6/numeraseregions:
0
/sys/class/mtd/mtd6/name:
system
/sys/class/mtd/mtd7/uevent:
MAJOR=90
MINOR=14
DEVNAME=mtd7
DEVTYPE=mtd
/sys/class/mtd/mtd7/dev:
90:14
/sys/class/mtd/mtd7/type:
nand
/sys/class/mtd/mtd7/flags:
0x400
/sys/class/mtd/mtd7/size:
111149056
/sys/class/mtd/mtd7/erasesize:
131072
/sys/class/mtd/mtd7/writesize:
2048
/sys/class/mtd/mtd7/subpagesize:
512
/sys/class/mtd/mtd7/oobsize:
64
/sys/class/mtd/mtd7/numeraseregions:
0
/sys/class/mtd/mtd7/name:
cache
/sys/class/mtd/mtd8/uevent:
MAJOR=90
MINOR=16
DEVNAME=mtd8
DEVTYPE=mtd
/sys/class/mtd/mtd8/dev:
90:16
/sys/class/mtd/mtd8/type:
nand
/sys/class/mtd/mtd8/flags:
0x400
/sys/class/mtd/mtd8/size:
206700544
/sys/class/mtd/mtd8/erasesize:
131072
/sys/class/mtd/mtd8/writesize:
2048
/sys/class/mtd/mtd8/subpagesize:
512
/sys/class/mtd/mtd8/oobsize:
64
/sys/class/mtd/mtd8/numeraseregions:
0
/sys/class/mtd/mtd8/name:
userdata
/sys/class/mtd/mtd9/uevent:
MAJOR=90
MINOR=18
DEVNAME=mtd9
DEVTYPE=mtd
/sys/class/mtd/mtd9/dev:
90:18
/sys/class/mtd/mtd9/type:
nand
/sys/class/mtd/mtd9/flags:
0x400
/sys/class/mtd/mtd9/size:
1572864
/sys/class/mtd/mtd9/erasesize:
131072
/sys/class/mtd/mtd9/writesize:
2048
/sys/class/mtd/mtd9/subpagesize:
512
/sys/class/mtd/mtd9/oobsize:
64
/sys/class/mtd/mtd9/numeraseregions:
0
/sys/class/mtd/mtd9/name:
cust
/sys/class/mtd/mtd10/uevent:
MAJOR=90
MINOR=20
DEVNAME=mtd10
DEVTYPE=mtd
/sys/class/mtd/mtd10/dev:
90:20
/sys/class/mtd/mtd10/type:
nand
/sys/class/mtd/mtd10/flags:
0x400
/sys/class/mtd/mtd10/size:
2097152
/sys/class/mtd/mtd10/erasesize:
131072
/sys/class/mtd/mtd10/writesize:
2048
/sys/class/mtd/mtd10/subpagesize:
512
/sys/class/mtd/mtd10/oobsize:
64
/sys/class/mtd/mtd10/numeraseregions:
0
/sys/class/mtd/mtd10/name:
kpanic
==== mount ====
$ mount
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/mtdblock6 /system yaffs2 ro,relatime 0 0
/dev/block/mtdblock8 /data yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock7 /cache yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock5 /cdrom yaffs2 rw,relatime 0 0
tmpfs /tmp tmpfs rw,relatime,size=2048k 0 0
/dev/block/mtdblock0 /pds yaffs2 rw,nosuid,nodev,relatime 0 0
In älteren Android-Versionen (hier 2.2.1) findet das extra für Flash-Speicher entwickelte [[http://www.yaffs.net/|YAFFS2]] Anwendung.
==== YAFFS(2) ====
$ cat /proc/yaffs
YAFFS built:Jan 19 2011 00:32:38
$Id$
$Id$
Device 0 "system"
startBlock......... 0
endBlock........... 1404
totalBytesPerChunk. 2048
nDataBytesPerChunk. 2048
chunkGroupBits..... 0
chunkGroupSize..... 1
nErasedBlocks...... 93
nReservedBlocks.... 5
blocksInCheckpoint. 3
nTnodesCreated..... 6700
nFreeTnodes........ 56
nObjectsCreated.... 1300
nFreeObjects....... 38
nFreeChunks........ 6336
nPageWrites........ 0
nPageReads......... 38640
nBlockErasures..... 0
nGCCopies.......... 0
garbageCollections. 0
passiveGCs......... 0
nRetriedWrites..... 0
nShortOpCaches..... 10
nRetireBlocks...... 0
eccFixed........... 0
eccUnfixed......... 0
tagsEccFixed....... 0
tagsEccUnfixed..... 0
cacheHits.......... 0
nDeletedFiles...... 0
nUnlinkedFiles..... 0
nBackgroudDeletions 0
useNANDECC......... 1
isYaffs2........... 1
inbandTags......... 0
doesTagsEcc........ 1
Device 1 "userdata"
startBlock......... 0
endBlock........... 1576
totalBytesPerChunk. 2048
nDataBytesPerChunk. 2048
chunkGroupBits..... 0
chunkGroupSize..... 1
nErasedBlocks...... 11
nReservedBlocks.... 5
blocksInCheckpoint. 0
nTnodesCreated..... 2300
nFreeTnodes........ 169
nObjectsCreated.... 1000
nFreeObjects....... 168
nFreeChunks........ 75569
nPageWrites........ 19674
nPageReads......... 28191
nBlockErasures..... 205
nGCCopies.......... 1927
garbageCollections. 101
passiveGCs......... 0
nRetriedWrites..... 0
nShortOpCaches..... 10
nRetireBlocks...... 0
eccFixed........... 0
eccUnfixed......... 0
tagsEccFixed....... 0
tagsEccUnfixed..... 0
cacheHits.......... 199
nDeletedFiles...... 0
nUnlinkedFiles..... 1100
nBackgroudDeletions 0
useNANDECC......... 1
isYaffs2........... 1
inbandTags......... 0
doesTagsEcc........ 1
Device 2 "cache"
startBlock......... 0
endBlock........... 847
totalBytesPerChunk. 2048
nDataBytesPerChunk. 2048
chunkGroupBits..... 0
chunkGroupSize..... 1
nErasedBlocks...... 846
nReservedBlocks.... 5
blocksInCheckpoint. 1
nTnodesCreated..... 100
nFreeTnodes........ 99
nObjectsCreated.... 100
nFreeObjects....... 94
nFreeChunks........ 54203
nPageWrites........ 14
nPageReads......... 9
nBlockErasures..... 1
nGCCopies.......... 0
garbageCollections. 0
passiveGCs......... 0
nRetriedWrites..... 0
nShortOpCaches..... 10
nRetireBlocks...... 0
eccFixed........... 0
eccUnfixed......... 0
tagsEccFixed....... 0
tagsEccUnfixed..... 0
cacheHits.......... 0
nDeletedFiles...... 0
nUnlinkedFiles..... 0
nBackgroudDeletions 0
useNANDECC......... 1
isYaffs2........... 1
inbandTags......... 0
doesTagsEcc........ 1
Device 3 "cdrom"
startBlock......... 0
endBlock........... 69
totalBytesPerChunk. 2048
nDataBytesPerChunk. 2048
chunkGroupBits..... 0
chunkGroupSize..... 1
nErasedBlocks...... 10
nReservedBlocks.... 5
blocksInCheckpoint. 1
nTnodesCreated..... 300
nFreeTnodes........ 31
nObjectsCreated.... 100
nFreeObjects....... 95
nFreeChunks........ 676
nPageWrites........ 0
nPageReads......... 0
nBlockErasures..... 0
nGCCopies.......... 0
garbageCollections. 0
passiveGCs......... 0
nRetriedWrites..... 0
nShortOpCaches..... 10
nRetireBlocks...... 0
eccFixed........... 0
eccUnfixed......... 0
tagsEccFixed....... 0
tagsEccUnfixed..... 0
cacheHits.......... 0
nDeletedFiles...... 0
nUnlinkedFiles..... 0
nBackgroudDeletions 0
useNANDECC......... 1
isYaffs2........... 1
inbandTags......... 0
doesTagsEcc........ 1
Device 4 "pds"
startBlock......... 0
endBlock........... 11
totalBytesPerChunk. 2048
nDataBytesPerChunk. 2048
chunkGroupBits..... 0
chunkGroupSize..... 1
nErasedBlocks...... 9
nReservedBlocks.... 5
blocksInCheckpoint. 1
nTnodesCreated..... 100
nFreeTnodes........ 64
nObjectsCreated.... 100
nFreeObjects....... 55
nFreeChunks........ 585
nPageWrites........ 194
nPageReads......... 248
nBlockErasures..... 4
nGCCopies.......... 175
garbageCollections. 3
passiveGCs......... 0
nRetriedWrites..... 0
nShortOpCaches..... 10
nRetireBlocks...... 0
eccFixed........... 0
eccUnfixed......... 0
tagsEccFixed....... 0
tagsEccUnfixed..... 0
cacheHits.......... 0
nDeletedFiles...... 0
nUnlinkedFiles..... 13
nBackgroudDeletions 0
useNANDECC......... 1
isYaffs2........... 1
inbandTags......... 0
Ein einhängen unter Zuhilfenahme "der" [[http://www.yaffs.net/test-yaffs-under-linux-using-virtualbox-and-vagrant|Referenzimplementierung]] inkl. nachträglicher Installation der "[[http://git.infradead.org/mtd-utils.git|mtd-utils]]" per apt-get/aptitude war leider erfolglos! :-(
Zum Glück unterstützt [[http://www.sleuthkit.org/sleuthkit/|Sleuthkit]] (sowie [[http://www.sleuthkit.org/autopsy/|Autopsy]]) seit geraumer Zeit YAFFS2!
==== root Android ====
Root-Rechte erlangt man nach der Installation der [[https://motorola-global-portal.custhelp.com/app/answers/detail/a_id/88481|USB-Treiber]] am einfachsten mit Hilfe von [[http://superoneclick.us/|Super One Click]]!
(Leider ist hierfür ein M$ Windoof-System von Nöten... aber wozu gibt es VMware Fusion/Oracle VirtualBox!?)
(Allerdings ist die busybox in Super One Click schon etwas älter und enthält noch kein "nanddump"!)
user@Santoku:~$ adb shell
Wenn der Bootloader den Kernel läd, sagt er diesem auch, wie die einzelnen Bereiche im Flash-Speicher eingehängt werden sollen:
$ su
# cat /proc/cmdline
console=/dev/null console=ttyMTD10 rw mem=244M@0x80C00000 init=/init ip=off brdrev=P2A androidboot.bootloader=0x0000 mtdparts=omap2-nand.0:1536k@2176k(pds),384k@4480k(cid),384k@7424k(misc),3584k(boot)ro,4608k@15232k(recovery),8960k(cdrom),179840k@29184k(system),106m@209408k(cache),201856k(userdata),1536k(cust),2m@521728k(kpanic)
==== "wipe" userdate/cache ====
Nach dem Zurücksetzen (formatieren) des Gerätes sah die Flash-Nutzung wie folgt aus:
$ busybox df -h
Filesystem Size Used Available Use% Mounted on
tmpfs 113.1M 0 113.1M 0% /dev
tmpfs 113.1M 0 113.1M 0% /mnt/asec
/dev/block/mtdblock6 175.6M 164.3M 11.4M 94% /system
/dev/block/mtdblock8 197.1M 49.8M 147.3M 25% /data
/dev/block/mtdblock7 106.0M 1.1M 104.9M 1% /cache
/dev/block/mtdblock5 8.8M 8.4M 328.0K 96% /cdrom
tmpfs 2.0M 28.0K 2.0M 1% /tmp
/dev/block/mtdblock0 1.5M 1.4M 144.0K 91% /pds
Um ein Mobiltelefon wirklich forensisch zu sichern, sollte man die Recovery-"Partition" mit einem um Root-Rechte, [[https://de.wikipedia.org/wiki/Netcat|netcat]] und nanddump ergänzten Image flashen und über diese angepasste Recovery-"Partition" eine Sicherung durchführen!