iPhone短信的伪造

iOS的短信存放在/private/var/mobile/Library/SMS/sms.db中,是SQLite形式的数据库。而且普通的mobile用户有写权限。这就使得短信伪造成为可能。在一个小时的努力之后,终于成功伪造了一条短信。

sms.db很容易就可以下载到本地并使用SQLite Browser查看。可以发现主要的表有三个,message存储各个短信的内容,msg_group存储会话的相关信息,group_member存储各个会话的参与成员。果断修改message表,果断得到报错找不到read()函数。

read()是个什么鸟?上网搜了一下发现苹果果然在里面做了手脚。在数据库中有数个trigger,当试图更新/插入/删除message表的条目时,它会调用一个read()来更新未读短信数。只有通过SDK中一个未公开的函数来进行短信操作时,这个read()才能被正常调用,否则trigger无法正常执行,对数据库的更改也不能完成。(但印象里SQLite的trigger不支持外部函数,这个read()到底是个什么鸟还是不太清楚,有知道的烦请告知)

好在对于学过数据库的CSer来说这也不是什么问题,果断drop trigger哐哐哐就能改了。上网搜了一下发现原有的trigger还有维护数据一致性的作用,可以重定义它们来简化后续的插入工作。

在重定义trigger之后就可以进行数据表的修改了。很容易就能得到图中所示的效果。但是因为现在没有了read()函数来进行未读信息的维护工作,短信的未读条数显示好像有点问题。所以目前的方法只适用于短期骗骗人,如果长期用的话还是用系统自带的trigger比较保险一些。

P.S. 如果自己想尝试的话请事先做好备份工作,把自己的小iPhone搞残了搞挂了搞成砖头了,我是不负责任滴。

posted on 2011-03-31 02:11  grapeot  阅读(8475)  评论(0编辑  收藏  举报

导航