文章目录
一、自定义路径加载插件
二、系统路径加载插件
三、用户同意后加载插件
四、隐藏恶意插件
一、自定义路径加载插件
插件化应用中 , 宿主应用 加载 插件 APK , 需要获取该插件 APK 文件路径 , 可以在 Assets 资源目录 , 也可以在 Android 内置存储 或 SD 卡存储控件中 ;
恶意插件 , 解密或从网络上下载后 , 也需要存放在一个文件目录中 ;
常见的自定义路径如下 :
分析上述 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