[mobilesafe] 12_root后读取系统短信

Android 4.0

root后读取系统短信

1、修改mmssms.db权限和mmssms.db-journal为777
2、使用后又修改权限为650
3、RootTools.jar
方便在android中发送指令的工具jar
mmssms.db-journal是什么文件?android sqlite *.db-journal
       这两天由于项目需要开始使用sqlite数据库,可是在操作过程中,在databases文件下生成*.db的同时总会对应生成一个*.db-journal。刚开始在网上查找原因,网上有人说是数据库操作错误时生成的日志,可是再怎么仔细检查,都发现我对数据库的操作都是正确的,不会有异常,而且*.db-journal文件的大小一直是0.
       后来看了下sqlite的官方文档,发现该文件是sqlite的一个临时的日志文件,主要用于sqlite数据库的事务回滚操作了。在事务开始时产生,在事务操作完毕时自动删除,当程序发生崩溃或一些意外情况让程序非法结束时,此文件便保存在了磁盘上,以便下次运行时进行事务回滚。
         而android自己的一些机制,又使*.db-journal一直存在。即第一次操作数据库时,*.db-journal文件会被自动创建,且是永久的保存在磁盘中,不会被自动清除的,如果没有操作异常或者不需要事务回滚时,此文件的大小为0。这种机制避免了每次生成和删除*.db-journal文件的开销
核心代码:
public void click(View view) {
    try {
        // 修改mmsms.db的权限为777
        Runtime.getRuntime().exec("su");
        RootTools.sendShell("chmod 777 /data/data/com.android.providers.telephony/databases/mmssms.db",30000);
        RootTools.sendShell("chmod 777 /data/data/com.android.providers.telephony/databases/mmssms.db-journal",30000);
        String path = "/data/data/com.android.providers.telephony/databases/mmssms.db";
        SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READONLY);
        
        StringBuffer sb = new StringBuffer();
        Cursor cursor = database.query("main.sms"nullnullnullnullnullnull);
        while (cursor.moveToNext()) {
            String address = cursor.getString(cursor.getColumnIndex("address"));
            String body = cursor.getString(cursor.getColumnIndex("body"));
            String result = "短信来件人:" + address + " 短信内容:" + body + "/n";
            sb.append(result);
            System.out.println(address+":"+body);
        }
        tv.setText(sb.toString());
        database.close();
        cursor.close();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            // 用完之后重新修改mmsms.db的权限为660
            RootTools.sendShell("chmod 660 /data/data/com.android.providers.telephony/databases/mmssms.db", 30000);
            RootTools.sendShell("chmod 777 /data/data/com.android.providers.telephony/databases/mmssms.db-journal",30000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}