如何使Android应用程序获得root权限

如何使Android应用程序获得root权限,第1张

一般来说, 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 权限。

转载仅供参考,版权属于原作者。祝你愉快,满意请~~哦

华为U8860 honor荣耀手机最完美的root方法 1 进入粉屏 完全关机情况下,同时按住音量+和-,按住电源键,自动进入。粉屏就是屏幕全部显示为一个粉红色,没有任何其他图像或菜单,按键也没有反应。注意事项:(1)是在完全关机状态下。如果是honor之类的手机,开启了快速启动功能,建议关机后,拨下电池约10秒以上,再装上电池,再进入粉屏。(2)在进入粉屏前,一定要检查是否插了SD卡,如果插了卡,请保证SD卡上没有/dload目录。否则可能直接进入升级模式。2 将粉屏手机接上USB线,再接入电脑。这里电脑会提示有新的USB设备接入,会自动变成一个U盘,可能会是你的电脑的E盘,或是其他盘,我这里是I盘。双击进去,会看到一个image文件夹。如果没有这个文件夹,就可能是另外一个盘,继续找其他盘。3 在这个image文件夹中,会有好几个后缀名为img的文件,比如boot.img, cust.img.我们要 *** 作的就是这个boot.img文件,顾名思义肯定和引导有关的一个文件。4 复制这个boot.img文件,备份到你的D盘(或者其他目录,只要你自己能找到,建议改名吧,改成"原始boot.img"这样的文件名好记些)以后出问题了就记得按上面的方法还原这个boot.img文件。5 在你的电脑d盘建一个“temp”的文件夹,复制刚才image文件夹下面的boot.img文件到temp文件夹。6 从网上下载一个叫bootimg.exe的文件,也放到这个d盘的temp目录中。7 进入dos命令窗口,进入到d盘temp文件夹。方法:点击windows开始菜单,点击运行,在d出的对话框中输入"cmd",回车,会d出一个黑窗口,按以下图示进入temp文件夹

8 解开boot.img文件,bootimg --unpack-bootimg ,

9 这时temp文件夹下会变多几个文件,继续解!bootimg --unpack-ramdisk ,照图做!

10 经过上一步之后,就出来了一个initrd文件夹和cpiolist.txt的文件。这就是我们要动手的内容。

11 下载root所需的文件superboot.zip superboot.zip (439 KB, 下载地址见原文) ,解压放进D: empinitrd 文件夹。root所需的文件包括一个superboot 文件夹,里面包括四个文件(re, su, superboot, superuser)执行此步后的目录如下图

12 使用WordPad(在开始菜单,运行,d出的对话框中输入wordpad,回车)打开D: empinitrdinit.rc在文件的最尾部添加如下内容:chown root root /superboot/superboot.shchmod 0777 /superboot/superboot.shservice superboot /system/bin/sh /superboot/superbootuser rootgroup rootoneshot

13 使用WordPad打开D: empcpiolist.txt在文件的最尾部添加如下内容:dir /superboot 0755file /superboot/superboot initrdsuperbootsuperboot 0644file /superboot/superuser initrdsuperbootsuperuser 0644file /superboot/re initrdsuperboote 0644file /superboot/su initrdsuperbootsu 04555

14 现在快大功告成了,开始打包复原。接着在第9步的dos命令窗口运行打包命令。bootimg --repack-ramdiskbootimg --repack-bootimg照图 *** 作!

15 文件修改完成,将d盘temp目录下面的boot.img,拷贝到粉屏手机接入电脑里d出的那个image文件夹中。d出是否覆盖的对话框,因为我们开始时进行过备份,所以这里放大大胆的点“是”,覆盖boot.img文件。16 重启手机,root完毕!检查手机的应用程序栏里是否已有了Superuser的程序,这就表示root成功!按这样root成功的机器,不会破坏原有程序,也不用添加后门程序,刷机风险基本为零。如果重新刷机后,发现没有root权限了,自行再root一次即可。如果认为不需要root权限,可以重新恢复原始备份的boot.img文件即可。 给我分吧 这个好详细了


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11750817.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存