【Android 安全】DEX 加密 ( Application 替换 | 加密不侵入原则 | 替换 ActivityThread 的 mInitialApplication 成员 )

简介: 【Android 安全】DEX 加密 ( Application 替换 | 加密不侵入原则 | 替换 ActivityThread 的 mInitialApplication 成员 )

文章目录

一、 加密不侵入 Application 原则

二、 替换 ActivityThread 中的 Application mInitialApplication 成员





一、 加密不侵入 Application 原则


在开发时 , 希望 不侵入 Application , 不侵入原来的应用 ; 这里就需要涉及到将 代理 Application 替换成真实的 Application ;


代理 Application 的作用是对 真实的 Application 所在的 DEX 文件进行解密 , 创建真实的 Application , 并且将真实的 Application 设置到应用中 ;


需要替换的 Application 的位置以及如何获取被替换的成员 : 【Android 安全】DEX 加密 ( Application 替换 | 判定自定义 Application 存在 | 获取 ContextImpl 对象 ) ;


这样就可以实现不用特意修改 Application , 就实现了加密操作 ;



上一篇博客 【Android 安全】DEX 加密 ( Application 替换 | 创建用户自定义 Application | 替换 ContextImpl 对象的 mOuterContext 成员 ) 创建了用户自定义的 Application , 然后替换了 ContextImpl 对象的 mOuterContext 成员 ;


本博客继续完成后续操作 ;



截止到此处, Application 创建完毕 , 下面开始逐个替换下面的 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 中的 Application mInitialApplication 成员


替换 ActivityThread 中的 Application mInitialApplication 成员 , 当前成员是 kim.hsl.multipledex.ProxyApplication 对象 , 需要替换成用户自定义的 Application 对象 ;



首先获取 的 mInitialApplication 成员字段 , 获取 ActivityThread 中的 mInitialApplication 成员 , 注意 mInitialApplication 成员是私有的 , 设置可访问性 ;


Class<?> activityThreadClass = Class.forName("android.app.ActivityThread");
// 获取 ActivityThread 中的 mInitialApplication 成员
Field mInitialApplicationField =
        activityThreadClass.getDeclaredField("mInitialApplication");
// mInitialApplication 成员是私有的 , 设置可访问性
mInitialApplicationField.setAccessible(true);


然后获取 ActivityThread 对象 , 从 ContextImpl 对象中获取其 ActivityThread mMainThread 成员变量 , ContextImpl 就是本应用的上下文对象 , 调用 getBaseContext 方法获得 ;


// 从 ContextImpl 对象中获取其 ActivityThread mMainThread 成员变量
Field mMainThreadField = contextImplClass.getDeclaredField("mMainThread");
mMainThreadField.setAccessible(true);
// ContextImpl 就是本应用的上下文对象 , 调用 getBaseContext 方法获得
Object mMainThread = mMainThreadField.get(baseContext);


最后替换该成员 , 其中 ContextImpl 就是应用的 Context , 直接通过 getBaseContext() 获取即可 ;


// ContextImpl 就是应用的 Context , 直接通过 getBaseContext() 获取即可
mInitialApplicationField.set(mMainThread, delegate);



该步骤的完整代码 :


       

// II . 替换 ④ ActivityThread 中的 Application mInitialApplication
            //                    成员是 kim.hsl.multipledex.ProxyApplication 对象 ;
            Class<?> activityThreadClass = Class.forName("android.app.ActivityThread");
            // 获取 ActivityThread 中的 mInitialApplication 成员
            Field mInitialApplicationField =
                    activityThreadClass.getDeclaredField("mInitialApplication");
            // mInitialApplication 成员是私有的 , 设置可访问性
            mInitialApplicationField.setAccessible(true);
            // 从 ContextImpl 对象中获取其 ActivityThread mMainThread 成员变量
            Field mMainThreadField = contextImplClass.getDeclaredField("mMainThread");
            mMainThreadField.setAccessible(true);
            // ContextImpl 就是本应用的上下文对象 , 调用 getBaseContext 方法获得
            Object mMainThread = mMainThreadField.get(baseContext);
            // ContextImpl 就是应用的 Context , 直接通过 getBaseContext() 获取即可
            mInitialApplicationField.set(mMainThread, delegate);



目录
相关文章
|
6月前
|
安全 算法 量子技术
量子来了,DeFi慌了吗?——聊聊量子安全加密对去中心化金融的“革命冲击”
量子来了,DeFi慌了吗?——聊聊量子安全加密对去中心化金融的“革命冲击”
143 0
|
7月前
|
存储 安全 Cloud Native
云原生安全必修课:RDS透明加密(TDE)与数据脱敏联动实施方案
云原生环境下,数据泄露风险日益严峻,传统安全方案面临加密与脱敏割裂、保护不连续、权限控制粗放三大挑战。本方案融合TDE透明加密与动态数据脱敏技术,构建存储-传输-计算全链路防护体系,通过SQL级加密与角色化脱敏规则,实现细粒度数据保护。结合密钥管理、权限控制与多云适配,提升安全性与性能,广泛适用于金融、医疗等高安全要求场景。
261 3
|
10月前
|
存储 安全 数据安全/隐私保护
Hyper V文件复制安全:加密与访问控制
在Hyper-V环境中,确保文件复制的安全性至关重要。主要措施包括:启用数据加密、使用HTTPS协议和磁盘加密技术(如BitLocker)保护数据传输和存储;通过身份验证、权限管理和审核日志控制访问;定期更新补丁、实施网络隔离及制定备份恢复策略。这些多层次的安全措施共同防止未经授权的访问和数据泄露,保障数据安全。
Hyper V文件复制安全:加密与访问控制
|
3月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
365 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
368 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
813 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
4月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
629 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
3月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
209 0