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

news/2024/7/2 23:05:34

前言

如果不知道zygote是什么,或者好奇zygote如何启动,可以去看老罗的文章:
Android系统进程Zygote启动过程的源代码分析

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

执行路径

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

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

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

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

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

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

子进程权限降级函数

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

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

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


http://lihuaxi.xjx100.cn/news/256088.html

相关文章

人生第二本书!

我是Datawhale的好朋友,鲁伟。经过一年零三个月的努力,《机器学习公式推导与代码实现》已于日前正式出版了。关注过这本书的公众号读者应该知道,这本书在系列原创机器学习30讲的基础上,并参考了李航老师的《统计学习方法》和周志华…

xxl-job Vs ElasticJob,谁牛?

欢迎关注方志朋的博客,回复”666“获面试宝典1. xxl-job2. 运行 xxl-job3. 开发定时任务3.1 项目创建及配置3.2 定时任务开发方式4. 小结前两天写了一篇文章介绍了一下 ElasticJob,有不少小伙伴强烈建议讲讲 xxl-job,其实 ElasticJob 本来就是…

近期上海面试总结(一)

转眼来上海已经4年了,随着对公司业务的不断熟悉,同时通过与众多的人接触也渐渐加深了对职场的理解,从刚开始的初生牛犊不怕虎毅然来到上海,到如今已快有四个年头了,今年还是面临职场上的抉择,再次找工作吧&…

如何利用 C# + Python 破解猫眼电影的反爬虫机制?

在 如何利用 C# 爬取「猫眼电影:最受期待榜」及对应影片信息! 这篇图文中可以看到猫眼电影对“本月新增想看人数” 和 “总想看人数”进行了字符集加密。 在 如何利用 C# 爬取「猫眼电影:国内票房榜」及对应影片信息! 这篇图文中也…

开源程序员愤怒控诉!Github的「AI码农」Copilot就是寄生虫

视学算法报道 编辑:David【导读】以方便程序员写代码为名,吸血开源社区为实,Github的「AI码农」Copilot其实就是个寄生虫?Github去年推出的「AI程序员」Copilot曾一度受到程序员的热捧,但一个争议始终没有解决。既然是…

C# 获取图片的EXIF 信息

关于 EXIF 信息的介绍。 1 EXIF,是英文Exchangeable Image File(可交换图像文件)的缩写。EXIF是一种图像文件格式,只是文件的后缀名为jpg。EXIF信息是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在jpg文件的头部,也就…

机器学习的出现,是否意味着“古典科学”的过时?

作者:Laura Spinney译者:刘媛媛原文:Are we witnessing the dawn of post-theory science?让我们回忆一下,Isaac Newton 被一个苹果砸中头部,然后是怎么提出牛顿第二定律——万有引力的?大概过程是这样的&…

不做调参侠,重视数据及处理能力?吴恩达发起的Data-Centric赛事总结!

赛题名称:Data-Centric AI Competition比赛官网:https://https-deeplearning-ai.github.io/data-centric-comp/比赛链接:https://worksheets.codalab.org/worksheets/0x7a8721f11e61436e93ac8f76da83f0e6赛题介绍在大多数机器学习比赛中&…