【Android 安全】DEX 加密 ( Application 替换 | 获取 ContextImpl、ActivityThread、LoadedApk 类型对象 )
文章目录
一、获取对象类型分析
在 【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 中替换 ;
相关文章
- android 浏览器 开发,Android 浏览器的开发实例分享
- android 常用加密,分享一下Android各种类型的加密
- 代码加密 android,Android 开发怎样做代码加密或混淆「建议收藏」
- android安全题目KGB Messenger 解题
- android自定义view圆形进度条
- android 验证码短信验证码,Android短信验证码倒计时验证的2种常用方式
- robotium android,Robotium 测试Android apk安装包
- Android resource linking failed_android:authorities
- 【Android 应用开发】对Android体系结构的理解--后续会补充
- 【Android FFMPEG 开发】FFMPEG 视频播放进度控制 ( 显示播放进度 | 拖动进度条播放 )
- 【Android 高性能音频】OboeTester 音频性能测试应用 ( Oboe 输出测试参数 | API 选择 | 音频输出设备选择 | 采样率 | 通道 | 采样格式 | 播放偏好 )
- 【Android 安全】DEX 加密 ( Java 工具开发 | 解压 apk 文件 | 加密生成 dex 文件 | 打包未签名 apk 文件 | 文件解压缩相关代码 )
- 【Android 安全】DEX 加密 ( Application 替换 | 判定自定义 Application 存在 | 获取 ContextImpl 对象 )
- 【Android 安全】DEX 加密 ( Application 替换 | 创建用户自定义 Application | 替换 ContextImpl 对象的 mOuterContext 成员 )
- 【Android 安全】使用 360 加固宝加固应用 ( 加固工具准备 | 生成签名 APK | 加固操作 | 反编译验证加固效果 )
- 【Android Gradle 插件】BuildType 编译类型配置 ③ ( javaCompileOptions 配置 | jniDebuggable 配置 )
- 【Android Gradle 插件】 Splits 配置 ① ( BaseExtension#splits 配置 | Splits 配置简介 )
- [android] 看博客学习Android常见的几种RuntimeException详解手机开发
- [android] 手机卫士保存安全号码详解手机开发
- Android下保存数据到SharePreference和从SharePreference读取数据详解编程语言
- Android 文件保存到应用和sd卡中详解编程语言
- 倒数日·Days Matter 正式推出 Android 官方免费版
- android在连拍菜单中增加连拍张数选项功能实现代码
- 解析Android中webview和js之间的交互
- Android中让图片自适应控件的大小的方法