RootExplorer怎么样获取root权限的 linux root权限获取

Android系统上面有名的RootExplorer很强大,可以操作任何目录下的文件,包括像/data/data这样需要root权限才能访问的地方。它是怎么样做到的呢?

这里要先提一个开源项目,地址是:

http://code.google.com/p/superuser/

大家可以用SVN把源码下载到本地,与系统源码一起编译就可以了。编译完成后会生成两个文件,一个是二进制可执行文件su,另一个是Superuser.apk。把su复制到系统的/system/bin目录,再把Superuser.apk复制到系统的/system/app目录。

这样,就可以用下面的代码执行su命令时,就会启动Superuser.apk中的Activity弹出标题为“以下程序要求授予最高权限...”的对话框,用户同意之后,APK就有ROOT权限了。

下面看看APK里面的代码。

[java] view plaincopy

ProcessBuilderpb=newProcessBuilder("/system/bin/sh");

pb.directory(newFile("/"));//设置shell的当前目录。

try{

Processproc=pb.start();

//获取输入流,可以通过它获取SHELL的输出。

BufferedReaderin=newBufferedReader(newInputStreamReader(proc.getInputStream()));

BufferedReadererr=newBufferedReader(newInputStreamReader(proc.getErrorStream()));

//获取输出流,可以通过它向SHELL发送命令。

PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(proc

.getOutputStream())),true);

out.println("pwd");

out.println("suroot");//执行这一句时会弹出对话框(以下程序要求授予最高权限...),要求用户确认。

out.println("cd/data/data");//这个目录在系统中要求有root权限才可以访问的。

out.println("ls-l");//这个命令如果能列出当前安装的APK的数据文件存放目录,就说明我们有了ROOT权限。

out.println("exit");

//proc.waitFor();

Stringline;

while((line=in.readLine())!=null){

System.out.println(line);

}

while((line=err.readLine())!=null){

System.out.println(line);

}

in.close();

out.close();

proc.destroy();

}catch(Exceptione){

System.out.println("exception:"+e);

}

有了root权限,再结合ls,cp,mv等命令,整个系统的所有目录都可以操作了。

有一些问题目前还没有找到答案:

如果我用ADB从Ubuntu上面执行su root,用户在弹出的对话框上选同意的话,命令会很快返回,接下面提示符就变成#了。

但是,我用代码在APK里面测试的时候,只是偶尔会成功,发现大部分时候会卡死在out.println("su root");这一句上。即,用户在对话框上面选同意后程序没有响应,DDMS也看不到输出。再等上一会儿,程序无响应需要强制关闭的对话框就出来了。这个项目还是不完善的地方,不过思路真的不错。
RootExplorer怎么样获取root权限的 linux root权限获取

更多2

上一篇Gallery中实现多点触摸

下一篇RootExplorer怎么样获取root权限的——续

主题推荐

开源项目 对话框 exception 二进制 源码

猜你在找

android listView滚动时checkBox的状态不会保存的问题

使用 新花生壳+海康威视网络摄像头监控系统 搭建远程视频监控服务[转载]

Android armeabi armeabi-v7a

android网络类型 wap代理设置

流媒体开发之-音悦台TV页码链接解析

android 系统提示对话框(AlertDialog)的使用

Nodejs+express 实战,实现系统监控功能

调用腾讯接口,获取电脑ip,所在省份城市[PHP实现]

Android的PackageManager和ActivityManager的功能简介

Android控件倒计时的实现

查看评论

9楼 wang382758656 2014-03-04 14:11发表 [回复]



这样就行,不会卡死,su和其他的命令在一个绘话里就可以了,sh不用显示的调用

try {

Runtime r=Runtime.getRuntime();

Process proc =r.exec("su");

//Process proc = pb.start();

// 获取输入流,可以通过它获取SHELL的输出。

BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));

BufferedReader err = new BufferedReader(new InputStreamReader(proc.getErrorStream()));

// 获取输出流,可以通过它向SHELL发送命令。

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);

//out.println("pwd");

//out.println("su root");// 执行这一句时会弹出对话框(以下程序要求授予最高权限...),要求用户确认。

for (String str : list) {

out.println("chmod 777 " + str);

}

Re: LIAOXUNJI 2014-07-17 17:01发表 [回复]



回复wang382758656:怎能么我的都没有root的提示,用了你的方法,有demo参考一下吗

8楼 heikefangxian23 2012-10-11 22:13发表 [回复]



不好意思的问,“把su复制到系统的/system/bin目录”,这个如何做到,我在adb shell下面直接用mv命令拷贝都提示“/system/bin”目录是只读目录。各位是怎么实现拷贝su到这个目录下的呢?

7楼 raysean 2012-05-29 14:57发表 [回复]



将程序中的out.close();放在out.println("exit");之后程序就可以正常的获取root权限并且结束了。在When Runtime.exec() won't这篇文章里有提到似乎要清空所有的stream后process才会正常的结束,包括errorInputStream,inputStream和outPutStream。

Re: Android老码农 2012-06-09 21:27发表 [回复]



回复raysean:感谢感谢。

6楼 flying_vip_521 2012-01-31 17:51发表 [回复]



我已经通过svn下载了源码,Superuser在eclipse中编译通过,可是su程序怎么编译呢?一定要搭建linux下的源码环境吗?另外作为上层应用开发者,system/bin和system/app没有权限吧,su程序一定要放在systemn/bin目录下吗?

Re: Android老码农 2012-02-02 13:26发表 [回复]



回复flying_vip_521:你说的都对着呢,兄弟。一般应用开发者没办法拿到ROOT权限。

5楼 langya2007 2012-01-13 17:30发表 [回复]



请问博主, RootExplorer.apk是如何实现的,有源码么? 谢谢.

Re: Android老码农 2012-01-16 09:34发表 [回复]



回复liranke:这个真没有,那是国外的收费软件,国内破解了已经不错了,兄弟。

4楼 langya2007 2011-12-06 13:07发表 [回复]



"问题已经解决,需要以 su -c xxxx.sh的方式运行":

是不时说将上面代码中的那几个命令写成一个.sh文件,在用"su -c xxxx.sh"来运行这个sh文件?

或者,该如何理解这句话?

Re: wang382758656 5天前 22:21发表 [回复]



回复liranke:例如

sc -c rmdir xx.txt

3楼 kkandkkg 2011-11-09 03:46发表 [回复]



楼主,我也遇到了和你一样在out.println("su root");偶尔会成功,而经常不成功。也尝试了"berg65123068 " 的su -c /system/bin/sh 方法也不成功,楼主有解决办法了吗?

感觉RootExplorer也是按这种方法做的吧,不明白为什么RootExplorer不会出错呢.

Re: Android老码农 2011-11-09 10:26发表 [回复]



回复kkandkkg:抱歉,还没有呢,你看看eid的原理,然后检查一下su程序的权限是不是正确呢。老兄你要解决了的话也在这留言告诉来的这人一声吧。

2楼 berg65123068 2011-09-16 13:14发表 [回复]



问题已经解决,需要以 su -c xxxx.sh的方式运行

Re: 余龙飞 2013-05-07 11:20发表 [回复]



回复berg65123068:请问,你提到的 sh文件 需要放在哪里?

Re: Android老码农 2011-09-17 21:42发表 [回复]



回复berg65123068:多谢。这个遗留问题终于有人解决了,呵呵。同学你是做Android应用开发还是系统开发?留个联系方式咱们以后多交流交流。

我QQ:345017062

1楼 berg65123068 2011-09-16 10:23发表 [回复]



Hi,

我按照文中的方法,在APK里面执行out.prontln("su root")遇到的情况和你一样,只不过我是单独放在一个thread里执行的,这样程序没有出现无响应的状况.可是APK依然拿不到root权限.

请问,any updates?

  

爱华网本文地址 » http://www.413yy.cn/a/25101013/182304.html

更多阅读

怎么样处理烦人的垃圾短信 手机垃圾短信过滤软件

怎么样处理烦人的垃圾短信——简介短信诈骗、短信促销、短信广告相信大家都遇到过,例如:“你中了某某某节目大奖。。。需要缴纳XXX税”、“XXXX大型促销活动”、“XXX什么保险”想必大家有时候一天都能接到几十条类似的短信,那么针对这

跳高的技巧怎么样提高? 跳高的技巧

高是田径运动的田赛项目。是一种由有节奏的助跑、单脚起跳、越过横杆落地等动作组成,以越过横杆上缘的高度来计算成绩的比赛项目。跳高是运动征服高度的运动项目,是人类不屈不挠,勇攀高峰的象征。也有人称跳高是一失败者的运动,因为每次

怎么样在win7系统的桌面添加IE图标? xp系统ie图标不见了

怎么样在win7系统的桌面添加IE图标?——简介 windows7系统默认情况桌面上是没有IE图标,这对我们这些习惯在桌面找IE的图标童鞋们是很别扭的,是很习惯的。进行此更改微软给出的解释是:为了出于兼容性原因而确保可轻松删除 Internet Explo

单板机上的LINUX,从零开始四 从零开始异世界web四

上一篇介绍了单板机装载程序(Bootloader)U-Boot的生成。本文介绍一个小Linux内核的生成。使用的Linux内核源代码版本是3.14.12(最新是3.14.16了),是比较新的版本,而且3.14也是一个会长期维护的版本。由内核源代码到生成内核,需要首先进行

声明:《RootExplorer怎么样获取root权限的 linux root权限获取》为网友指尖凝香分享!如侵犯到您的合法权益请联系我们删除