Android逆向学习68——Zygote详解

admin 2024年5月20日19:40:56评论8 views字数 1024阅读3分24秒阅读模式

Zygote详解

1.Zygote概述

Zygote是Android系统应用中一个相当重要的进程,主要功能是执行Android应用程序。
应用程序每次运行都要重新初始化并启动虚拟机,这个过程会耗费相当长时间。
应用程序运行前,Zygote进程通过共享已运行的虚拟机的代码与内存信息,缩短应用程序运行所耗费的时间。
为什么要研究Zygote?

Android逆向学习68——Zygote详解

通常子进程被fork出来后,会继续执行系统调用exec,exec将用一个新的可执行文件的内容替换当前进程的代码段、数据段、堆和栈段。

Zygote运行和init进程运行的区别:
(1)Zygote创建应用程序时只使用了fork,没有调用exec。
(2)Zygote初始化时会创建虚拟机,把需要的系统类库和资源文件加载到内存里。
(3)Zygote fork出子进程后,整个子进程也继承了正常工作的虚拟机和各类系统资源,然后子进程只需要装载APK文件的字节码文件就可以运行了。

Android逆向学习68——Zygote详解
Android逆向学习68——Zygote详解

2.Zygote孵化进程

系统启动后运行的首个进程init,init进程启动运行系统需要的各种Daemon,启动Zygote进程。

Android逆向学习68——Zygote详解
Android逆向学习68——Zygote详解

Zygote启动后,初始化运行Dalvik虚拟机——>然后将所需要的类和资源加载到内存中,再调用fork()创建出Zygote子进程,——>接着子进程动态加载并运行Android程序,——>运行的应用程序A会使用Zygote已经初始化并启动运行的Dalvik虚拟机代码,使用已加载至内存中的类和资源来加快运行速度。

3.由app_process运行ZygoteInit class

Zygote不能直接由init进程启动运行,运行Zygote类,必须先生成Dalvik,再在Dalvik虚拟机上装载运行ZygoteInit类,这一过程由app_process完成

Android逆向学习68——Zygote详解

app_process先会生成一个Appruntime对象,然后生成Dalvik虚拟机,最后再调用ZygoteInit类的main方法。

3.1 生成AppRuntime对象

Android逆向学习68——Zygote详解

3.2 调用Apprutime对象

Android逆向学习68——Zygote详解

3.3 创建Dalvik虚拟机

AppRuntime的start()函数通过调用JNI_CreateJavaVM()函数来创建虚拟机

Android逆向学习68——Zygote详解

3.4 运行Zygotelnit类

4.ZygoteInit类的功能

我们已经创建好虚拟机,并将ZygoteInit类装载到虚拟机中,ZygoteInit类会被运行

Android逆向学习68——Zygote详解
Android逆向学习68——Zygote详解 Android逆向学习68——Zygote详解

原文始发于微信公众号(安全后厨):Android逆向学习68——Zygote详解

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月20日19:40:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Android逆向学习68——Zygote详解https://cn-sec.com/archives/2760374.html

发表评论

匿名网友 填写信息