`
伊莉莎黑
  • 浏览: 12964 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Android程序获取Root权限的一点问题

阅读更多
前几天在group上看到有人问这么个问题:

Hi guys,
I'm working on a G1 rooted. I have to implement program that execute "Root
explorer".
I have write this code :
        Process p; 
        try { 
            p = Runtime.getRuntime().exec("su"); 
            // OK 
            DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
            os.writeBytes("echo \"HELLO!!!!!!!!\" >/system/test.txt\n"); 
            os.writeBytes("exit\n"); 
            os.flush(); 
            ////////////////////////////////////// 
            // ERROR 
            File dir = new File("/data"); 
            String [] list = dir.list(); 
            Log.v("TEST]", String.valueOf(list.length)); 
            //////////////////////////////////////////////////// 
            try { 
                p.waitFor(); 
                int exit = p.exitValue(); 
                    if (exit != 255) { 
                        Log.v("TEST]", "ok"); 
                    } 
                    else { 
                        Log.v("TEST]", "Error"); 
                    } 
            } catch (Exception e) { 
                Log.v("TEST]",e.getMessage()); 
            } 
        } catch (Exception e) { 
            Log.v("TEST]",e.getMessage()); 
        } 


I use Superuser.apk for execute "su" command. My program write file test.txt
in /system but statement Log.v("TEST]", String.valueOf(list.length)); return
value 0.
Please, can anyone help me?
Thanks,
Francesco


这段代码的执行结果是/system/test.txt这个文件的确被创建并写入了HELLO!!!!!那个字符串,但是却无法ls /data这个目录(这两个操作都需要root权限才可以的)

其实答案很简单:以root权限运行的只是那个叫p的进程,而Android程序本身并不是以root身份在运行
p = Runtime.getRuntime().exec("su"); 



这就不难理解为什么通过命令行可以执行root权限才执行的操作,而在Android程序中却不可以。


下面这段代码很好的说明了在那个叫p的进程里面的确可以执行root权限才能执行的操作
Process p = Runtime.getRuntime().exec("su");
		
DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
DataInputStream is = new DataInputStream(p.getInputStream());
            
os.writeBytes("cd /data/data \n");
os.writeBytes("ls \n");
os.writeBytes("exit \n");
os.flush();

p.waitFor();

byte[] buffer = new byte[is.available()];
is.read(buffer);
String s = new String(buffer);
Log.v("TEST", s);


这段代码的执行结果是打出了/data/data下的文件及目录


0
0
分享到:
评论
4 楼 伊莉莎黑 2012-05-01  
ihopethatwell 写道
没有吧,用的模拟器测试的

那不行,设备必须能获取到root权限才可以的
3 楼 ihopethatwell 2012-04-27  
没有吧,用的模拟器测试的
2 楼 伊莉莎黑 2012-04-26  
ihopethatwell 写道
这里无法打出了/data/data下的文件及目录 ,用sh 命令也不行

你的设备root了么?
1 楼 ihopethatwell 2012-03-20  
这里无法打出了/data/data下的文件及目录 ,用sh 命令也不行

相关推荐

    android 系统获取ROOT权限工具

    android 获取ROOT权限工具, 手机可以删除ROM自带的无用程序,使用需要ROOT才能运行的软件

    Android修改源码让APP获取root权限可以执行su命令的git diff记录

    修改源码让APP获取root权限可以执行su命令的git diff记录

    Android应用源码获取root权限静默安装.rar

    Android应用源码获取root权限静默安装是一个获取root权限后,不弹出系统安装界面,直接进行安装的的源码。代码只有一个MainActivity,看起来相对比较容易,代码中重要部分都已加入详细的注释,方便大家阅读。不过...

    Android应用源码获取root权限静默安装

    不过应用程序运行命令获取ROOT权限,设备必须已破解(获得ROOT权限),代码中主要对流进行操作,有对文件读写不清楚的都可以看看。(源码采用GBK编码)。之前也介绍过一个静默卸载的项目...

    安卓应用程序永久获取Root权限的方法

    压缩包内有apk,demo源码,以及NDK 安装文档,主要是教你如何在已经root过得手机上只通过一次获取root权限,以后就再也不会弹出root授权框,主要思想是绕过superuser.apk的权限检查

    Magisk:Android 获取 Root 权限的工具 它可以快速、无痛地获得 Android 的超级用户权限

    Magisk:Android 获取 Root 权限的工具。它可以快速、无痛地获得 Android 的超级用户权限,支持 Android 5.0 以上的设备。 介绍 Magisk是一套用于定制Android的开源软件,支持高于Android 5.0的设备。 一些突出特点...

    Android系统Root权限获取与检测

    一个应用程序的进程就是一个安全的沙盒。它不能干扰 其它应用程序,除非显式地声明了“permissions”,以便它能 够获取基本沙盒所不具备的额外的能力。它请求的这些权限 “permissions”可以被各种各样的操作处理,...

    Android手机获取root权限并实现关机重启功能的方法

    本文实例讲述了Android手机获取root权限并实现关机重启功能的方法,是Android程序设计中非常常见的重要功能。现分享给大家,供大家在Android程序开发中参考之用。 具体功能代码如下: /* * 执行命令 * @param ...

    Android应用获取永久Root的方法_专利.pdf

    本发明提供一种安卓应用程序永久获取Root 权限的方法,将需要用到Root 权限的操作进行编 写,并编译成一可执行程序文件,将该文件包含在 应用程序中,应用程序通过一次su 程序授权,将 文件拷贝到/system/bin 的目录...

    安卓2.2|3.0ROOT权限获取

    GingerBreak是一款非常有用的一键获取ROOT权限的小工具,这款软件能够在Android 2.2和Android 3.0系统中正常使用! 使用须知: - 你必须要在你的Android设备上启用USB调试; - 你需要你的Android设备中有一个可用的...

    SuperOneClickv2.3.3

    根据作者的介绍,v2.36能够获取任意Android版本的ROOT权限(Android 2.3.7除外)。 请一定要确认你的电脑中已经安装了USB驱动了! 还有需要拔出外置SD卡! 如果红字部分你都做到了还不能够成功ROOT的话,请...

    Android root app

    Android获取root权限,源代码,可以加到程序中使用.

    安卓系统Root权限破解

    根据作者的介绍,v1.9.1能够获取任意Android版本的ROOT权限(Android 2.3.4除外)。 请一定要确认你的电脑中已经安装了USB驱动了! 还有需要拔出外置SD卡! 如果红字部分你都做到了还不能够成功ROOT的话,请尝试...

    Android中Root权限获取的简单代码

    但是对于用户来说,当然希望能拥有Root权限以将手机修改成自己的一种特色,因为有Root权限则可以任意修改手机的所有文件跟程序,让手机更加个性化。 代码如下:Process process = null; try{ process = Runtime....

    Android Root设备中的su权限获取和使用详解

    然后装了一堆开机自动启动,而用户这辈子也用不到也卸载不了垃圾软件(相信使用安卓的同学们都懂我的意思),而苹果所说的越狱,也就是获取ROOT权限。 为什么需要获取ROOT权限? 苹果用户获取ROOT权限,是为了可以...

    c++builder的Android程序中执行Shell命令

    本单元实现了一个伪的Shell,可以用于在Android程序中执行Shell命令,如果需要Root权限,则在执行前,调用AskForRoot方法来获取用户的Root授权,如果不再需要在Root账号下执行命令,则调用ExitRoot方法来退出Root...

    一键获取索爱sk17i ROOT 权限

    echo ┃ (正在获取临时 Root 权限) ┃ echo ┃ ┃ echo ┃ ┃ echo ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ adb shell rm -r /data/local/tmp adb shell mkdir /data/...

Global site tag (gtag.js) - Google Analytics