当前位置:编程学习 > wap >>

Android应用程序里面怎样执行Linux命令,怎么得到root权限

Android应用程序里面怎样执行Linux命令,怎么得到root权限 --------------------编程问答-------------------- Android运行底层linux外部命令的实现 

http://monner.javaeye.com/blog/754303


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;
  }
 
}

--------------------编程问答-------------------- Android在Shell环境下运行Linux命令
http://www.linuxidc.com/Linux/2010-09/28420.htm --------------------编程问答-------------------- --------------------编程问答-------------------- 上面的代码在模拟器上测试证明有ROOT权限但在真机上测试没有ROOT权限。


真机真的要进行什么破解吗?----看网上很复杂的过程啊! --------------------编程问答-------------------- 我的也没有取得ROOT权限, --------------------编程问答--------------------
引用 5 楼 dadoneo 的回复:
我的也没有取得ROOT权限,


我的是一般的开发板,IMAGE也是自己编译的。难道自己编译的时候没设置好什么地方? --------------------编程问答-------------------- 自己做image怎么能没有root权限呢?那可咋调试啊! 没有可以添加嘛。你可以修改 init.rc 呀。 --------------------编程问答--------------------
引用 7 楼 freshui 的回复:
自己做image怎么能没有root权限呢?那可咋调试啊! 没有可以添加嘛。你可以修改 init.rc 呀。


怎么修改init.rc获取ROOT权限?只能加一些属性修改语句吧! --------------------编程问答-------------------- Android程序的安全系统
http://my.unix-center.net/~Simon_fu/?p=531


一般情况下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权限的。


--------------------编程问答-------------------- 怎么上面这个帖子说压根就获取不到ROOT权限啊!!!能够只能刷机才能获取ROOT权限? --------------------编程问答-------------------- 获取root权限,并不是通用的,你要自己找系统bug,找点0day漏洞就ok了,搞点缓冲区溢出,对方的漏洞在哪个进程获取的shell权限和这个进程就一致的 --------------------编程问答--------------------
引用 11 楼 drsmart 的回复:
获取root权限,并不是通用的,你要自己找系统bug,找点0day漏洞就ok了,搞点缓冲区溢出,对方的漏洞在哪个进程获取的shell权限和这个进程就一致的


没看明白 --------------------编程问答-------------------- 也就是说2楼方法是只能对于破解过的系统有效,不是通用的做法。
Simon博文中给的思路是通用的做法,但是要求是Android系统开发人员,而不仅仅是应用程序开发人员。
另外Simon最新关于获得root权限的文章如下:
http://my.unix-center.net/~Simon_fu/?p=951
这样是可以用Simon的第一种方法让apk获得root权限的。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 12 楼 xqhrs232 的回复:
引用 11 楼 drsmart 的回复:
获取root权限,并不是通用的,你要自己找系统bug,找点0day漏洞就ok了,搞点缓冲区溢出,对方的漏洞在哪个进程获取的shell权限和这个进程就一致的


没看明白


加入我们blackhat,就懂了,如果这个概念你看不明白,估计你功力还需要几年吧 --------------------编程问答--------------------
引用 15 楼 drsmart 的回复:
引用 12 楼 xqhrs232 的回复:
引用 11 楼 drsmart 的回复:
获取root权限,并不是通用的,你要自己找系统bug,找点0day漏洞就ok了,搞点缓冲区溢出,对方的漏洞在哪个进程获取的shell权限和这个进程就一致的


没看明白


加入我们blackhat,就懂了,如果这个概念你看不明白,估计你功力还需要几年吧


看来我还要好几年。嘿嘿... --------------------编程问答--------------------
引用 15 楼 drsmart 的回复:
引用 12 楼 xqhrs232 的回复:
引用 11 楼 drsmart 的回复:
获取root权限,并不是通用的,你要自己找系统bug,找点0day漏洞就ok了,搞点缓冲区溢出,对方的漏洞在哪个进程获取的shell权限和这个进程就一致的


没看明白


加入我们blackhat,就懂了,如果这个概念你看不明白,估计你功力还需要几年吧


可以申请加入redhat吗?不行的话,我也申请blackhat。 --------------------编程问答-------------------- blackhat就是黑帽。。。redhat一般是指红帽。。红帽一般是值redhat的linux系统。。。 --------------------编程问答-------------------- 过谦了。。。
引用 16 楼 sodino 的回复:
引用 15 楼 drsmart 的回复:

引用 12 楼 xqhrs232 的回复:
引用 11 楼 drsmart 的回复:
获取root权限,并不是通用的,你要自己找系统bug,找点0day漏洞就ok了,搞点缓冲区溢出,对方的漏洞在哪个进程获取的shell权限和这个进程就一致的


没看明白


加入我们blackhat,就懂了,如果这个概念你看不明白,估计你功力还需要几……
--------------------编程问答-------------------- 执行linux命令简单,获取root权限也可以,但是是针对特定机型的,意思是你的程序
在这个设备上能获取root权限,在另一个设备上可能获取不到啦,因为厂商在定制系统的差异 --------------------编程问答--------------------
引用 20 楼 lizhengjun2010 的回复:
执行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 好文 不错不错 --------------------编程问答--------------------
引用 1 楼 xqhrs232 的回复:
Android运行底层linux外部命令的实现 

http://monner.javaeye.com/blog/754303


C/C++ code


package my.android.code;
 
import android.os.Environment;
import dalvik.annotation.Signature;
import java.io.……

执行你的命令提示已正确获取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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,