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搞残了搞挂了搞成砖头了,我是不负责任滴。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述