【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 )
dex 解密时 , 需要将 代理 Application 替换为 真实 Application ; 替换 Application 首先要理解系统如何注册应用的 Application 的 ;
一、Zygote 进程孵化器
Zygote 进程孵化器 : Android 中的所有的进程 , 如 系统进程 , 应用进程 , SystemServer 进程 , 都是由 Zygote 调用 fork 方法创建的 ;
SystemServer 进程 : Android 手机开机后 , 就会启动 Zygote 进程 , 并且创建 SystemServer 进程 , SystemServer 进程就是 核心服务 所在进程 , 核心服务如 WindowsManagerService , PowerManagerService , ActivityManagerService 等系统服务 ;
ActivityManagerService 服务 : 简称 AMS , 该服务由 SystemServer 启动 , 其主要功能是 控制四大组件启动和调度工作 , 控制 应用程序的管理和调度工作 ;
二、应用启动概述
Android 启动流程涉及的源码 :
- /frameworks/base/core/java/android/app/ActivityThread.java
- /frameworks/base/core/java/android/app/ApplicationThreadNative.java
- /frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
在 Launcher 应用 ( 系统主界面 ) 中点击应用图标 , Launcher 应用会启动该 app ;
Launcher 应用通过 Instrumentation 经过一系列调用 , 获取 ActivityManagerService ;
在 ActivityManagerService 中调用 start() 方法 , 首先查看要启动的应用是否已经存在 ;
如果存在 , 就直接切换到前台 ;
如果不存在 , 则调用 Process 类 , 通过 Process 类调用 Zygote 的 fork 方法 , 创建一个进程 ;
Zygote 创建新的应用进程后 , 会调用 ActivityThread 的 main 函数 , 在该主函数中 , 会创建 ActivityThread 对象 , 然后启动 Looper.loop , 无限循环处理消息 ;
在 ActivityThread 中会调用 ActivityThread 对象的 attach 函数 , 在该函数中 , 通过 Binder 机制 , 调用 ActivityManagerProxy 的 attachApplication 方法 ;
之后通过一系列调用 , 通过 Binder 机制调用 ActivityThread 的 bindApplication 方法 , ActivityThread 会向其 Handler 发送 BIND_APPLICATION 消息 , 通过 handleMessage 方法调用 handleBindApplication 方法 , 此时真正的启动 Application ;
之前研究 UI 绘制流程时 , 看过一段 ActivityThread 绘制相关代码 , 参考博客 【Android 应用开发】UI绘制流程 ( 生命周期机制 | 布局加载机制 | UI 绘制流程 | 布局测量 | 布局摆放 | 组件绘制 | 瀑布流布局案例 )
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/109995592
- 点赞
- 收藏
- 关注作者
评论(0)