【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 中替換 ;
總結
以上是生活随笔為你收集整理的【Android 安全】DEX 加密 ( Application 替换 | 获取 ContextImpl、ActivityThread、LoadedApk 类型对象 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【鸿蒙 HarmonyOS】UI 组件
- 下一篇: 【Android 安全】DEX 加密 (