【Android 安全】DEX 加密 ( Application 替换 | ActivityThread 中的 mAllApplications 集合添加 Application )
文章目錄
- 一、 當前 Application 替換進度
- 二、 ActivityThread 中的 mAllApplications 集合添加 Application
一、 當前 Application 替換進度
上一篇博客 【Android 安全】DEX 加密 ( Application 替換 | 加密不侵入原則 | 替換 ActivityThread 的 mInitialApplication 成員 ) 替換了 ActivityThread 的 mInitialApplication 成員 , 本博客中繼續向下替換剩余的 Application ;
替換進度如下 :
替換進度如下 :
① ContextImpl 的 private Context mOuterContext 成員是 kim.hsl.multipledex.ProxyApplication 對象 ; ( 已完成 )
② ActivityThread 中的 Application mInitialApplication 成員是 kim.hsl.multipledex.ProxyApplication 對象 ; ( 已完成 )
③ ActivityThread 中的 ArrayList<Application> mAllApplications 集合中添加了 kim.hsl.multipledex.ProxyApplication 對象 ;
④ LoadedApk 中的 mApplication 成員是 kim.hsl.multipledex.ProxyApplication 對象 ;
二、 ActivityThread 中的 mAllApplications 集合添加 Application
向 ActivityThread 中的 ArrayList<Application> mAllApplications 集合中添加了 kim.hsl.multipledex.ProxyApplication 對象 ;
首先 , 獲取 ActivityThread 對象 ;
ActivityThread 之前已經獲取過了 , 從 從 ContextImpl 對象中獲取其 ActivityThread mMainThread 成員變量就是 ActivityThread , 參考 【Android 安全】DEX 加密 ( Application 替換 | 加密不侵入原則 | 替換 ActivityThread 的 mInitialApplication 成員 ) 博客 ;
然后 , 獲取 ActivityThread 的 ArrayList<Application> mAllApplications 成員 , 該成員是一個集合 , mAllApplications 成員是私有的 , 設置可訪問性 ;
// 獲取 ActivityThread 中的 mAllApplications 成員Field mAllApplicationsField =activityThreadClass.getDeclaredField("mAllApplications");// mAllApplications 成員是私有的 , 設置可訪問性mAllApplicationsField.setAccessible(true);最后 , 獲取 ActivityThread 中的 ArrayList<Application> mAllApplications 隊列 , 并向其中添加真實的 Application ;
// 獲取 ActivityThread 中的 ArrayList<Application> mAllApplications 隊列ArrayList<Application> mAllApplications =(ArrayList<Application>) mAllApplicationsField.get(mMainThread);// 將真實的 Application 添加到上述隊列中mAllApplications.add(delegate);本步驟代碼示例 :
// III . 替換 ② ActivityThread 中的 ArrayList<Application> mAllApplications// 集合中添加了 kim.hsl.multipledex.ProxyApplication 對象 ;// 獲取 ActivityThread 中的 mAllApplications 成員Field mAllApplicationsField =activityThreadClass.getDeclaredField("mAllApplications");// mAllApplications 成員是私有的 , 設置可訪問性mAllApplicationsField.setAccessible(true);// 獲取 ActivityThread 中的 ArrayList<Application> mAllApplications 隊列ArrayList<Application> mAllApplications =(ArrayList<Application>) mAllApplicationsField.get(mMainThread);// 將真實的 Application 添加到上述隊列中mAllApplications.add(delegate);總結
以上是生活随笔為你收集整理的【Android 安全】DEX 加密 ( Application 替换 | ActivityThread 中的 mAllApplications 集合添加 Application )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Flutter】Banner 轮播组件
- 下一篇: 【Android 安全】DEX 加密 (