Android Root的一些理解

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) {  
                }  
            }  

先写到这里,以后有时间继续写一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值