当前位置:首页 » 安卓系统 » androidapkroot

androidapkroot

发布时间: 2023-03-24 05:55:49

⑴ 怎样使Android apk 获取root权限

一般来说, Android 下的应用程序可以“直接”得到的最大的权限为 system ,但是如果我们需要在程序中执行某些需要 root 权限的命令,如 ifconfig 等,就需要 root 权限了。按照 Simon 的文章中提到的,应用程序有以下两种办法临时获得 root 权限:
1) 实现一个 init 实现一个 Service ,来帮助 Android 应用程序执行 root 权限的命令。
2) 实现一个虚拟设备,这个设备帮助 Android 应用程序执行 root 权限的命令。

第二种办法我这里没有尝试,暂时也不会。这里讲讲我在实现第一种办法的过程和遇到的一些问题。

1. 将我们要执行的命令写成脚本,或者可执行程序。
下面是我的脚本 ifconfig_test.sh :

# ! /system/bin/sh
ifconfig
注意: 脚本判核饥的第一行必须为 # ! /system/bin/sh ,否则无法执行,通过 dmesg 可以查看到信息内容为 cannot execve ./ifconfig_test.sh: Exec format error

也可以采用 C/C++ 编写需要执行的命令或者程序,并在编译 image 的时候编译成可执行程序。

2. 在 init.rc 中注册 service
Android 中的 service 需要在 init.rc 中注册, Init.rc 中定义的 Service 将会被 init 进程创建,这样将可以获得 root 权限。当得到相应的通知(通过属性设置)后, init 进程会启动该 service 。
本文中注册的内容如下:

service ifconfig_test /system/etc/ifconfig_test.sh
oneshot
disabled
其中, oneshot 表示程序退出后不再重新启动, disabled 表示不在系统启动时启动。

注意: 这里 service name 不能超过 16 个字符。我之前的 service name 由于定义的比较长, 18 个字符,设置属性通知 service 启动后查看 dmesg 可以看到提示: init: no such service 。查看 /system/core/init/parser.c 的源代码,在 parse_service->valid_name 函数中可以看到如下内容: if (strlen(name) > 16) { return 0; } ,证明 service 的名字的确不能超过 16 个字符。

3. 将 Android 应用程序提升为 system 权限
既然应用程序可以通过启动 service 获得 root 权限,那么岂不是很不安全。 Android 考虑到了这点,规定只有 system 权限的应用程序才能设置属性,通知 service 启动。关于提升 system 权掘返限的文章网上已有很多,这里就不再细说,

4. 在应用程序中添加属性设置代码
前面已经提到,对于 Android 来说,应用程序通知 init 启动 service 是通过设置系统属性来完成的,具体为设置 System 系统属性 “ctl.start” 为 “ifconfig_test” ,这样 Android 系统将会帮我们运行 ifconfig_test 这个 service 了。
对该系统属性的设置有三种方法,分别对应三种不同的应用程序:
1) java 代码
Android 在 Java 库中提供 System.getProperty 和 System.setProperty 方法, Java 程序可以通过他们来设置氏渣和获得属性。代码如下:
SystemProperties.set("ctl.start", "ifconfig_test");
上面的代码是通知 Android 执行 ifconfig_test service ,如果需要查询当前 service 执行的状态,如是否执行完毕,可以通过如下代码查询:
ret = SystemProperties.get("init.svc. ifconfig_test ", "");
if(ret != null && ret.equals("stopped"))
{
return true;
}
2) JNI 代码
当编写 NDK 的程序时,可以使用 property_get 和 property_set 这两个 API 来获得和设置属性。使用这两个 API 必须要包含头文件 cutils/properties.h 和链接 libcutil 库。

3) Shell 脚本
Android 提供了命令行 setprop 和 getprop 来设置和获取属性,他们可以在脚本中被使用。

由于我的程序是在 JNI 中调用脚本,脚本中又执行 ifconfig ,因此我将设置属性的部分放在了脚本中完成,代码如下:
setprop ctl.start ifconfig_test

#wait for the service until it stops
ret=1
while [ $ret -ne 0 ]
do
getprop | grep "$ENABLE_MAPPER_SRV" | grep stopped
ret=$?
done
通过上面 4 个步骤, Android 应用程序就获得了 root 权限,更具体的说,是在执行我们需要执行的命令时临时获得了 root 权限。
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦

⑵ Android应用程序怎样获取root权限

Android应用程序获取root权限,前提时设备必须已经破解过,能够执行su命令之后,就可以使用String apkRoot="chmod 777 "+getPackageCodePath(); RootCommand(apkRoot);方式来给应用程序赋予足够的root权限,代码如下:

一、建一个方法:代码如下:
package cn.ycmoon.utility;

import java.io.DataOutputStream;

import android.app.Activity;
import android.util.Log;

public class SystemManager extends Activity
{
/**
* 应用程序运行命令获取 Root权限,设备必须已破解(获得ROOT权限)
* @param command 命令:String apkRoot="chmod 777 "+getPackageCodePath(); RootCommand(apkRoot);
* @return 应用程序是/否获取Root权限
*/
public static boolean RootCommand(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("*** DEBUG ***", "ROOT REE" + e.getMessage());
return false;
} finally
{
try
{
if (os != null)
{
os.close();
}
process.destroy();
} catch (Exception e)
{
}
}
Log.d("*** DEBUG ***", "Root SUC ");
return true;
}
}

二、在应用程序的MainActivity方法中:

public class MainActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String apkRoot="chmod 777 "+getPackageCodePath();
SystemManager.RootCommand(apkRoot);
}
}

⑶ 怎样使Android apk 获取root权限

1,到网络搜SHUAME,下载刷机精灵,安装;(软件可用卓大师,甜椒刷机,360一键ROOT…)
2,手机按“菜单键”,打开“应用程序”,选中“未知来源”,选中孝含亮“开发”下的“USB调试”;
3,电脑用USB连接手机;
4,选择自动识别下载手机硬件驱动,查看手机信息,能看到手机巧宽界面;
5,点击“实用工具”,“ROOT破解……”,等待1到2分钟,自动重启,,看手机信息,是否成功ROOT。
6,显示ROOT后,,安装一个SUPERUSER用于分配权限的老纳软件就可以了。(可以到UC浏览器,必备软件,搜索下载)……

⑷ 怎样使Android apk 获取root权限

执行shell脚本是做不到获取root权限的,目前比较靠谱的办法有两个:
一:github有一个开源的第三方库,可和腊以让你的app获取root权限,需要用户点击同意才可以实现
二:linux下有一个busybox的工具,具体你网络一下,研究一下看是否能够贺棚塌做到,我的圈子里面还没有人做到了,可以反编译一下360root看看。
我以前做应用商城的也要做这个需求,当时没有实现,也是采禅圆用shell脚本的方法。

⑸ 怎样使Android apk 获取root权限

1)下载腾讯手磨液机管家PC版,安装完成并成功连接上手机;
2)打开腾讯手机管家PC版----工具箱----第三方工具中,就可以看到kingroot工具;
3)颤散点击kingroot,手机与电脑连接正瞎洞物常后点击“一键root”,root过程正式开始,期间大约需用1分钟左右的时间,因部分机型差异,时间可能稍长;显示“连接正常” ;整个Root过程完成,点击“退出Kingroot”即可!
4)ROOT过程中尽量不要触碰手机的数据线,防止手机与电脑断开,造成ROOT失败,基本上只要等候3—5分钟就搞定了

⑹ 怎样使Android apk 获取root权限

手机明神root之后安装一个权限管理软件,然后其他apk需要root权限的时候会弹出提示,这时候通过root权限管理软件给予apk应用root权限,即相应的apk获得了root权激码亏限。
1.root手模手机系统 2.安装权限管理软件。(通常1,2是一起的)

⑺ 怎样使Android apk 获取root权限

首先手机要root,然后在设誉橡置-开发者选项(不同手机界面不同)开启root,一般手机apk如果盯扰需要root权限都会提醒,没提醒的在安全中心或凯虚旦者supersu等开启

⑻ apk如何获取root权限

在apk中,有时候需要root权限,例如通过apk更新州洞系统库等system的文件等,避免升级固件,或者在apk中需要直接访问某些设备等。下面是在apk中获取root权限的方法,前提是设备已经root过了。
关键点在于下面这句,通过执行su产生一个具有root权限的进程:
Process p = Runtime.getRuntime().exec("su");
然后,在向这个进程的写入要执行的命令,即可达到以root权限执行命令:
dos = new DataOutputStream(p.getOutputStream());
dos.writeBytes(cmd + " ");
dos.flush();
或者用下面的方式:
Runtime.getRuntime().exec(new String[]{"/system/bin/su","-c", cmd});

经过测试,以root权限执行命令,只在真机上测试成功,在模拟器上没有成功过。

第一次运行时,会出现请求root权限的界面,选中记住,并允许:

主要文件:RootCmd.java
[java]
package org.ckl.root;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

import android.util.Log;

public final class RootCmd {

private static final String TAG = "RootCmd";
private static boolean mHaveRoot = false;

// 判断机器Android是否已经root,即是否获取root权限
public static boolean haveRoot() {
if (!mHaveRoot) {
int ret = execRootCmdSilent("echo test"); // 通过执行测试命令来检测
if (ret != -1) {
Log.i(TAG, "have root!");
mHaveRoot = true;
} else {
Log.i(TAG, "not root!");
}
} else {
Log.i(TAG, "mHaveRoot = true, have root!");
}
return mHaveRoot;
}

// 执行命令并且输出结果
public static String execRootCmd(String cmd) {
String result = "";羡迹猛
DataOutputStream dos = null;
DataInputStream dis = null;

try {
Process p = Runtime.getRuntime().exec("su");// 经过Root处理的android系统即有su命令
dos = new DataOutputStream(p.getOutputStream());
dis = new DataInputStream(p.getInputStream());

Log.i(TAG, cmd);
dos.writeBytes(cmd + " ");
dos.flush();
dos.writeBytes("exit ");
dos.flush();
String line = null;
while ((line = dis.readLine()) != null) {
兄桥 Log.d("result", line);
result += line;
}
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (dos != null) {
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (dis != null) {
try {
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}

// 执行命令但不关注结果输出
public static int execRootCmdSilent(String cmd) {
int result = -1;
DataOutputStream dos = null;

try {
Process p = Runtime.getRuntime().exec("su");
dos = new DataOutputStream(p.getOutputStream());

Log.i(TAG, cmd);
dos.writeBytes(cmd + " ");
dos.flush();
dos.writeBytes("exit ");
dos.flush();
p.waitFor();
result = p.exitValue();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (dos != null) {
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
}

相关文件:SystemPartition.java,获取/system分区设备节点,并支持重新mount /system为可读写:
[java]
package org.ckl.root;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import android.util.Log;

public class SystemPartition {
private static final String TAG = "SystemMount";
private static String TMP_PATH = "/sdcard/mount.txt";
private static String mMountPiont = null;
private static boolean mWriteable = false;

private SystemPartition() {
Log.i(TAG, "new SystemMount()");
}

private static class SystemPartitionHolder {
private static SystemPartition instance = new SystemPartition();
}

public SystemPartition getInstance() {
return SystemPartitionHolder.instance;
}

public static String getSystemMountPiont() {
DataInputStream dis = null;
if (mMountPiont == null) {
try {
RootCmd.execRootCmd("mount > " + TMP_PATH);
// Runtime.getRuntime().exec("mount > " + TMP_PATH);

dis = new DataInputStream(new FileInputStream(TMP_PATH));

String line = null;
int index = -1;
while ( (line = dis.readLine()) != null ) {
index = line.indexOf(" /system ");
if (index > 0) {
mMountPiont = line.substring(0, index);
if (line.indexOf(" rw") > 0) {
mWriteable = true;
Log.i(TAG, "/system is writeable !");
} else {
mWriteable = false;
Log.i(TAG, "/system is readonly !");
}
break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (dis != null) {
try {
dis.close();
} catch (IOException e1) {
e1.printStackTrace();
}
dis = null;
}

File f = new File(TMP_PATH);
if (f.exists()) {
f.delete();
}
}
}

if (mMountPiont != null) {
Log.i(TAG, "/system mount piont: " + mMountPiont);
} else {
Log.i(TAG, "get /system mount piont failed !!!");
}

return mMountPiont;
}

public static boolean isWriteable() {
mMountPiont = null;
getSystemMountPiont();
return mWriteable;
}

public static void remountSystem(boolean writeable) {
String cmd = null;
getSystemMountPiont();
if (mMountPiont != null && RootCmd.haveRoot()) {
if (writeable) {
cmd = "mount -o remount,rw " + mMountPiont + " /system";
} else {
cmd = "mount -o remount,ro " + mMountPiont + " /system";
}
RootCmd.execRootCmdSilent(cmd);

isWriteable();
}
}
}

⑼ android apk 的root 权限和USB adb 权限的区别

USB adb 权限是指,当adb 连接手机时,手机中的守护进程adbd 的权限为root 权限,从而它的子进程也具有root 权限,通常如果adb shell 看到是:
Android 4.0 以后版本:
C:\Users\mtk29\Desktop>adb shell
root@android:/ #
Android 2.3 版本:
C:\Users\mtk29\Desktop>adb shell

即表明adb 的连接是root 权限的,相反如果看到是$ 即表明是shell 权限
Android 的APK 本身都是不具备root 权限的,如果想启用root 权限,那么就必须借助具有root 权限的进程或者具有s bit 的文件,目前比较通用的手法是,手机root 后,内置了su到system/bin, 然后普通APP 即可借助su 命令来达到root 权限切换。
网络上已经有同仁修改su 命令,并通过一个APK 来控制su 命令的权限控制。
如常见的Superuser: 这样即可人为的控制root 权限的使用。((因很久都没有更新了,只能用于ICS 以及以前的版本))

综上所叙,如果adb 已经有root 权限,那么让apk 行使root 权限就很简单了。比如在JB 版本或者以前的版本上:
adb remount
adb push su /system/bin
adb push Superuser.apk /system/app
adb shell chmod 0644 /system/app/Superuser.apk
adb shell chmod 6755 /system/bin/su
adb reboot

热点内容
如何把域名指向到指定服务器ip 发布:2024-05-07 10:48:49 浏览:363
base64javaphp 发布:2024-05-07 10:30:07 浏览:848
抖音青少年模式的密码是哪里的 发布:2024-05-07 10:05:27 浏览:751
tmp文件怎么解压 发布:2024-05-07 09:59:49 浏览:938
安卓手机如何提升录歌音质 发布:2024-05-07 09:49:55 浏览:330
指法运算法 发布:2024-05-07 09:24:26 浏览:195
兜享花为什么服务器错误 发布:2024-05-07 09:12:55 浏览:126
西门子编程仿真软件 发布:2024-05-07 09:12:04 浏览:128
脚本举例 发布:2024-05-07 09:04:41 浏览:819
php经历 发布:2024-05-07 08:59:25 浏览:420