【Android 插件化】使用 PluginKiller 帮助应用开发者规避发布的 APK 安装包被作为插件的风险 ( 验证应用是否运行在插件化引擎中 )

简介: 【Android 插件化】使用 PluginKiller 帮助应用开发者规避发布的 APK 安装包被作为插件的风险 ( 验证应用是否运行在插件化引擎中 )

文章目录

前言

一、应用开发者规避 APK 安装包被作为插件

二、检测插件化环境

1、检查 AndroidManifest.xml 清单文件

2、检查 运行时 信息

3、检查生成的目录

4、检查组件

前言

在上一篇博客 【Android 插件化】插件化技术弊端 ( 恶意插件化程序的解决方向 | 常用的插件化虚拟引擎 ) 中 , 介绍了插件化的弊端 , DroidPlugin 和 VirtualApp 被用于制作恶意软件 , 黑客利用这两个插件化框架将 APK 文件封装到虚拟机引擎中 , 冒充被封装的 APK ;






一、应用开发者规避 APK 安装包被作为插件


如果被封装的 APK 应用涉及到用户注册 , 登录 , 付费等信息 ;


用户在使用黑客制作的 在插件化引擎 作为宿主软件 , 封装 APK 应用 , 并插入恶意代码 , 导致用户信息泄露 , 严重的还会导致用户金钱损失 ;


作为 APK 开发者的我们 , 必须采取一定的措施 , 避免我们开发的应用被恶意开发者使用 ;


在 ANTI-PLUGIN: DON’T LET YOUR APP PLAY AS AN ANDROID PLUGIN 论文中 , 使用了 PluginKiller , 用于避免自己的应用运行在虚拟化引擎上 , 就是避免自己开发的应用被当做插件 APK 使用 ;






二、检测插件化环境


PluginKiller 这个库在 GitHub 上没有找到 , 这里简单介绍下 PluginKiller 运行机制 , 自己也可以开发这个依赖库 ;



1、检查 AndroidManifest.xml 清单文件


检查 权限 详情 , 插件化引擎 如 DroidPlugin 会声明尽可能多的权限 125 125125 个 , 一般插件化引擎宿主应用的权限范围会大于插件应用的权限 ; 使用 PackageManager 获取应用权限 , 然后访问这些权限 , 如果访问插件应用没有的权限可以访问 , 说明当前运行在插件化引擎中 ;


检查 包名 是否注册到系统中 , 应用安装后 , 会自动在 /data/data 创建对应包名的目录 , 如果没有 , 说明当前运行在插件化引擎中 ;


检查 组件 名称 , 宿主应用中 , 如果要启动 Activity , 涉及到 AMS 调用 , AMS 接收的 Activity 必须是在清单文件中注册过得组件 ; AMS 切换到主线程 ActivityThread 后会使用 hook 技术将 在清单文件中注册过得 " 桩 " Activity 替换为 插件 Activity ; 调用 ActivityManager.getRunningServices 获取的组件是 " 桩 " 组件 , 不是插件中的组件 , 二者有区别的 ;



2、检查 运行时 信息


应用运行时会有一个 PID 和 UID ;


PID 是 Process ID , 进程 ID ;

UID 是 User ID , 用户 ID , 应用安装时自动分配的 , 如果应用不卸载 , 会一直保持该 UID ;

插件化引擎中运行的 APK 插件 , 其 UID 都是宿主应用的 UID ;


插件化引擎创建一个进程 , 运行 APK 插件 , 此时就会有两个进程 , 宿主进程 和 插件进程 , 两个进程 PID 不同 , 但是 UID 相同 ; 如果出现该特征 , 就可以确定该应用运行在插件化引擎中 ;



3、检查生成的目录


检查生成的文件 : 应用安装后 , 会在 /data/data/ 目录下生成对应包名的目录 , 检查该目录是否存在 ;



4、检查组件


在 AndroidManifest.xml 定义一个静态广播 , 静态广播是在应用安装时进行注册的 , 插件应用没有安装 , 因此想静态广播发送数据 , 肯定无法接收到 ;


运行时修改组件的 enable 属性 , DroidPlugin 无法在运行时实例化 enable = false 的组件 , 在组件注册时设置 false , 然后运行时修改成 true ;




参考博客 : 反插件化:你的应用不是一个插件

参考文献 : ANTI-PLUGIN: DON’T LET YOUR APP PLAY AS AN ANDROID PLUGIN


目录
相关文章
|
1月前
|
算法 数据处理 Android开发
掌握安卓性能优化的秘诀:电池寿命与运行效率的提升
【10月更文挑战第6天】 本文深入探讨了安卓应用开发中的性能优化技巧,重点分析了影响电池寿命和运行效率的关键因素,并提供了针对性的优化策略。通过代码优化、资源管理、后台任务处理等方法,开发者可以显著提升应用的续航能力和流畅度。同时,结合具体案例,展示了如何在实际开发中应用这些技巧,确保应用在各种场景下都能保持高效运行。本文旨在为安卓开发者提供实用的性能优化指导,助力其打造更优质的应用体验。
50 2
|
1月前
|
Android开发 Swift iOS开发
iOS和安卓作为主流操作系统,开发者需了解两者差异以提高效率并确保优质用户体验。
【10月更文挑战第1天】随着移动互联网的发展,智能手机成为生活必需品,iOS和安卓作为主流操作系统,各有庞大的用户群。开发者需了解两者差异以提高效率并确保优质用户体验。iOS使用Swift或Objective-C开发,强调简洁直观的设计;安卓则采用Java或Kotlin,注重层次与动画。Swift和Kotlin均有现代编程特性。此外,iOS设备更易优化,而安卓需考虑更多兼容性问题。iOS应用仅能通过App Store发布,审核严格;安卓除Google Play外还可通过第三方市场发布,审核较宽松。开发者应根据需求选择合适平台,提供最佳应用体验。
62 3
|
3月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
92 0
|
1月前
|
IDE Android开发 iOS开发
探索安卓与iOS系统的技术差异:开发者的视角
本文深入分析了安卓(Android)与苹果iOS两大移动操作系统在技术架构、开发环境、用户体验和市场策略方面的主要差异。通过对比这两种系统的不同特点,旨在为移动应用开发者提供有价值的见解,帮助他们在不同平台上做出更明智的开发决策。
|
1月前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
274 2
|
29天前
|
Android开发
我是一位Android工程师,用通义灵码的AS插件做开发工作助手,对比之前没有灵码,现在提效了60%
我是一位Android工程师,用通义灵码的AS插件做开发工作助手,对比之前没有灵码,现在提效了60%
41 0
|
2月前
|
前端开发 Java 数据库
💡Android开发者必看!掌握这5大框架,轻松打造爆款应用不是梦!🏆
在Android开发领域,框架犹如指路明灯,助力开发者加速应用开发并提升品质。本文将介绍五大必备框架:Retrofit简化网络请求,Room优化数据库访问,MVVM架构提高代码可维护性,Dagger 2管理依赖注入,Jetpack Compose革新UI开发。掌握这些框架,助你在竞争激烈的市场中脱颖而出,打造爆款应用。
373 3
|
2月前
|
IDE Java Android开发
安卓与iOS开发环境的差异及其对开发者的影响
在数字时代的浪潮中,移动应用成为人们生活的延伸。两大操作系统——安卓与iOS,如同两座技术高峰,各自占据着半壁江山。本文将探索这两个平台的开发环境差异,并讨论这些差异如何塑造开发者的编程习惯与职业选择。我们将从工具和语言、用户界面设计、系统架构、市场定位以及开发社区和资源五个方面进行比较,旨在为开发者提供一份实用的指南,帮助他们在不断变化的技术世界中,找到适合自己的发展路径。
55 3
|
2月前
|
移动开发 开发工具 Android开发
安卓与iOS开发:平台差异及其对开发者的影响
在移动开发的大潮中,安卓和iOS两大阵营各领风骚。本文将探讨这两个平台的关键差异,包括开发环境、编程语言、用户界面设计、应用分发以及商业模式等方面。通过比较分析,我们旨在为开发者提供一个清晰的指导,帮助他们根据项目需求和个人偏好做出明智的平台选择。同时,文章也将分享一些跨平台开发工具的使用经验,以期最大化开发效率和市场覆盖。
70 1
|
3月前
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
169 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
下一篇
无影云桌面