Android Telephony Providers数据库分析
2015-10-04(日) by chenjia.me目标
由于在New Moto G LTE 2015 版本的CM12.1存在 在使用两个SIM卡后再次插入第三张SIM卡导致com.android.phone
程序崩溃(FC),错误是数组下标越界。
在不想恢复出厂设置的情况下,我就顺带研究了一套的phone相关的Applicaion,最后将目标锁定在了com.android.providers.telephony
这个应用。这个程序是系统的通信内容的核心,不能通过设置-应用中清理该程序数据,所以就通过ADB把其数据dump出来进行查看。
数据库分析
- blacklist.db
- HbpcdLookup.db
- mmssms.db
- telephony.db
blacklist.db
通过通讯录添加的黑名单数据将会保存在这里
HbpcdLookup.db
基础功能的数据存储,查看后发现有大量mcc数据,包括全球各个国家的数据以及时区,国家区号,MCC编号等
mmssms.db
短信数据库,内容不容多说,dump it你就可以获取别人的信息的。
telephony.db
这个就是本文的关键,这个里面存储着全球运营商的数据,以及你手机SIM卡相关的数据。
其中,carriers
表存储的是全球运营商的数据,包括他们的一些基础设置,比如APN,MMS的接收信息,这也是为神马你插入一张手机卡后Android可以自动配置,能够和运营商交互等的数据基础
siminfo
就是保存所有插入的SIM卡的信息,其建表参数为下表所示:
CREATE TABLE siminfo(
_id INTEGER PRIMARY KEY AUTOINCREMENT,
icc_id TEXT NOT NULL,
sim_id INTEGER DEFAULT -1,
display_name TEXT,
carrier_name TEXT,
name_source INTEGER DEFAULT 0,
color INTEGER DEFAULT 0,
number TEXT,
display_number_format INTEGER NOT NULL DEFAULT 1,
data_roaming INTEGER DEFAULT 0,
mcc INTEGER DEFAULT 0,
mnc INTEGER DEFAULT 0,
sub_state INTEGER DEFAULT 1,
network_mode INTEGER DEFAULT -1,
user_network_mode INTEGER DEFAULT -1)
所以我们如果要修复SIM卡相关的信息,我们只要清除这个表然后重启就好了。
表sqlite_sequence
保存的siminfo的数值,如果清除siminfo的信息依然报错可以尝试清理这个值。
自动清理工具
根据这些信息我开发了一个工具用来自动清理数据,下载地址将在下篇文章放出。
文章地址: http://blog.chenjia.me/articles/151004-121731.html
下载地址:https://github.com/fashioncj/SimClearTool/blob/master/app-release-unaligned.apk?raw=true