Android应用程序里面怎样执行Linux命令,怎么得到root权限
Android应用程序里面怎样执行Linux命令,怎么得到root权限 --------------------编程问答-------------------- Android运行底层linux外部命令的实现http://monner.javaeye.com/blog/754303
--------------------编程问答-------------------- Android在Shell环境下运行Linux命令
package my.android.code;
import android.os.Environment;
import dalvik.annotation.Signature;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Vector;
public final class RootCmd
{
//执行linux命令并且输出结果
protected static Vector execRootCmd(String paramString)
{
Vector localVector = new Vector();
try
{
Process localProcess = Runtime.getRuntime().exec("su ");//经过Root处理的android系统即有su命令
OutputStream localOutputStream = localProcess.getOutputStream();
DataOutputStream localDataOutputStream = new DataOutputStream(localOutputStream);
InputStream localInputStream = localProcess.getInputStream();
DataInputStream localDataInputStream = new DataInputStream(localInputStream);
String str1 = String.valueOf(paramString);
String str2 = str1 + "\n";
localDataOutputStream.writeBytes(str2);
localDataOutputStream.flush();
String str3 = localDataInputStream.readLine();
localVector.add(str3);
localDataOutputStream.writeBytes("exit\n");
localDataOutputStream.flush();
localProcess.waitFor();
return localVector;
}
catch (Exception localException)
{
localException.printStackTrace();
}
}
//执行linux命令但不关注结果输出
protected static int execRootCmdSilent(String paramString)
{
try
{
Process localProcess = Runtime.getRuntime().exec("su");
Object localObject = localProcess.getOutputStream();
DataOutputStream localDataOutputStream = new DataOutputStream((OutputStream)localObject);
String str = String.valueOf(paramString);
localObject = str + "\n";
localDataOutputStream.writeBytes((String)localObject);
localDataOutputStream.flush();
localDataOutputStream.writeBytes("exit\n");
localDataOutputStream.flush();
localProcess.waitFor();
localObject = localProcess.exitValue();
return localObject;
}
catch (Exception localException)
{
localException.printStackTrace();
}
}
//判断机器Android是否已经root,即是否获取root权限
protected static boolean haveRoot()
{
int i = execRootCmdSilent("echo test"); //通过执行测试命令来检测
if (i != -1) return true;
retrun false;
}
}
http://www.linuxidc.com/Linux/2010-09/28420.htm --------------------编程问答-------------------- --------------------编程问答-------------------- 上面的代码在模拟器上测试证明有ROOT权限但在真机上测试没有ROOT权限。
真机真的要进行什么破解吗?----看网上很复杂的过程啊! --------------------编程问答-------------------- 我的也没有取得ROOT权限, --------------------编程问答--------------------
我的是一般的开发板,IMAGE也是自己编译的。难道自己编译的时候没设置好什么地方? --------------------编程问答-------------------- 自己做image怎么能没有root权限呢?那可咋调试啊! 没有可以添加嘛。你可以修改 init.rc 呀。 --------------------编程问答--------------------
怎么修改init.rc获取ROOT权限?只能加一些属性修改语句吧! --------------------编程问答-------------------- Android程序的安全系统
http://my.unix-center.net/~Simon_fu/?p=531
--------------------编程问答-------------------- 怎么上面这个帖子说压根就获取不到ROOT权限啊!!!能够只能刷机才能获取ROOT权限? --------------------编程问答-------------------- 获取root权限,并不是通用的,你要自己找系统bug,找点0day漏洞就ok了,搞点缓冲区溢出,对方的漏洞在哪个进程获取的shell权限和这个进程就一致的 --------------------编程问答--------------------
一般情况下system用户权限就已经够用了,system用户可以在系统中创建和删除文件,访问设备等等。但是有些情况下system权限还是不够的。比如:设置网卡IP地址,ifconfig命令是需要root权限的。我可以很肯定的说,在Android下面应用程序是没有可能拿到root权限的。但是如果我的应用程序需要root权限怎么办呢?只能想办法绕般过去。就以我的问题为例,设置网卡IP地址,root权限下面命令为:
ifconfig eth0 192.168.1.188在普通用户或者system用户权限下面这条命令是不起作用的,但是不会返回失败和异常,这个我个人认为是Android的bug。那么怎样实现这个功能呢?我想出了两个办法。
1、系统启动的时候init进程创建一个后台进程,该进程处于root用户权限下面。用来监听系统中应用程序的请求(可以用socket实现),并代其完成。这样应用程序就可以执行root用户权限的任务了。
2、实现一个虚拟的设备,该设备的功能就是在内核态帮应用程序执行相应的命令。Linux内核态没有权限的问题了。肯定可以执行成功。
我解决设置网卡IP地址问题时,选择是后者。相对来说设计比较简单。
如果你到网上去搜一下,你会发现很多文章说怎样让Android应用程序获得root权限。如果你不想浪费时间就不要相信他们,因为那些途径是根本不可能获得root权限的。
没看明白 --------------------编程问答-------------------- 也就是说2楼方法是只能对于破解过的系统有效,不是通用的做法。
Simon博文中给的思路是通用的做法,但是要求是Android系统开发人员,而不仅仅是应用程序开发人员。
另外Simon最新关于获得root权限的文章如下:
http://my.unix-center.net/~Simon_fu/?p=951
这样是可以用Simon的第一种方法让apk获得root权限的。 --------------------编程问答-------------------- --------------------编程问答--------------------
加入我们blackhat,就懂了,如果这个概念你看不明白,估计你功力还需要几年吧 --------------------编程问答--------------------
看来我还要好几年。嘿嘿... --------------------编程问答--------------------
可以申请加入redhat吗?不行的话,我也申请blackhat。 --------------------编程问答-------------------- blackhat就是黑帽。。。redhat一般是指红帽。。红帽一般是值redhat的linux系统。。。 --------------------编程问答-------------------- 过谦了。。。 --------------------编程问答-------------------- 执行linux命令简单,获取root权限也可以,但是是针对特定机型的,意思是你的程序
在这个设备上能获取root权限,在另一个设备上可能获取不到啦,因为厂商在定制系统的差异 --------------------编程问答--------------------
应该是这样吧。大部分厂商是不会让apk获取到root的。 --------------------编程问答-------------------- 可以通过NDK的方式在NDK下面通过SYSTEM命令执行一些LINUX命令,如LS/CAT/CD/什么的,也可以去启动/SYSTEM/BIN下的应用程序。
SYSTEM命令怎么用可以参考
Android NDK编程实现终端功能(调用system函数)
http://blog.csdn.net/xqhrs232/article/details/7183923
--------------------编程问答-------------------- LS 好文 不错不错 --------------------编程问答--------------------
执行你的命令提示已正确获取root权限,可是/root文件夹,/data文件夹怎么访问不了。。。。。。 --------------------编程问答-------------------- execRootCmd 失去响应什么回事,老是等待 --------------------编程问答-------------------- 还是没有解决,我取得root就可以运行Linux应用程序了,我要找找如何root了。。。。 --------------------编程问答-------------------- <<x210ii android平台用户手册20121116.pdf》上这么一个介绍,我没看懂,转给大家:
11.20 实战 20:如何 root x210ii
inand平台开发板:
mount -o remount,rw -t ext4 /dev/block/mmcblk0p2 /system
nand平台开发板:
修改相应的分区名称和分区格式即可。 --------------------编程问答-------------------- 好文好文,值得学习
补充:移动开发 , Android