【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 启动流程涉及的源码 :


Launcher 应用 ( 系统主界面 ) 中点击应用图标 , Launcher 应用会启动该 app ;


Launcher 应用通过 Instrumentation 经过一系列调用 , 获取 ActivityManagerService ;


在 ActivityManagerService 中调用 start() 方法 , 首先查看要启动的应用是否已经存在 ;
如果存在 , 就直接切换到前台 ;
如果不存在 , 则调用 Process 类 , 通过 Process 类调用 Zygotefork 方法 , 创建一个进程 ;


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 绘制流程 | 布局测量 | 布局摆放 | 组件绘制 | 瀑布流布局案例 )

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页