NDK/Jni底层获取root权限的四种思路

很多时候对Android系统底层进行操作(如查看/data/data/下的数据)是没有权限的。当然如果能在Java层直接执行的操作,直接用类似如下代码执行即可:

		Process process;
                String cmd = "....";
		try {
			process = Runtime.getRuntime().exec("su");
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					process.getInputStream()));
			BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
					process.getOutputStream()));
			BufferedReader error = new BufferedReader(new InputStreamReader(
					process.getErrorStream()));
			writer.write(cmd + "\n");
			writer.write("exit\n");
			writer.flush();

			String line;
			while ((line = reader.readLine()) != null) {

    			    // 处理结果

			}
			while ((line = error.readLine()) != null) {
				Log.e("error", line);
			}
			process.destroy();
		} catch (IOException e) {
			e.printStackTrace();
		}

但是有时候我们需要在Jni层进行类似的操作,那么我们如何获取root权限呢?这边提供四种思路供大家参考(前提是手机已root,有的思路未经实践,如果不可行或有更好的方法,还望斧正):

1.通过“su -c”来执行:

这里我们用命令行来演示一下:

android:/ $ du -ah /data/data/com.example.helloworld/
du: can't open '/data/data/com.example.helloworld/': Permission denied

这里我们可以看到没有权限。但是当我们通过“su -c cmd”来执行上述命令的时候就会获得root权限来执行:

@android:/ $ su -c "du -ah /data/data/com.example.helloworld/"
8.0K	/data/data/com.example.helloworld/lib/libhelloworld.so
12.0K	/data/data/com.example.helloworld/lib
4.0K	/data/data/com.example.helloworld/cache/com.android.renderscript.cache
8.0K	/data/data/com.example.helloworld/cache
1.0M	/data/data/com.example.helloworld/files/busybox
4.0K	/data/data/com.example.helloworld/files/test
1.0M	/data/data/com.example.helloworld/files
1.1M	/data/data/com.example.helloworld/

在jni的native 层可以同过此方法来执行。

2.sign Android app with system signature

(从stackoverflow的到的思路,未实际操作过)

3.将native层编译成可执行文件

(use the NDK toolchain to cross-compile native program as a binary)

然后通过Java层通过su来调用。

(我自己项目用到busybox就是通过这个方法来执行的)

4.copy app to /system/app/

这个应该和第2种方法异曲同工吧。

时间: 2024-10-26 15:59:05

NDK/Jni底层获取root权限的四种思路的相关文章

获取root权限及破解原理分析

2012-03-18 17:58:45|  分类: android |字号 订阅 如今Android系统的root破解基本上成为大家的必备技能!网上也有非常多中一键破解的软件,使root破解越来越easy.可是你思考过root破解的原理吗?root破解的本质是什么呢?难道是利用了Linux kernal的漏洞吗?本文将简单对root的破解原理进行分析. 网上非常多root教程所使用的都是rageagainstthecage程序,今天下载了rageagainstthecage.c源程序看了一下,大

应用获取root权限分析及总结

ROM授权root权限,主要技术点在哪里?如何实现?带着这些问题,边实验边分析,并将过程和犯的错误记录如下. 1.rom支持root授权,需要包含su 简单点说,就是rom中支持su指令:必须包含su可执行程序,对应的代码/system/su目录下代码: 编译生成su程序后,再将其push到/system/xbin目录下:注意:此时需要修改该文件的执行权限, chmod 755 su 2.应用程序如何获取root权限? 关键点在于下面这句,通过执行su产生一个具有root权限的进程:Proces

android中获取root权限的方法以及原理(转)

一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. 二. Root 的介绍 1. Root 的目的 可以让我们拥有掌控手机系统的权限,比如删除一些system/app下面的无用软件,更换开关机铃声和动画,拦截状态栏弹出的广告等. 2. Root的原理介绍 谷歌的android系统管理员用户就叫做root,该帐户拥有整个系统至高无上的权利,它可以访问和修改你手机几乎所有的文件,只有root才具备最高级别的管理权限

Android -- 程序判断手机ROOT状态,获取ROOT权限

判断手机是否具有ROOT权限                                                            /** * 判断手机是否ROOT */ public boolean isRoot() { boolean root = false; try { if ((!new File("/system/bin/su").exists()) && (!new File("/system/xbin/su").exi

三星Galaxy s4(i9505)完美获取root权限教程

三星Galaxy s4(i9505)完美获取root权限教程 论坛上贴吧上关于三星s4 i9505 root的介绍有很多,方法多种多样,今天小编来介绍一种使用root软件来实现三星i9505一键root的方法.这篇三星Galaxy s4(i9505)获取root教程仅仅三个步骤,借助完美ROOT工具来完成全部操作,方便快捷,废话不多说,请看i9505 root教程内容! 三星s4 i9505 root操作从准备工作开始,首先点击下载完美ROOT安装软件,其次检查手机保持开机,电量充足在50%以上

Genymotion刷入谷歌应用市场以及获取root权限

Genymotion刷入谷歌应用市场以及获取root权限 - 推酷http://www.tuicool.com/articles/rEV3aa6 刷入gapp, arm框架,supersu的包要注意,这些包所在的路径不能含有中文!!! 另外必须刷对的包 教程(包括我之前翻译的一篇 Genymotion简单教程及问题解决 ),但是大多数都已经没法用了.根据那些教程安装上的google play store,经常会弹出“已停止服务”的窗口. 其实最关键的点是,要刷对google apps packa

Debian普通用户获取root权限|sudo的安装与配置

Debian系统的普通用户需要安装软件时,往往会收到“Permission denied”的提示,这时候需要root权限.那么如何在不登陆超级管理员账户的前提下拥有root权限呢?对于大多数Linux系统来说,我们可以通过“sudo”命令来获取root权限,或者通过“su”登陆超级管理员账户来进行各种需要root权限的操作. 然而,Debian系统好像默认不安装sudo,所以下面将讲解“如何安装sudo及配置其sudoers文件” 首先登陆超级管理员账户,在 Terminal 命令行内输入 su

adb 获取root权限----adb命令集合

一.获取root权限,给文件以读写权限 步骤:1.手机进行root: 2.cmd 进入命令行 运行 adb shell命令(adb 已配置到环境变量中),此时命令变成$开头: 3.运行 su 命令,切换到root权限,此时命令变成#开头: 4.运行 chmod  777命令,后边跟文件路径,给文件读写权限. 二.其他常用命令 1.adb ll .adb ls -l列表显示文件目录 2.adb devices 显示连接的设备 3.adb logcat 显示日志 4.adb install *.ap

[Android Pro] Android fastboot刷机和获取Root权限

参考文章: https://developers.google.com/android/nexus/images 转载自:    http://www.inexus.co/article-1280-1.html 本文标黄色的获取ROOT权限的部分已经在安卓5.1下验证通过,解锁过程参考的是:https://developers.google.com/android/nexus/images 下文中的视频请到: http://www.inexus.co/article-1280-1.html 处看