APK不用su的方式来获取ROOT权限
来源:互联网 发布:linux samba 安装方法 编辑:程序博客网 时间:2024/04/29 17:23
在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权限
- libevent源码分析
- css学习小总结
- Eclipse团队CVS简明教程
- android json解析及简单例子
- Eclipse在线安装svn插件
- APK不用su的方式来获取ROOT权限
- c 输入输出函数
- jsp向servlet传参中文乱码
- wms - 分页查询
- 人脸识别技术资料和源码(包含人脸库)
- windows server 2003 修改Administrator登录密码
- zip压缩
- 模态窗口下,form提交时会打开新窗口的解决办法
- CSS(5)——图片布局