rk3288 android5.1 java 层使用 su 获取 root 权限
用法:
1 Runtime.getRuntime().exec("su , tinymix"); 要连在一起写,或者写一脚本
public void onClick(View v) {
Log.d("test by Wade", "su test start");
Process p = null;
try {
p = Runtime.getRuntime().exec("su , tinymix");
String data = null;
/**/
BufferedReader ie = new BufferedReader(new InputStreamReader(p.getErrorStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String error = null;
while ((error = ie.readLine()) != null
&& !error.equals("null")) {
data += error + "\n";
}
String line = null;
while ((line = in.readLine()) != null
&& !line.equals("null")) {
data += line + "\n";
}
// Log.v("ls", data);
Log.d("test by Wade", "su test 111" + data );
/**/
p = Runtime.getRuntime().exec("ls /data/data");
BufferedReader ie1 = new BufferedReader(new InputStreamReader(p.getErrorStream()));
BufferedReader in1 = new BufferedReader(new InputStreamReader(p.getInputStream()));
String error1 = null;
while ((error1 = ie1.readLine()) != null
&& !error1.equals("null")) {
data += error1 + "\n";
}
String line1 = null;
while ((line1 = in1.readLine()) != null
&& !line1.equals("null")) {
data += line1 + "\n";
}
// Log.v("ls", data);
Log.d("test by Wade", "su test 222" + data);
} catch (IOException e) {
Log.d("test by Wade", "error at IOException" );
e.printStackTrace();
}
}
2 log ,可以看出在同一个Runtime里,能执行成功。再写另外一个 runtime 是不行的,如另外一个 ls /data/data
D/Wade_arm_net_set( 176): ni= 512
D/Wade_arm_net_set( 176): internet not ok
W/gralloc ( 155): Debugmem The fd=57, in vmalloc !!!! Ishwc=0
W/AudioTrack( 460): AUDIO_OUTPUT_FLAG_FAST denied by client
D/test by Wade(10715): su test start
W/AppOps ( 460): Bad call: specified package media under uid 1000 but it is really 1013
I/su (10759): type=1400 audit(0.0:62): avc: denied { setgid } for capability=6 scontext=u:r:untrusted_app:s0 tcontext=u:r:untrusted_app:s0 tclass=capability permissive=1
I/su (10759): type=1400 audit(0.0:63): avc: denied { setuid } for capability=7 scontext=u:r:untrusted_app:s0 tcontext=u:r:untrusted_app:s0 tclass=capability permissive=1
I/tinymix (10759): type=1400 audit(0.0:64): avc: denied { dac_override } for capability=1 scontext=u:r:untrusted_app:s0 tcontext=u:r:untrusted_app:s0 tclass=capability permissive=1
D/test by Wade(10715): su test 111nullsu: uid 10052 not allowed to su by wade
D/test by Wade(10715): Mixer name: 'RK_ES8323'
D/test by Wade(10715): Number of controls: 29
D/test by Wade(10715): ctl type num name value
D/test by Wade(10715): 0 ENUM 1 3D Mode 2
D/test by Wade(10715): 1 INT 1 ALC Capture Target Volume 12
D/test by Wade(10715): 2 INT 1 ALC Capture Max PGA 5
D/test by Wade(10715): 3 INT 1 ALC Capture Min PGA 2
D/test by Wade(10715): 4 ENUM 1 ALC Capture Function Stereo
D/test by Wade(10715): 5 BOOL 1 ALC Capture ZC Switch Off
D/test by Wade(10715): 6 INT 1 ALC Capture Hold Time 0
D/test by Wade(10715): 7 INT 1 ALC Capture Decay Time 0
D/test by Wade(10715): 8 INT 1 ALC Capture Attack Time 5
D/test by Wade(10715): 9 INT 1 ALC Capture NG Threshold 10
D/test by Wade(10715): 10 ENUM 1 ALC Capture NG Type Mute ADC Output
D/test by Wade(10715): 11 BOOL 1 ALC Capture NG Switch On
D/test by Wade(10715): 12 BOOL 1 ZC Timeout Switch Off
D/test by Wade(10715): 13 INT 2 Capture Digital Volume 255 255
D/test by Wade(10715): 14 BOOL 1 Capture Mute Off
D/test by Wade(10715): 15 INT 1 Left Channel Capture Volume 8
D/test by Wade(10715): 16 INT 1 Right Channel Capture Volume 8
D/test by Wade(10715): 17 ENUM 1 Playback De-emphasis None
D/test by Wade(10715): 18 ENUM 1 Capture Polarity Normal
D/test by Wade(10715): 19 INT 2 PCM Volume 255 255
D/test by Wade(10715): 20 INT 1 Left Mixer Left Bypass Volume 0
D/test by Wade(10715): 21 INT 1 Right Mixer Right Bypass Volume 0
D/test by Wade(10715): 22 INT 2 Output 1 Playback Volume 21 21
D/test by Wade(10715): 23 INT 2 Output 2 Playback Volume 30 30
D/test by Wade(10715): 24 BOOL 1 Right Mixer Right Playback Switch On
D/test by Wade(10715): 25 BOOL 1 Right Mixer Right Bypass Switch Off
D/test by Wade(10715): 26 BOOL 1 Left Mixer Left Playback Switch On
D/test by Wade(10715): 27 BOOL 1 Left Mixer Left Bypass Switch Off
D/test by Wade(10715): 28 ENUM 1 Route Stereo
D/test by Wade(10715): su test 222nullsu: uid 10052 not allowed to su by wade
D/test by Wade(10715): Mixer name: 'RK_ES8323'
D/test by Wade(10715): Number of controls: 29
D/test by Wade(10715): ctl type num name value
D/test by Wade(10715): 0 ENUM 1 3D Mode 2
D/test by Wade(10715): 1 INT 1 ALC Capture Target Volume 12
D/test by Wade(10715): 2 INT 1 ALC Capture Max PGA 5
D/test by Wade(10715): 3 INT 1 ALC Capture Min PGA 2
D/test by Wade(10715): 4 ENUM 1 ALC Capture Function Stereo
D/test by Wade(10715): 5 BOOL 1 ALC Capture ZC Switch Off
D/test by Wade(10715): 6 INT 1 ALC Capture Hold Time 0
D/test by Wade(10715): 7 INT 1 ALC Capture Decay Time 0
D/test by Wade(10715): 8 INT 1 ALC Capture Attack Time 5
D/test by Wade(10715): 9 INT 1 ALC Capture NG Threshold 10
D/test by Wade(10715): 10 ENUM 1 ALC Capture NG Type Mute ADC Output
D/test by Wade(10715): 11 BOOL 1 ALC Capture NG Switch On
D/test by Wade(10715): 12 BOOL 1 ZC Timeout Switch Off
D/test by Wade(10715): 13 INT 2 Capture Digital Volume 255 255
D/test by Wade(10715): 14 BOOL 1 Capture Mute Off
D/test by Wade(10715): 15 INT 1 Left Channel Capture Volume 8
D/test by Wade(10715): 16 INT 1 Right Channel Capture Volume 8
D/test by Wade(10715): 17 ENUM 1 Playback De-emphasis None
D/test by Wade(10715): 18 ENUM 1 Capture Polarity Normal
D/test by Wade(10715): 19 INT 2 PCM Volume 255 255
D/test by Wade(10715): 20 INT 1 Left Mixer Left Bypass Volume 0
D/test by Wade(10715): 21 INT 1 Right Mixer Right Bypass Volume 0
D/test by Wade(10715): 22 INT 2 Output 1 Playback Volume 21 21
D/test by Wade(10715): 23 INT 2 Output 2 Playback Volume 30 30
D/test by Wade(10715): 24 BOOL 1 Right Mixer Right Playback Switch On
D/test by Wade(10715): 25 BOOL 1 Right Mixer Right Bypass Switch Off
D/test by Wade(10715): 26 BOOL 1 Left Mixer Left Playback Switch On
D/test by Wade(10715): 27 BOOL 1 Left Mixer Left Bypass Switch Off
D/test by Wade(10715): 28 ENUM 1 Route Stereo
D/test by Wade(10715): opendir failed, Permission denied
D/DisplayManager(10715): getDisplayInfo: displayId=0, info=DisplayInfo{"鍐呯疆灞忓箷", uniqueId "local:0", app 1280 x 800, real 1280 x 800, largest app 1280 x 1280, smallest app 800 x 800, 113.95901 fps, supportedRefreshRates [113.95901], rotation 0, density 160 (160.15764 x 160.0) dpi, layerStack 0, appVsyncOff 0, presDeadline 9775085, type BUILT_IN, state ON, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS}
W/AppOps ( 460): Bad call: specified package media under uid 1000 but it is really 1013
D/AudioHardwareTiny( 170): start_output_stream
D/AudioHardwareTiny( 170): Device : 0x80400
D/AudioHardwareTiny( 170): SampleRate : 44100
D/AudioHardwareTiny( 170): Channels : 2
D/AudioHardwareTiny( 170): Formate : 0
D/AudioHardwareTiny( 170): PreiodSize : 2048
W/gralloc ( 155): Debugmem The fd=32, in vmalloc !!!! Ishwc=0
D/ViewRootImpl(10715): onAttachToWindow register content observer attrs=WM.LayoutParams{(0,64)(wrapxwrap)mPosX=0mPosY=0mHScale=1.0mVScale=1.0 align=UNDEFINE taskId=-1 gr=#51 ty=2005 fl=#98 compatible=true pfl=0x80 fmt=-3 wanim=0x1030004 surfaceInsets=Rect(0, 0 - 0, 0)packageName=com.practice.sensortoken=null}
D/ViewRootImpl(10715): 131<<<<<< BACK FROM relayoutWM.LayoutParams{(0,64)(wrapxwrap)mPosX=0mPosY=0mHScale=1.0mVScale=1.0 align=UNDEFINE taskId=-1 gr=#51 sim=#20 ty=2005 fl=#98 compatible=true pfl=0x80 fmt=-3 wanim=0x1030004 surfaceInsets=Rect(0, 0 - 0, 0)packageName=com.practice.sensortoken=null}
W/gralloc ( 155): Debugmem The fd=56, in vmalloc !!!! Ishwc=0
D/ViewRootImpl(10715): 131<<<<<< BACK FROM relayoutnull
W/gralloc ( 155): Debugmem The fd=69, in vmalloc !!!! Ishwc=0
W/AppOps ( 460): Bad call: specified package media under uid 1000 but it is really 1013
D/ViewRootImpl(10715): onDetachedFromWindow ungister contentObserver
D/Wade_arm_net_set( 176): ni= 512
D/Wade_arm_net_set( 176): internet not ok
D/AudioHardwareTiny( 170): close device
W/AppOps ( 460): Bad call: specified package media under uid 1000 but it is really 1013
^C
C:\Users\pc>
3 代码修改
diff --git a/system/extras/su/su.c b/system/extras/su/su.c
index 8365379..5388470 100644
--- a/system/extras/su/su.c
+++ b/system/extras/su/su.c
@@ -108,8 +108,8 @@ int main(int argc, char **argv)
/* Until we have something better, only root and the shell can use su. */
myuid = getuid();
if (myuid != AID_ROOT && myuid != AID_SHELL) {
- fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
- return 1;
+ fprintf(stderr,"su: uid %d not allowed to su by wade\n", myuid);
+ //return 1;
}
if(argc < 2) {
diff --git a/frameworks/base/cmds/app_process/app_main.cpp b/frameworks/base/cmds/app_process/app_main.cpp
index 1bb28c3..a92a561 100644
--- a/frameworks/base/cmds/app_process/app_main.cpp
+++ b/frameworks/base/cmds/app_process/app_main.cpp
@@ -185,6 +185,7 @@ static const char ZYGOTE_NICE_NAME[] = "zygote";
int main(int argc, char* const argv[])
{
+ /*
if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) < 0) {
// Older kernels don't understand PR_SET_NO_NEW_PRIVS and return
// EINVAL. Don't die on such kernels.
@@ -192,7 +193,7 @@ int main(int argc, char* const argv[])
LOG_ALWAYS_FATAL("PR_SET_NO_NEW_PRIVS failed: %s", strerror(errno));
return 12;
}
- }
+ } */
AppRuntime runtime(argv[0], computeArgBlockSize(argc, argv));
// Process command line arguments
diff --git a/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp b/frameworks/base/core/jni/com_android_interna
index 3af968d..6236438 100644
--- a/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
+++ b/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
@@ -208,6 +208,7 @@ static void EnableKeepCapabilities(JNIEnv* env) {
}
static void DropCapabilitiesBoundingSet(JNIEnv* env) {
+ /*
for (int i = 0; prctl(PR_CAPBSET_READ, i, 0, 0, 0) >= 0; i++) {
int rc = prctl(PR_CAPBSET_DROP, i, 0, 0, 0);
if (rc == -1) {
@@ -219,7 +220,7 @@ static void DropCapabilitiesBoundingSet(JNIEnv* env) {
RuntimeAbort(env);
}
}
- }
+ } */
}
diff --git a/system/core/include/private/android_filesystem_config.h b/system/core/include/private/android_filesystem_c
index 7a4c943..2b987e1 100644
--- a/system/core/include/private/android_filesystem_config.h
+++ b/system/core/include/private/android_filesystem_config.h
@@ -245,7 +245,7 @@ static const struct fs_path_config android_files[] = {
/* the following five files are INTENTIONALLY set-uid, but they
* are NOT included on user builds. */
- { 04750, AID_ROOT, AID_SHELL, 0, "system/xbin/su" },
+ { 06755, AID_ROOT, AID_SHELL, 0, "system/xbin/su" },
{ 06755, AID_ROOT, AID_ROOT, 0, "system/xbin/vm" },
{ 06755, AID_ROOT, AID_ROOT, 0, "system/xbin/librank" },
{ 06755, AID_ROOT, AID_ROOT, 0, "system/xbin/procrank" },
4 参考文章
https://blog.csdn.net/kangear/article/details/51872653
https://blog.csdn.net/kangear/article/details/51868077
一些记录:
写一个app 查看 id
root@nanopi2:/ # ps | grep com.example.helloroot
u0_a50 1283 121 1233532 40640 ffffffff b6e791c4 S com.example.helloroot
root@nanopi2:/ #
其中u0_a50就是HelloRoot的Application user id了,这个id在下面步骤中会用到;
切换到u0_a50用户下并运行su命令
root@nanopi2:/ # su u0_a50
root@nanopi2:/ $ id
uid=10050(u0_a50) gid=10050(u0_a50) groups=1003(graphics),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats) context=u:r:su:s0
# 以u0_a50身份运行su命令,正常情况下会再切到root权限下,相当于该APP在调用su命令了。
root@nanopi2:/ $ su
root@nanopi2:/ #
rk3288 android5.1 java 层使用 su 获取 root 权限相关推荐
- Deepin su 获取root权限失败,显示鉴定故障解决方法
- Android WIFI密码查看器实例(在获取Root权限下查看系统文件)
Android WIFI密码查看器实例 实现原理:使用shell命令查看保存WIFI密码的系统文件 涉及的知识 界面展示 基本的Shell命令 shell查看WIFI密码 ShellUtil的使用 正 ...
- 【android工具篇】Firefly-RK系列(eg:RK3288 RK3368)一键获取root权限工具RootUtils
问题描述 越来越多的智能设备使用到了Firefly的开发板(http://dev.t-firefly.com/forum.php),有时候android应用开发必须要获取root权限(如重启设备.静默 ...
- java root权限_Android应用获取Root权限
在项目的过程中,有可能会要实现类似360优化大师.安卓优化大师的软件搬家.静默安装等需要root权限的功能,或者类似SET_PREFERRED_APPLICATIONS.MOVE_PACKAGE 等需 ...
- java获取root权限_apk如何获取root权限
展开全部 在apk中,有时候需要root权限,例如通过apk更新系统库等system的文件等,避免升级固件,或者e68a8432313133353236313431303231363533313333 ...
- Android 命令su,获取Android的ROOT权限其实很简单,只要在Runtime下执行命令su就可以了。复制代码 代码如下:// 获取ROOT权限public void...
获取Android的ROOT权限其实很简单,只要在Runtime下执行命令"su"就可以了. // 获取ROOT权限 public void get_root(){ if (is_ ...
- n918st能刷Android5吗?,中兴 N918st(V5S 双4G版)获取Root权限服务含精简系统方案
安卓手机一旦获取Root权限就好像拥有了全世界 独家系统精简方案,优化系统流畅度,还你如初的感受. 刷前须知: 使用本服务前,请保证手机未进行刷机或root权限 使用本服务不会清除手机数据,但建议备份 ...
- linux通过java获取root权限_通过可写文件获取Linux root权限的5种方法
Linux系统中,全部都是以文件形式存在的,包括目录.设备都是有权限的,共有读.写.可执行三种.管理员为文件设置好权限后,应该要考虑哪些Linux用户会被允许和限制上述的三个权限. 通过可写脚本进行r ...
- ADB工具 获取ROOT权限及复制文件方法
adb push d:\tm3_sqlit.db data/zouhao/tm3_sqlit.db adb pull data/zouhao/tm3_sqlit.db d:\tm3_sqlit.db ...
最新文章
- 《科学美国人》评出2019年十大突破性技术
- 阿里巴巴旗下平台口碑推出无人收银技术,改造便利店市场;重庆法院运用 AI 探索“智能判案”...
- Java7并发编程指南——第四章:线程执行器
- java多线程新特性
- java http 面试题_Java面试高级篇—说说TCP,UDP和socket,Http之间联系和区别面试题12期...
- linux sqlite3使用界面,Linux 中 sqlite3 基本操作
- WebGL多模型光照综合实例
- tomcat乱码问题解决集合
- 3D Motion Capture(3D运动捕捉)
- 信息检索1.3.学术搜索引擎--谷歌学术搜索引擎
- wav格式怎么转换成mp3
- oracle先决条件内存,oracle11g安装客户端检查先决条件失败
- 爬虫:Iron WebScraper 2022 for NET
- kubernetes 使用kubectl port-forward 访问应用
- 为什么有些年轻人大学毕业后那么坦然的在家待业?
- 事业编招聘:南方科技大学附属实验学校2022年·面向应届毕业生招聘在编教师公告
- 如何选择一台好的拨号服务器?
- 因式分解结合最近邻:多层面的协同过滤模型
- 苹果桌面主题_看腻了手机自带的桌面主题,试试这个
- 搜索引擎最新算法大全|更新到2020.2.28日(百度算法大全、360算法大全)
热门文章
- 前端开发这么多年,你真的了解浏览器页面渲染机制吗? | 技术头条
- 微信再次“杠上”支付宝!|畅言
- 腾讯二十年了,马化腾定了个新方向!
- Win10 PC 能打电话了?腾讯追讨前员工 1940 万;淘宝进军 MR 购物 | 极客头条
- 做 Python 代码重构,竟发现这些“潜规则”!
- 英特尔立 Flag:年末一定彻底解决“芯片门”Bug!
- 死磕shell系列-shell介绍
- 分布式事务之TCC服务设计和实现注意事项!
- android9.0变化,十年巨变 Android 1.0对比Android 9
- 黎明杀机手游未能连接服务器,黎明杀机无法连接在线服务及EAC绿条读完后无反应解决方法...