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出来进行查看。

数据库分析

  1. blacklist.db
  2. HbpcdLookup.db
  3. mmssms.db
  4. 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


Comments