android APK中如何获取到root权限,从而能切换到执行诸如
exec = Runtime.getRuntime().exec("su -c "+abspath); 语句?
eng版本 具有root权限吗?可是执行时报错:su: uid xxx not allowed to su,
adb root 和system root有区别吗? user版本如何仅在开发的APK中获取root权限?
user版本在我root后,还是提示有问题:像su: permission denied 还有 error running exec(). command working directory :null..
多谢了,没分了,大神们。
补充一下,其实是在做一个流量监控的防火墙,目前直接使用的是开源的droidwall源码包,但是这个包需要root权限的,想到了两个方案,第一个 是在有root权限的地方,即init.rc中添加一个service, 在其中执行相应的sh文件,该文件保存了iptables的一些命令,但是需要加载两个iptables有关的二进制文件,而且该sh文件要动态根据所选中的防火墙中禁用的APK来变化,问题是APK怎么调用这个service呢?感觉也不太好实现;第二个方案就是让终端具有root权限,在APK中通过执行Runtime.getRuntime().exec("su )来实现,但是就是这一步通不过。
手机要root ,然后有授权才行
首先,手机要 ROOT,然后在程序开始处加入如下代码:
String apkRoot = "chmod 777 " + getPackageCodePath();
runRootCommand(apkRoot);
就可以了。
runRootCommand 的实现如下:
public static boolean runRootCommand(String command) {
Process process = null;
DataOutputStream os = null;
try {
process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(command + "\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
} catch (Exception e) {
Log.d("Phone Link", "su root - the device is not rooted, error message: " + e.getMessage());
return false;
} finally {
try {
if(null != os) {
os.close();
}
if(null != process) {
process.destroy();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return true;
}
1.Android基于Linux的权限管理系统。
2.Linux中进程具有uid和gid,gids;文件等资源有owner,group,及对应的权限。
3.Android很多文件目录的owner是root,uid为0.
4.Android预定义了一批用户,system用户uid为1000。
5.APK运行在Zygote进程中,Zygote会根据PackageManagerService提供的服务找到APK安装时候给他的aid,以此修改当前zygote进程的uid。所以apk运行后,其进程uid互不相同。
6.Settings等系统APK在编译的时候,在Android.mk文件中,设定了签名证书使用platform,而且Settings的AndroidManifest.XML中声明sharedUserid=system,所以Settings.apk会被设置为uid为1000.
7.System用户还是权限稍高一点的普通用户,一样无法访问owner为0的文件。
8.如果你有Android系统的platform证书,你就可以通过签名使得APK具备system用户身份,也就是apk运行的进程uid为1000,可以访问owner为1000的文件等资源。framework中也有很多对uid的判断,0或者1000的放行通过。
9.真正的root是使得进程uid为0. APK运行后进程uid如何变为0我没有遇到过。但是可以通过主动执行su程序,使其在新进程中以root身份运行某些命令。
10.su可执行文件需要具备s位。
11.Android 4.3将system分区挂载成nosid。所以Android 4.3上su无法运行。
.........
您能不能具体说一下在核心配置文件中怎么配置啊?不是在核心配置文件配置配置好后,再打包成apk呀。获得root权限是不针对android版本来说的
获得root权限首先要求的是
1、这个手机系统已经被root了
2、你的应用必须获得系统签名
3、已经root的系统,一般的程序你可以执行 “su -” 获得root权限
执行shell脚本是做不到获取root权限的,目前比较靠谱的办法有两个:
一:github有一个开源的第三方库,可以让你的app获取root权限,需要用户点击同意才可以实现
二:linux下有一个busybox的工具,具体你百度一下,研究一下看是否能够做到,我的圈子里面还没有人做到了,可以反编译一下360root看看。
我以前做应用商城的也要做这个需求,当时没有实现,也是采用shell脚本的方法。