Android文件系统恢复研究

很久以前写的,突然需要,翻出来看一下。


4-131223162451615

1、root

2、拷贝busybox到/system/bin扩展命令,注意要先remount,然后更改busybox权限

3、进入adb shell,执行busybox df查看挂载的磁盘(嫌拷busybox麻烦直接用mount命令也行)

busybox df
Filesystem           1K-blocks      Used Available Use% Mounted on
tmpfs                   171620        76    171544   0% /dev
tmpfs                   171620         0    171620   0% /mnt/asec
tmpfs                   171620         0    171620   0% /mnt/obb
/dev/block/mtdblock0    320000    239068     80932  75% /system
/dev/block/mtdblock3    389120    173904    215216  45% /data
/dev/block/mtdblock2    230400      1164    229236   1% /cache
/dev/block/mtdblock1    10240      2440      7800  24% /data/idd
/dev/block/vold/179:1    7745748   4033016   3712732  52% /mnt/sdcard
/dev/block/vold/179:1    7745748   4033016   3712732  52% /mnt/secure/asec

4、我们主要关心/data文件系统下的内容,只要把对应的/dev/block/mtdblock3分区dump到本地

5、如果是ext格式的可以通过dd命令按位拷贝磁盘到文件

dd if=/dev/block/mtdblock3 of=/sdcard/datadump

如果是yaffs格式的,这个操作不行,会提示IO错误,无法读取,需要用下面的方法6、7

6、参考http://androidforums.com/optimus-s-all-things-root/219777-need-dump-build-recovery.html

通过查看/proc/mtd文件读出对应的磁盘文件

# cat /proc/mtd  (4.x后要用cat /proc/partitions)    最新的三星需要ls -l /dev/block/platform/ 应该是通用的
cat /proc/mtd
dev:    size   erasesize  name
mtd0: 13880000 00020000 "system"        //系统盘,ROM,相当于上面的/dev/block/mtdblock0    320000    239068     80932  75% /system
mtd1: 00a00000 00020000 "appslog"
mtd2: 0e100000 00020000 "cache"
mtd3: 17c00000 00020000 "userdata"    //用户数据盘,最重要,相当于上面的/dev/block/mtdblock3    389120    173904    215216  45% /data

7、dd if=/dev/mtd/mtd0 of=/sdcard/system.img bs=4096  //按位克隆ROM,注意要加bs,否则会报参数错误
dd if=/dev/mtd/mtd3 of=/sdcard/userdata.img bs=4096  //按位克隆用户数据

也可用cat /dev/mtd/mtd0>/sdcard/catsystem.img

用DD方式拷贝出来的img文件无法读取和挂载只能十六进制搜索

磁盘分区为/dev/sda1,挂载点为/boot,备份文件设定为/data2/boot.disk;
dd if=/dev/sda1 of=/tmp/boot.disk
备份出来的文件甚至可以用mount 挂载:mount -o loop /tmp/boot.disk  /mnt

8、克隆出的img文件用encase分析,深度挖掘

9、命令行打开模拟器emulator -avd 2.3.3 -partition-size 400  分区强制设定为400M

系统备份 busybox tar -cvf /sdcard/datadata.tar /data/data

busybox tar -cvf /sdcard/dataapp.tar /data/app

busybox tar -cvf /sdcard/systemapp.tar /system/app

-p  :使用原档案的原来属性(属性不会依据使用者而变)

恢复         busybox tar -xvf /sdcard/dataapp.tar

busybox tar -xvf /sdcard/datadata.tar

busybox tar -xvf /sdcard/systemapp.tar

备忘:

http://hi.baidu.com/serial_story/blog/item/263bcdd3e321ebd5a9ec9a9f.html

Linux系统中/dev/mtd与/dev/mtdblock的区别,即MTD字符设备和块设备的区别

mtd是字符设备,mtdblock是块设备,由于驱动原因不能用nandwrite,flash_eraseall,flash_erase等工具去对/dev/mtdblockN去操作了。因为/dev/mtdblock中不包含对应的ioctl,不支持你这么操作。对字符设备mtd操作就是作用于块设备mtdblock,所以上面直接dd块设备报错了

 

钛备份工作原理:

1、备份:tar获取/system/app 、/data/app、/data/data三个目录下的文件

2、恢复:用户程序先安装然后倒入数据;系统文件只恢复部分兼容的,将程序文件和数据复制到对应目录下

 

Linux恢复删除

debugfs    http://blog.chinaunix.net/space.php?uid=20778443&do=blog&id=94583

ext3grep   http://hi.baidu.com/wangtao8899/blog/item/cda6f2d923c8dbec38012f2d.html

http://scglinux.blog.51cto.com/4383041/903705

Moto

dd if=/dev/block/mmcblk0p16 of=/sdcard-ext/datamoto.img  有密码的话数据库文件需要密码

Samsung 联系人在dbdata目录

2013.8.22更新

参考http://linuxsleuthing.blogspot.hk/2011/06/defeating-droid-let-pillaging-begin.html

先执行mount命令

# mount
rootfs / rootfs ro,relatime 0 0
...
/dev/block/mtdblock4 /system yaffs2 ro,relatime 0 0
/dev/block/mtdblock6 /data yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock5 /cache yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock0 /config yaffs2 ro,relatime 0 0
...

提示IO错误的情况下用busybox dd conv=noerror 命令跳过错误,经验证,不行

Android系统默认2.2以前用yaffs格式,2.3以后用ext格式,主要是emmc替代nand已经成为主流,以后基本不会遇到yaffs格式的了。