android编译root权限
Ⅰ 怎么用代码判断android手机是否开启了ROOT权限
android手机开启了root权限,主要是根据root之后,获取了手机的最高权限,底层linux系统就会生成一个以su结尾的文件,su代表super超级权限,如下代码:
/**
* 判断当前手机是否有ROOT权限
* @return
*/
public boolean isRoot(){
boolean bool = false;
try{
if ((!new File("/system/bin/su").exists()) && (!new File("/system/xbin/su").exists())){
bool = false;
} else {
bool = true;
}
Log.d(TAG, "bool = " + bool);
} catch (Exception e) {
}
return bool;
}
android底层是使用linux进行编译和一些驱动、网络管理的,所以可以根据linux的权限特性来判断是否root,权限的管理在linux里面很多,包括读写、删除文件的权限,也有关于访问网络的权限,这些权限都需要开通才能有。
Ⅱ Android aosp源码编译后root权限问题
ROOT获得最高权限是删除这些应用的唯一途径
实际手动操作的流程非常复杂,并且有版本限制
我推荐你款不错的手机ROOT工具吧,
我一直都是在用的,很不错
使用应用宝获取手机root权限在工具
选项里找到一键ROOT即可或者KINGROOT也行。
Ⅲ Android 的提权 (Root) 原理是什么
Android的内核就是Linux,所以Android获取root其实和Linux获取root权限是一回事儿。
你想在Linux下获取root权限的时候就是执行sudo或者su,接下来系统会提示你输入root用户的密码,密码正确就获得root权限了。Android本身就不想让你获得Root权限,大部分手机出厂的时候根本就没有su这个程序。所以你想获得Android的root权限,第一步就是要把编译好的su文件拷贝到Android手机的/system/bin或者/system/xbin/目录下。我们先假设你可以把su放在bin下,接下来你可以在Android手机的adb shell或者串口下输入su了。上面说了,执行su,系统会提示你输入root用户密码,但你怎么可能知道密码呢?暴力破解吗?破解root的黑客当然不会这么做,这就涉及到第二个问题。
一般我们在Linux的console下输入 ls -l 会列出所有文件的权限。
比如:-rwxr-xr-x,用过Linux的人都知道r代表该文件可读,w代表可写,x代表可执行,-就代表没有该权限。第一个rwx代表文件所有者的权限,第二个rwx代表和所有者同组人的权限,第三个rwx代表其他用户对该文件的权限。但下面这个文件就比较特殊。
rws,它的执行权限标志位是一个s,s代表当任何一个用户执行该文件的时候都拥有文件所有者的权限,这文件的所有者是root,简单点说就是不管谁执行这个文件,他执行的时候都是以root身份执行的。那root用户执行任何文件都是不需要密码的。
这个时候如果你把su文件的权限置成-rwsr-xr-x会发生什么?su这个程序本来就是赋予执行者root权限的,但执行的时候又不需要密码,所以执行一下这个文件就自动成root身份了。
问题都清楚了,就是你需要把su拷贝到Android手机上,并且把su权限标志位置成-rwsr-xr-x。能把这个事情搞定你就成功root了一个手机。
大概意思就是两行代码
cp /data/tmp/su /system/bin/ # su 到/system/分区
chmod 1775 /system/bin/su #把su置成-rwsr-xr-x
那怎么搞定这个事情呢?Android的system分区本身不可写,只有是root的权限才能改动它,执行不了啊。
一个办法就是找一个本身已经有root权限的进程来启动我上面的两行代码,那我这两行代码一启动就是root权限,就可以顺利执行了。但是已经有root权限的进程都是出厂时候就装到手机上的,代码写死了,你没法控制它执行你自己的代码啊。这个时候就需要你找漏洞了,比如用来破解Android2.3 root权限的zergRush漏洞就是利用一个拥有root权限的进程栈溢出漏洞,栈溢出说白了就是这个进程读到了自有内存之外的地址空间,这段内存空间没分配给它,谁都能写这段内存,那我就可以把自己的两行代码预先写到这里,运行zergRush代码,然后等那个倒霉的进程执行我就行了。
如果各位有一定基础,能看懂我上面讲的,就基本知道原理其实并不难,难点在于找到漏洞。
zergRush的代码在这儿:
revolutionary/zergRush · GitHub
Ⅳ 在android源码下编译apk能有root权限吗
编译apk和root权限没有联系,apk是应用程序,root权限是android系统里的设置,android系统不给root权限,在源码下编译apk也是无用的
Ⅳ Android 手机如何获得 root 权限
Android 手机获得 root 权限
要想获取root权限就需要使用root工具,现在网络root、卓大师、腾讯管家等常用工具都有获取root权限的功能。不过有的工具支持的机型不多。 这里卓大师的感觉支持的机型多点, 大家可以下载自己喜欢的工具来使用!或者使用网络这样大公司研发的工具。
Ⅵ Android 程序如何通过编程获取 root 权限运行
Android是基于linux,在linux系统里,想通过root权限运行程序,需要使用su命令先切换到root用户,然而在Android系统里没有预置su命令,因此如果使用root权限,需要在linux系统中进行非法提权,俗称就是破解ROOT,一般情况下都是通过发现内核漏洞,让系统执行一小块代码,这段代码能充分利用该漏洞,从而非法获取ROOT权限。
获取了ROOT权限之后,就可以为所欲为,植入su命令到系统就可以了。
因此,对于已经破解ROOT的android系统,想通过ROOT权限运行,先执行su即可。
如果尚未破解ROOT,需要在程序中先破解ROOT,通常情况下,不同版本的android的系统,使用的破解代码也不一样。Ⅶ 对安卓手机进行root的原理是什么
Android的内核就是Linux,所以Android获取root其实和Linux获取root权限是一回事儿。想在Linux下获取root权限的时候就是执行sudo或者su,接下来系统会提示输入root用户的密码,密码正确就获得root权限了。
Android本身就不想让获得Root权限,大部分手机出厂的时候根本就没有su这个程序。所以想获得Android的root权限,第一步就是要把编译好的su文件拷贝到Android手机的/system/bin或者/system/xbin/目录下。先假设可以把su放在xbin下,接下来可以在Android手机的adb shell或者串口下输入su了。
Linux下su以后输入密码就可以root了,但Android里的su和Linux里的su是不一样的,Android里的su不是靠验证密码的,而是看原来的权限是什么。意思就是如果是root,那可以通过su切换到别的用户,比如说shell,wifi,audio什么的。但如果是root之外的其他用户,就不能切换回root了,会提示permission denied。
Ⅷ 有android源码的情况下怎么开放系统的root权限
编译的时候选debug版本 然后编译完成之后通过adb remout和adb root就可以了
Ⅸ 如何让android 程序 获得 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 权限。
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦