【Android 安全】DEX 加密 ( Application 替换 | 获取 ContextImpl、ActivityThread、LoadedApk 类型对象 )

简介: 【Android 安全】DEX 加密 ( Application 替换 | 获取 ContextImpl、ActivityThread、LoadedApk 类型对象 )

文章目录

一、获取对象类型分析

二、替换 Application 时机





一、获取对象类型分析


在 【Android 安全】DEX 加密 ( Application 替换 | 获取 ContextImpl、ActivityThread、LoadedApk 类型对象 | 源码分析 ) 博客中分析了获取 ContextImpl , ActivityThread , LoadedApk 类型的对象的方法 ,


ContextImpl : 从 Application 的 attachBaseContext(Context base) 方法中获取 ContextImpl 对象 , ContextImpl 对象就是该方法的参数 ;

ActivityThread : 从 ContextImpl 对象中获取其 ActivityThread mMainThread 成员变量 ;

LoadedApk : 从 ContextImpl 对象中获取其 LoadedApk mPackageInfo 成员变量 ;





二、替换 Application 时机


替换 Application 操作 , 必须在 onCreate 方法中执行 ;



因为在 ActivityThread 中 , Application app = data.info.makeApplication(data.restrictedBackupMode, null) 代码创建 Application ,


其本质是调用 LoadedApk 的 makeApplication 方法 , 在该方法中调用了 Instrumentation 的 newApplication 方法 ,


Instrumentation 的 newApplication 方法 , 最后会调用 Application 的 attachBaseContext 方法 ;


attachBaseContext 执行完毕后 , ContextImpl , ActivityThread , LoadedApk 中的 Application 相关的成员才被赋值 ;


如果要替换的话 , 一定要等到 上述 Application 相关成员赋值完成后 , 再去替换 , 才能最终替换调 Application ;


而 Application 的 onCreate 方法回调时 , ContextImpl , ActivityThread , LoadedApk 中的 Application 相关的成员已经赋值完毕 , 此时我们取替换掉这些成员中的 Application , 即可完成 Application 的替换操作 ;



因此 必须在 onCreate 方法中替换 Application , 不能在 attachBaseContext 中替换 ;


目录
相关文章
|
3月前
|
Android开发 开发者
Android基础知识:什么是Intent?有哪些类型的Intent?
Android基础知识:什么是Intent?有哪些类型的Intent?
57 0
|
3月前
|
安全 Linux Android开发
Android 安全功能
Android 安全功能
37 0
|
3月前
|
安全 Linux Android开发
Android安全启动学习(一):AVB校验是什么?
Android安全启动学习(一):AVB校验是什么?
99 0
|
4月前
|
Android开发 芯片 开发者
adb 查看安卓手机 CPU 类型(armeabi、armeabi-v7a、arm64-v8a ...)
adb 查看安卓手机 CPU 类型(armeabi、armeabi-v7a、arm64-v8a ...)
415 0
|
3月前
|
存储 安全 Linux
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
124 0
|
4月前
|
数据库 Android开发
Android Studio开发之应用组件Application的讲解及实战(附源码,通过图书管理信息系统实战)
Android Studio开发之应用组件Application的讲解及实战(附源码,通过图书管理信息系统实战)
51 0
|
6月前
|
存储 安全 Java
Android DataStore:安全存储和轻松管理数据
Android DataStore:安全存储和轻松管理数据
|
2月前
|
Android开发
安卓逆向 -- Hook多个dex文件
安卓逆向 -- Hook多个dex文件
19 1
|
3月前
|
缓存 Java 数据库
Android 性能优化: 请解释ANR(Application Not Responding)是什么,如何避免它?
Android 性能优化: 请解释ANR(Application Not Responding)是什么,如何避免它?
49 0
|
3月前
|
安全 Java 数据安全/隐私保护
Android和iOS应用程序加固方法详解:混淆、加壳、数据加密、动态加载和数字签名实现
Android和iOS应用程序加固方法详解:混淆、加壳、数据加密、动态加载和数字签名实现
73 0