Android5.1.1源码 - zygote fork出的子进程如何权限降级

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android5.1.1源码 - zygote fork出的子进程如何权限降级脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

如果不知道zygote是什么或者好奇zygote如何启动,可以去看老罗的文章
@L_777_0@

所有AndROId应用进程都是zygote fork出来的,新fork出来的应用进程还保持着root权限,这显然是不被允许的,所以这个fork出来的子进程的权限需要被降级,本文说的就是Android码在什么地方执行了权限降级的操作。

执行路径

下面的runSelectLoop方法是类ZygoteinIT的成员方法,它在文件”frameworks/base/core/java/com/android/internal/os/ZygoteInit.java”中,下面是它的源码:

Android5.1.1源码 - zygote fork出的子进程如何权限降级


Android5.1.1源码 - zygote fork出的子进程如何权限降级

zygote会在这个方法中等待客户端通知启动一个新的应用程序,详情可以看前言部分列出的文章。现在我们关心的是done = PEers.get(index).runOnce();语句,这个语句调用了runOnce方法启动了一个新的应用进程,runOnce方法是ZygoteConnection类的成员方法,下文从runOnce方法开始分析。

ZygoteConnection.runOnce方法在文件”frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java”中,下面是它的源码:

Android5.1.1源码 - zygote fork出的子进程如何权限降级

parsedargs中保存了要启动的应用的信息,它的类型是arguments,Arguments是ZygoteConnection的内部类。
runOnce方法中调用了Zygote.forkAndSpecialize方法,这个方法在文件”frameworks/base/core/java/com/android/internal/os/Zygote.java”中,下面是它的源码:

Android5.1.1源码 - zygote fork出的子进程如何权限降级

在这个方法中调用了nativeForkAndSpecialize方法。
nativeForkAndSpecialize是一个native方法,在native代码中它的函数名是com_android_internal_os_Zygote_nativeForkAndSpecialize,这个函数在文件”frameworks/base/core/jni/com_android_internal_os_Zygote.cpp”中,下面是它的源码:

Android5.1.1源码 - zygote fork出的子进程如何权限降级

在这个函数中调用了ForkAndSpecializeCommon函数。

子进程权限降级函数

ForkAndSpecializeCommon函数在文件”frameworks/base/core/jni/com_android_internal_os_Zygote.cpp”中,在这个函数中调用了fork函数,并且fork出的子进程将自身权限降级,下面是它的源码:

Android5.1.1源码 - zygote fork出的子进程如何权限降级


Android5.1.1源码 - zygote fork出的子进程如何权限降级

在这个函数中子进程分别调用了SetGids、SetRLimits、setresgid、setresuid,设置了组ID和用户ID将自身权限降级。

作者:寻禹@阿里移动安全,更多安全技博客,请点击阿里聚安全博客

脚本宝典总结

以上是脚本宝典为你收集整理的Android5.1.1源码 - zygote fork出的子进程如何权限降级全部内容,希望文章能够帮你解决Android5.1.1源码 - zygote fork出的子进程如何权限降级所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。