首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Android 安全】DEX 加密 ( Application 替换 | 获取 ContextImpl、ActivityThread、LoadedApk 类型对象 )

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

作者头像
韩曙亮
发布2023-03-28 20:22:20
发布2023-03-28 20:22:20
4960
举报

文章目录

一、获取对象类型分析


【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 中替换 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、获取对象类型分析
  • 二、替换 Application 时机
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档