重建sms.db

时间:2011-09-17 02:47:53

标签: ios sqlite

背景故事

今天下午,我回复了女朋友的一封短信,然后显然忽略了我的手机,然后再将它放回口袋里。几分钟后,当我把它拉回来时,我的手机决定在对话中点击“编辑 - >全部清除”,与她一起蒸发两年和两部手机短信史。虽然我有一个电话备份,但此时已经接近三周了,而且还有足够的可靠讨论,我想重建一下;我已经抓住了sms.db的副本,但我认为我使用的方法将文件清理干净,因此其中没有软删除的文本。

问题的肉

我有一个为期三周的我的 sms.db备份,并且可以访问 sms.db的日期副本。我想

  1. 导出她拥有的文本,但我没有(简单,至少是CSV)
  2. 更改“透视”信息(address字段和sent/received/deleted/unknown字段),保留时间戳和文字
  3. 将这些新条目导入/合并到我的sms.db备份
  4. 将此更新后的备份与我当前的sms.db合并(可选/似乎有一个在线实用程序)
  5. 我真的不懂SQL,但愿意学习;我遇到的问题是,根据我的理解,sms.db中的表格在操作系统的生命周期中变得更加相互依赖,触发器现在称为手机外部不存在的C函数,所以这不是一件简单的事情在多个条目上调用单个触发器。有没有人知道解决这种复杂性的任何方法,甚至更好的是,任何已经找到如何将单个条目导入sms.db的实用程序?

    编辑:

    我一直在研究sms.db,从我所知道的,关系非常简单:

    • 对于message,我需要确保所有添加的消息的ROWID都高于当前最高的ROWID
    • msg_group为每个联系人保留最后一条消息的message:ROWID;我可以在address内查找正确的group_member; group_member:group_idmsg_group:ROWID
    • 对应
    • msg_group有一个哈希列;这可能是最难更新的事情,因为我不能立即确定它正在更新什么,或者使用什么哈希
    • sqlite_sequence似乎不是最新的;它的条目似乎都比实际的ROWID小,但我认为这意味着我不必非常惹它。
    • 我不确定我是否能够更改msg_pieces:这是负责处理MMS消息的多个部分的表。

1 个答案:

答案 0 :(得分:0)

嘿,你把这个整理好了吗?如果你还没有我建议看看http://smsmerge.homedns.org/

我一直处于与你相似的位置,但我很幸运,并且有一个比这更新的备份。

如果你需要一只手,请告诉我