Android Root的一些理解
来源:互联网 发布:税务申报软件 编辑:程序博客网 时间:2024/06/04 23:33
Android Root 的一些理解
之前做过一些有关Android Root的项目,对Android系统的Root也有一些浅薄的理解,在此记录一下。
Android Root 的介绍
相信用Android 的同学对Root并不陌生,其对应与IOS的越狱,Root以后可以对手机进行个性化,也可以卸载系统预装的软件等,好处很多,但是也有很多风险,Root后的应用就是获取到了手机的最高权限,如果此应用是恶意的话,那么他的恶意行为因为获取到Root权限而变的很难控制。
下面有几篇文章,对Android Root后的风险做了分析,写的很好:
android手机root后的安全问题
Android Root 原理
Android Root的方法需要区分版本,在4.3之前,只需要修改位于/system/bin或/system/xbin中的su文件便可达到Root的目的。正常情况下,su文件只能shell或者root用户来提升权限,因为在su.c文件中有如下控制代码:
/* /source/system/extras/su/su.c */ if (myuid != AID_ROOT && myuid != AID_SHELL) { fprintf(stderr,"su: uid %d not allowed to su\n", myuid); return 1; }
可以看到,如果是非root或者shell直接退出。所以,最简单的修改su文件的方法就是注释掉这几行代码,之后重新编译,将生成的su文件替换掉/system/bin或者/system/xbin目录下原来的su文件。不过,正常系统下是没有权限替换su文件的,所以就需要靠系统的漏洞或者刷机来替换,具体的漏洞就不提了,更下详细的可以参考这里:
Android手机Root授权原理细节全解析
Android Root原理和流程分析
然而在4.3以后,此前方法行不通了,新的方法是在系统启动时,启动一个daemon进程,此时是root权限,之后此进程一直运行,当需要root时,将root 命令发送给此daemon进程让他来执行,从而达到了root的目的。
Apk中如何获取Root权限
想要在Apk中获取root权限,主要使用的是Runtime这个类,主要代码如下:
String[] commands = {"remount...", "...", ...}; 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) { } }
先写到这里,以后有时间继续写一点。
- Android Root的一些理解
- 对Android系统 root的理解
- Android root 一些文章
- root文件系统的理解
- 关于Android的HAL的一些理解
- Android学习笔记---Layout的一些理解
- android 中关于 activity 的一些理解
- Android 对View的一些理解
- Android View 系统的一些理解
- android中一些基本知识的理解
- android audio我的一些理解
- 对Android Service的一些理解
- android--RelativeLayout布局的一些理解
- 对Android Service的一些理解
- android中一些概念的理解
- Android自定义View的一些理解
- Android监听回调的一些理解
- 关于android layout的一些理解
- Android5.0之后获取后台正在运行的程序
- 多线程
- linux修改用户最大连接线程数
- centos下卸载删除oracle软件和实例
- 第一次上机实验1—3
- Android Root的一些理解
- pipy的安装,pbr安装---备忘
- 欧拉项目第11题 Largest product in a grid
- web storage API
- 数据结构——《大话数据结构》之时间复杂度
- Mac本PS滤镜库无法使用的解决方案
- Unity3d中添加json的system.web.script.serialization
- Android 常用限定符
- Oracle RAC 10.2.0.1 升级 10.2.0.5