【Android 插件化】基于插件化的恶意软件的加载策略分析 ( 自定义路径加载插件 | 系统路径加载插件 | 用户同意后加载插件 | 隐藏恶意插件 )

简介: 【Android 插件化】基于插件化的恶意软件的加载策略分析 ( 自定义路径加载插件 | 系统路径加载插件 | 用户同意后加载插件 | 隐藏恶意插件 )

文章目录

一、自定义路径加载插件

二、系统路径加载插件

三、用户同意后加载插件

四、隐藏恶意插件





一、自定义路径加载插件


插件化应用中 , 宿主应用 加载 插件 APK , 需要获取该插件 APK 文件路径 , 可以在 Assets 资源目录 , 也可以在 Android 内置存储 或 SD 卡存储控件中 ;


恶意插件 , 解密或从网络上下载后 , 也需要存放在一个文件目录中 ;


常见的自定义路径如下 :

image.png



分析上述 API 调用 , 搜索 APK 文件 , 并判断该文件是否是使用 插件化引擎 安装的插件 ;


这里的安装指的是将插件 APK 拷贝到指定的文件目录 ;






二、系统路径加载插件


恶意软件 会 诱导用户加载 系统中安装的 恶意软件 , 宿主应用没有向该系统路径写入数据的权限 ;


加载插件流程 :

首先 , 要请求获取包列表 ( Package List ) , 向用户显示该列表 ;

然后 , 引导用户选择列表中的应用执行 ;

最后 , 宿主应用可以从系统数据空间中选择 APK 文件 , 拷贝到自己的存储空间 , 也就是安装了该插件 ;


调用 PackageManager.getInstalledPackages() 方法 , 可以获取已安装的应用程序 , 可以从调用该方法为起点进行分析 , 继续向后分析 , 查看哪些应用被展示给了用户 , 恶意应用就在这些应用中 ;






三、用户同意后加载插件


基于插件化的 良性应用 , 如果要装载插件 , 需要弹出弹窗 , 请求用户同意 , 用户同意后 , 才能安装插件 ;


恶意应用 安装插件时 , 基本都是静默安装 , 不经过用户同意 , 并且安装后尽可能隐藏插件 ;


这里的安装插件指的是将插件存放在指定的位置 ;


定位插件安装界面 , 如果发现插件安装操作在 Activity 生命周期中进行操作 , 则说明该安装操作肯定是静默安装 , 没有征得用户同意 ;


如果插件安装界面 , 插件安装操作 , 都在 onClick 等 UI 交互方法中 , 说明该安装操作不是静默安装 ;


程序启动的 Activity , 一般都带有 android.intent.category.LAUNCHER 标识 ;






四、隐藏恶意插件


安装 良性应用 后 , 一般会让用户选择是否将应用图标添加到 Launcher 界面 , 如果选择是 , 则可以在主界面看到安装后的应用图标 ;


安装 恶意应用 后 , 恶意应用大多会将自己隐藏 , 并且在后台运行 ;


① 隐藏图标 : 恶意软件不在 Launcher 主界面显示应用图标 , 以及 Activity 界面 , 用户在 UI 界面中看不到该应用的任何信息 ;


修改清单文件 , 去掉


<category android:name=”android.intent.category.LAUNCHER” />


信息 , 就可以隐藏应用图标 ;


如下设置 , 也可以隐藏应用图标 :


getPackageManager().setComponentEnabledSetting(
  getComponentName(), 
  PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
  PackageManager.DONT_KILL_APP
);


② 后台运行 : 恶意软件 作为服务在后台运行 ;


③ 界面透明 : 恶意软件 设置 FLAG_NOT_TOUCH_MODAL 标识 , 可以使主要布局透明 , 并且移除状态栏 , 标题栏 ;


分析 宿主软件 中 , 是否存在上述隐藏插件应用的行为 ;




参考 : VAHunt: Warding Off New Repackaged Android Malware in App-Virtualization’s Clothing


目录
相关文章
|
2天前
|
Android开发
Android构建系统:Android.mk(2)函数详解
Android构建系统:Android.mk(2)函数详解
10 1
|
2天前
|
存储 Java API
Android系统 文件访问权限笔记
Android系统 文件访问权限笔记
26 1
|
2天前
|
移动开发 Java Unix
Android系统 自动加载自定义JAR文件
Android系统 自动加载自定义JAR文件
15 1
|
2天前
|
Shell Android开发 开发者
Android系统 自定义动态修改init.custom.rc
Android系统 自定义动态修改init.custom.rc
17 0
|
2天前
|
测试技术 Android开发 开发者
RK3568 Android系统客制化动态替换ro任意属性
RK3568 Android系统客制化动态替换ro任意属性
11 1
|
2天前
|
存储 Linux Android开发
RK3568 Android/Linux 系统动态更换 U-Boot/Kernel Logo
RK3568 Android/Linux 系统动态更换 U-Boot/Kernel Logo
15 0
|
2天前
|
存储 缓存 安全
Android系统 应用存储路径与权限
Android系统 应用存储路径与权限
5 0
Android系统 应用存储路径与权限
|
2天前
|
存储 开发工具 Android开发
Android系统 权限组管理和兼容性
Android系统 权限组管理和兼容性
10 0
|
2天前
|
存储 安全 Android开发
Android系统 自定义系统和应用权限
Android系统 自定义系统和应用权限
15 0
|
2天前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
13 1