APK不用su的方式来获取ROOT权限
来源:互联网 发布:二维码生成算法 .net 编辑:程序博客网 时间:2024/05/16 06:53
http://blog.csdn.net/superkris/article/details/7763452
在android启动过程 里有讲过,startSystemServer启动了zygote,也就是app_main.cppframeworks/base/cmds/app_main.cpp里的主函数。
但是在startSystemServer这个函数里有下面的代码
zygote String args[] = {
"--setuid=1000",
.......
"--capabilities=130104352,130104352",
};
允许能力和有效能力分别为130104352,130104352
启动server通过Dalvik_dalvik_system_Zygote_forkAndSpecialize调到forkAndSpecializeCommon
最后用prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);和setCapabilities把能力设进去了
uid为1000, 对应system\core\include\private\android_filesystem_config.h里的AID_SYSTEM,即为system用户,具有framework中的system权限
所以zygote再创建的进程是不能分配root权限的。
如果zygote不用su的方式,如何fork一个具有root权限的进程呢?
再看ActivityManagerService.java中的startProcessLocked函数,
里面的工厂测试模式把uid设置为0想获取root权限,最终还是通过socket让zygote去fork进程,问题就来了,具有system权限的zygote,能创建root级的用户进程吗?
现在做个实验:修改startProcessLocked函数,尝试把某个应用(根据应用名字判断)的uid设置为0,看看该APK能否获得root权限,实际上和理论上一样,创建该进程失败,
分析失败的原因,是ZygoteConnection.java里判断了进程id,如果小于AID_SYSTEM(1000)则认为是非法,而zygote是具有root权限的唯一server,所以在判断的后面,根据传进来的包名(需要改动activityserver,否则传不进来),把uid和gid改为0即可
ZygoteConnection.java
boolean runOnce() throws ZygoteInit.MethodAndArgsCaller
ActivityManagerService.java
http://www.cnblogs.com/innost/archive/2011/01/09/1931456.html
- APK不用su的方式来获取ROOT权限
- APK不用su的方式来获取ROOT权限
- 不用Root权限获取已经安装的Apk安装包
- mac os 获取root/su/sudo权限的方法
- android apk获取root权限
- Android apk 获取系统权限的方式
- ToolRoot——让你的APK获取ROOT权限
- APK的重新签名与获取Root权限
- 怎样使android apk 获取root权限
- 怎样使Android apk 获取root权限
- 怎样使android apk 获取root权限
- 通过adb shell命令来获取data的权限,输入su的命令出错
- root权限的获取
- Ubuntu 1404 不能su 来获取最高权限
- ubuntu su进入root权限
- ubuntu su进入root权限
- ubuntu su进入root权限
- Android su开放root权限
- Java POI读取Office excel (2003,2007)
- 完全分布式hadoop集群安装之一:VMWare Vsphere ESXI 5.1 安装配置
- 数据库技术_Orcale技术(0003)_UTL_FILE包用法详解_写出文件、读入库表
- etc配置文件解读——fstab
- SELECT FD_ZERO FD_ISSET
- APK不用su的方式来获取ROOT权限
- 程序员最值得关注的10个C开源项目
- 小米将投10亿美金打造移动内容生态
- etc配置文件解读——inittab
- 蓝桥杯中的完美数问题
- My97DatePicker日历控件的简单用法
- sqlserver字段类型详解
- 通过GC输出分析内存泄露问题
- 省市下拉