从用户数据分区中恢复已删除的内容?


23

因此,Amanda确实度过了一个金发碧眼的时刻,并错误地删除了她在SMS应用中的所有线程。是的,“删除所有线程”可能不应该那么容易调用。

该电话是ZTE Blade,它的所有用户数据均不方便地存储在YAFFS2文件系统中。

我有一个旧的备份,但是从那时起我需要恢复的SMS。SIM卡上可能有一些,所以我已经订购了SIM卡读取器。无论如何,我怀疑它持有的大约二十个垃圾邮件都是网络运营商的垃圾邮件。

因此,我诅咒我无效的备份计划,并誓言将来将SMS备份到GMail。

同时,我决心恢复mmssms.db或它的剩余容量。

首先,我连接adb并检查安装,然后尝试将块复制到SD卡上的映像中:

dd if=/dev/block/mtdblock6 of=/sdcard/data.img 

没有这种运气。我认为强行拆卸将不是一个好主意,并且在任何情况下都可能行不通。

因此,我将busybox的静态链接副本上载到SD卡,并使用conv = noerror选项。

我最后得到的是一个文件,该文件的大小一直不断增加,直到SD卡装满为止。

我究竟做错了什么?ClockworkMod是真正拍摄图像还是只是备份文件并将其打包为图像?是否有YAFFS2恢复程序?(我读过的两篇论文使它看起来可行,但我什至没有看到PoC代码)

感谢收到的任何线索/

编辑:手机已植根。非常扎根:)

进一步编辑:

在mmssms.db-wal中找到的大多数消息:

ls -al /data/data/com.android.providers.telephony/databases
drwxrwx--x    1 radio    radio         2048 Jul 17 20:16 .
drwxr-xr-x    1 radio    radio         2048 Oct 26  2011 ..
-rw-rw----    1 root     root         60416 Jul 17 20:16 mmssms.db
-rw-rw----    1 radio    radio        32768 Jul 17 16:18 mmssms.db-shm
-rw-rw----    1 radio    radio       628832 Jun 30 19:23 mmssms.db-wal
-rw-rw-rw-    1 root     root         60416 Jul 17 20:16 mmssms.db.xxx
-rw-rw----    1 radio    radio       132096 Jun 18 13:25 telephony.db
-rw-rw----    1 radio    radio        32768 Jul 16 22:14 telephony.db-shm
-rw-rw----    1 radio    radio       106928 Jul 16 22:14 telephony.db-wal

运气好的话,SMS Backup&Restore将允许合并。


刀片是否扎根?
t0mm13b 2012年

@Mandy:关于您的另一个问题:Yaffs2是一个闪存文件系统,具有对基础闪存存储的磨损均衡保护(它具有日志构造的数据模型,其中写入未到位,但始终位于“ log”的末尾)并从头部回收旧的未使用空间(非常简单的解释)。如果您没有写太多,您可能会找到较旧的文件实例。通过忽略删除之前的尾巴部分,您可能会很幸运。到目前为止,尚未完成YAFFS2的文件雕刻。
ce4 2012年

Answers:


19

sms数据库将存储在/data/data/com.android.providers.telephony/databases/mmssms.db其中。

最好的办法是,不要插入USB电缆:

  1. 重新启动进入ClockWorkmod恢复。
  2. 进入挂载和存储
  3. 选择 mount /data
  4. 插入USB
  5. 在Windows命令外壳程序或终端中, adb shell
  6. 由于您处于ClockworkMod Recovery中,因此默认情况下您是root用户,现在执行此操作 cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/MySmsDatabase.db
  7. adb shell通过输入以下内容退出:exit
  8. 现在,您的数据库已复制到SD卡。
  9. 从ClockworkMod恢复中退出,然后重新启动,该恢复将unmount /data适合您。

现在,您的数据库现在已复制到整个数据库。并且可以通过使用类似SqliteMan的方法安全地提取。HTH。

编辑: OP有兴趣知道如何完成转储。-继续阅读:)

调用时(插入USB且位于内adb shell

sh-4.1# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00500000 00020000 "recovery"
mtd1: 00500000 00020000 "boot"
mtd2: 00120000 00020000 "splash"
mtd3: 00080000 00020000 "misc"
mtd4: 02580000 00020000 "cache"
mtd5: 0d700000 00020000 "system"
mtd6: 0cb80000 00020000 "userdata"
mtd7: 00020000 00020000 "oem"
mtd8: 00180000 00020000 "persist"

知道哪个分区是关键。例如,从我的Blade上,我可以看到userdata在该分区上mtd6,可以在其中找到实际的分区信息,/dev/mtd/mtdX因此使用以下方法即可cat

cat /dev/mtd/mtd6 > /sdcard/myuserdata.dump

然后/sdcard/myuserdata.dump,根据该分区上使用的文件系统,使用,可以通过环回安装。里程会有所不同,当然,这是鸡和蛋的情况,为了做到所有这些,手机必须扎根。


这很有用,所有(或至少大部分)已删除的SMS都位于mmssms.db-wal中:非常感谢您提供了有用的指针!
曼迪(Mandy)2012年

我的问题仍然存在-如果情况需要,是否可以转储图像?
曼迪(Mandy)2012年

是的,我将修改答案... :)
t0mm13b 2012年

@ t0mm13b这是一个很好的答案:) +1
Zuul

1
先生,您好!踢自己不坚持使用find -iname和grep,但恐慌会对您造成伤害。另外,我还希望能用适当的eejit将我所有的SMS传送到字符串中,并减少阅读的次数,所以再次感谢;)
Mandy 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.