【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | Instrumentation 源码分析 )
文章目录
- 一、Instrumentation 源码分析
- 二、Instrumentation 创建 Application 相关的部分源码
dex 解密时 , 需要将 代理 Application 替换为 真实 Application ; 替换 Application 首先要理解系统如何注册应用的 Application 的 ;
一、Instrumentation 源码分析
Instrumentation.java 类参考源码 : 6.0.1_r16/xref/frameworks/base/core/java/android/app/Instrumentation.java 常用方法 :
- newActivity : 创建 Activity ;
- newApplication : 创建 Application ;
- sendKeyDownUpSync : 模拟按键 ;
上一篇博客中讲解了 LoadedApk 中调用 makeApplication 方法创建应用的 Application , 在该方法中通过调用 Instrumentation 的 newApplication 方法创建 Application ;
在 Application newApplication(ClassLoader cl, String className, Context context) 中 , 调用了其重载函数 Application newApplication(Class<?> clazz, Context context) , 前者包含 333 个参数 , 后者包含 222 个参数 ;
public Application newApplication(ClassLoader cl, String className, Context context)throws InstantiationException, IllegalAccessException, ClassNotFoundException {return newApplication(cl.loadClass(className), context);}
完整源码参考 : 6.0.1_r16/xref/frameworks/base/core/java/android/app/Instrumentation.java
在 Application newApplication(Class<?> clazz, Context context) 函数中就执行了两行代码 , 调用 clazz.newInstance() 反射创建 Application 对象 , 然后调用 Application 的 attach 函数 , 传入 Context 上下文对象 ;
static public Application newApplication(Class<?> clazz, Context context)throws InstantiationException, IllegalAccessException, ClassNotFoundException {Application app = (Application)clazz.newInstance();app.attach(context);return app;}
完整源码参考 : 6.0.1_r16/xref/frameworks/base/core/java/android/app/Instrumentation.java
Application 的 void attach(Context context) 方法中 , 调用了 attachBaseContext(context) 方法 , 由此可以看出在 Application 中 , attachBaseContext 函数要比 onCreate 先执行 ;
在 Application 使用反射方法创建出来之后 , 马上就会调用 attach 方法 , 进而先调用 attachBaseContext 方法 ;
public class Application extends ContextWrapper implements ComponentCallbacks2 {/*** @hide*//* package */ final void attach(Context context) {attachBaseContext(context);mLoadedApk = ContextImpl.getImpl(context).mPackageInfo;}
}
源码参考 : xref/frameworks/base/core/java/android/app/Application.java
二、Instrumentation 创建 Application 相关的部分源码
public class Instrumentation {/*** Perform instantiation of the process's {@link Application} object. The* default implementation provides the normal system behavior.* * @param cl The ClassLoader with which to instantiate the object.* @param className The name of the class implementing the Application* object.* @param context The context to initialize the application with* * @return The newly instantiated Application object.*/public Application newApplication(ClassLoader cl, String className, Context context)throws InstantiationException, IllegalAccessException, ClassNotFoundException {return newApplication(cl.loadClass(className), context);}/*** Perform instantiation of the process's {@link Application} object. The* default implementation provides the normal system behavior.* * @param clazz The class used to create an Application object from.* @param context The context to initialize the application with* * @return The newly instantiated Application object.*/static public Application newApplication(Class<?> clazz, Context context)throws InstantiationException, IllegalAccessException, ClassNotFoundException {Application app = (Application)clazz.newInstance();app.attach(context);return app;}
}
完整源码参考 : 6.0.1_r16/xref/frameworks/base/core/java/android/app/Instrumentation.java
【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | Instrumentation 源码分析 )相关推荐
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | ActivityThread 后续分析 | Application 替换位置 )
文章目录 一.ActivityThread 后续分析 二.ActivityThread 相关源码 三.Application 替换位置 dex 解密时 , 需要将 代理 Application 替换为 ...
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | LoadedApk 源码分析 )
文章目录 一.LoadedApk 源码分析 二.LoadedApk 源码 makeApplication 方法分析 dex 解密时 , 需要将 代理 Application 替换为 真实 Applic ...
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | ActivityThread 源码分析 )
文章目录 一.ActivityThread 源码分析 二.ActivityThread 部分代码示例 dex 解密时 , 需要将 代理 Application 替换为 真实 Application ; ...
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | LoadedApk 后续分析 )
文章目录 一.LoadedApk 后续分析 二.LoadedApk 后续先关源码 dex 解密时 , 需要将 代理 Application 替换为 真实 Application ; 替换 Applic ...
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 )
文章目录 一.Zygote 进程孵化器 二.应用启动概述 dex 解密时 , 需要将 代理 Application 替换为 真实 Application ; 替换 Application 首先要理解系 ...
- 【Android 安全】DEX 加密 ( Application 替换 | 兼容 ContentProvider 操作 | 源码资源 )
文章目录 一. 命中 ActivityThread 中 installProvider 方法的分支三 1. 原理分析 2. 代码实现 二. 在 ContextImpl 的 createPackageC ...
- 【Android 安全】DEX 加密 ( Application 替换 | 分析 ContentProvider 组件中调用 getApplication() 获取的 Application 二 )
文章目录 一. ActivityThread 中的 installProvider 方法 ( 创建 ContentProvider 内容提供者 ) 二. installProvider 方法的第三分支 ...
- 【Android 安全】DEX 加密 ( Application 替换 | 分析 BroadcastReceiver 组件中调用 getApplication() 获取的 Application )
文章目录 一. Service 中的 getApplication() 方法分析 二. ActivityThread 中的 H 处理 RECEIVER 消息 三. ActivityThread 中的 ...
- 【Android 安全】DEX 加密 ( Application 替换 | 替换 LoadedApk 中的 Application mApplication 成员 )
文章目录 一. 当前 Application 替换进度 二. 替换 LoadedApk 中的 Application mApplication 成员 一. 当前 Application 替换进度 上一 ...
最新文章
- 2020-12-17 【 java优先队列的用法】
- linux系统下一个冷门的RAID卡ioc0及其监控mpt-status
- lamp自动部署工具_salt实现lamp自动化部署
- 一个php请求的执行过程,PHP程序执行的过程原理
- Linq连接查询之左连接、右连接、内连接、全连接、交叉连接、Union合并、Concat连接、Intersect相交、Except与非查询...
- Android Sensor架构和原理分析
- linux -- open /acess/ftruncate/lstat 函数
- 玉柴spn码故障对照表_故障代码一览表
- Hybird方案-概述
- JDBC简介,JDBC API,,MySQL连接、SQL语句
- 大学计算机基础教程第12章软件技术基础
- bzoj3039 玉蟾宫
- php 验证码数字英文的,验证码的英文_php 中英文验证码程序
- APP的缓存文件到底应该存在哪?
- Fanuc发那科数据采集
- Oracle分析函数(每组数据取一条记录)
- 本以为PlusFo是个青铜,没想到竟是个王者
- 计算机考研是选地区还是学校,2021考研:举例说明,怎么选择院校和地区
- python将json转csv代码示例
- Pytorch 中 CAM绘制热度图
热门文章
- [ant]通过Android命令自动编译出build.xml文件
- 2012年生活方向盘
- 最简单EXT调用WCF
- EXP、IMP 命令详解
- 双节棍---1、动作和杂记
- 后盾网lavarel视频项目---Laravel 安装代码智能提示扩展「laravel-ide-helper」
- [Linux]lnmp一键安装包,访问yii/tp5/laravel的时候,报错500或者空白页面
- 1-3_基本概念_程序进程
- 运行nltk示例 Resource u'tokenizers punkt english.pickle' not found解决
- Linux Java连接MySQL数据库