admin管理员组

文章数量:1537955

2024年5月24日发(作者:)

Android 应用多开对抗实践

白天午睡梦到些以前给某行业安全峰会写了材料,醒来后把记得的部分重新整理一下,分享出来给大

家,尽量写得简洁明了。

未必准确,仅供参考,欢迎纠正补充

Android 应用多开对抗实践

应用多开技术总结

系统级技术

用户级技术

拆招

反系统级应用多开

简单粗暴的代码

验证

可改进

反用户级应用多开

仍然是简单粗暴的代码

验证

威力加强版

对用户级应用多开的理解

业务前端白名单

后记

应用多开技术总结

系统级技术

多开技术方案

Android 多用户

功能

chroot

/

lxc

发行版 APP

OEM系统自带的"手机分身"、"应用双开",和 "Island/炼妖壶" 等各种

"Android for work" 产品

暂无发现 APP

多用户功能

多用户模式主要用到

UserManager

相关类,切换不同的用户,在不同的用户下运行 App,实现

多开。最直观的例子是 Android 手机上的

多用户

功能,

手机分身

功能,以及

am switch-user

命令,这种简单粗暴的用法会将 Android 服务都运行一份,如果只用于应用多开,且不说资源消

耗,切换用户是在麻烦。

在 Android 5.0 在基于多用户功能 添加了

Android for work

功能,可以在同一个桌面启动器下

使用受限用户启动 APP,不再需要切换界面。同时将权限开发给了非系统应用。

chroot

UNIX 的 chroot 系统调用在 Android 上也能用,需要 root 权限。在本地挂载运行精简版系统镜

像,使用远程桌面软件如 VNC 等访问本地多开的系统。尚未发现发行版 APP,可能在 ARM 服务

器云手机中用到。

用户级技术

多开技术方案

VirtualApp

MultiDroid

DroidPlugin

Excelliance

其它

发行版 APP

VirtualXposed, DualSpace

LBE平行空间, Parallel Space

分身大师

双开助手, MultiAccount

虚拟大师

在用户级的多开技术中,还可以在按设计用途划分出三类

“容器”:VirtualApp、MultiDroid

热更新/插件化:DroidPlugin、Excelliance

虚拟系统:虚拟大师

具体实现原理大家可以翻论坛里的 精品贴,这里不多描述。

值得一提的是,某云手机团队的 "虚拟大师" 产品,实现在用户态运行了一个精简版的 Android 系统镜

像,在系统库中拦截了几乎所有系统调用,使用类似前文提到的

chroot

挂载系统镜像的方法运行,有

兴趣的同学可以看一看。

拆招

反系统级应用多开

仅多用户方案的多开,忽略

chroot

/

lxc

简单粗暴的代码

// --- C++ ---

#include

bool isDualApp(){return 0 != getuid()/100000;}

// --- Java ---

import s;

static boolean isDualApp(){return 0 != () / 100000;}

一行代码完事了?

完事了,真的完事了。

但是为什么?

Android 系统中,如果开启了多用户模式,会存在一个主用户和若干受限用户。

把 MIUI 的 "手机分身" 和 "应用双开" 功能都打开,可以看到有三用户,0、11 和 999,分别对应

主用户、"手机分身" 和 "应用双开"

本文标签: 系统用户应用运行使用