因此,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备份和还原将允许合并。

评论

您的刀片是否扎根?

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

可能会有帮助:如何从/ data分区恢复已删除的文件?

#1 楼

短信数据库存储在您要执行的/data/data/com.android.providers.telephony/databases/mmssms.db中。

最好的方法是这样,还没有插入USB电缆:


重新启动ClockWorkmod Recovery。
进入安装和存储
选择mount /data

插入USB
从Windows命令外壳或终端中,adb shell

由于您处于ClockworkMod Recovery中,因此默认情况下您是root用户,现在请输入以下内容来执行此操作:cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/MySmsDatabase.db

现在,请输入以下内容:数据库已复制到SD卡。
退出ClockworkMod恢复并重新启动,恢复将为您提供便利。

现在,您的数据库现在已复制到整个数据库。并且可以使用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在分区exit上,可以在unmount /data内找到实际的分区信息,因此使用adb shell可以做到这一点:

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


从那里开始,根据分区上使用的文件系统,使用mtd6,可以通过环回挂载它。里程会有所不同,当然这是鸡和蛋的情况,要做到所有这些,手机必须扎根。

评论


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

– Mandy
2012年7月17日19:32

我的问题仍然存在-如果情况需要,是否可以转储图像?

– Mandy
2012年7月17日19:32

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

– t0mm13b
2012年7月17日在19:42

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

– Zuul
2012年7月17日在21:48

先生,您好!踢自己不坚持使用find -iname和grep,但是恐慌会对您造成伤害。另外,我还想找一个合适的eejit,将我所有的SMS都传送到字符串中,而少读一些字符串,所以再次感谢;)

– Mandy
2012年7月18日在21:52