前言
在目前 Android 大环境下,虚拟化技术曾经很遍及。对于虚拟化的运行原理,网上文章曾经有一大堆。本篇文章就从实测角度来比照一下各家虚拟化产品技术的差别。
本文波及到 Android 的相干知识点,我尽量用本人了解的大白话去讲,如有不对请前辈们不吝赐教。
一些术语
简称 | 全称 | 解释 |
---|---|---|
宿主 | 宿主 | 原利用,即利用自身 |
子利用 | 子利用 | 被运行的利用 |
PMS | PackageManagerService | Android 中的安装包治理服务 |
AMS | ActivityManagerService | Android 中的利用流动的治理服务 |
NMS | NotificationManagerService | Android 中的利用告诉治理服务 |
虚拟化是如何运作?
对于这个问题网上曾经有 N + 1 的相似文章,这里有几个能够看一下
- https://juejin.cn/post/696467…
- https://blog.csdn.net/ganyao9…
- https://juejin.cn/post/702812…
通过原理剖析,咱们能够看出,实现虚拟化一个利用,要做的外围事件只有一件: 在运行子利用时,坑骗零碎让零碎误以为正在运行的是宿主 ,否则零碎会毫不犹豫的将你杀死!!
测试的切入点
首先此文章技术细节求教了这方面的大佬,再依据我本人对这方面的钻研。现针对以下几个虚拟化“重灾区”进行测验一下,为什么会这样说呢,因为依据虚拟化的技术原理或多或少不可避免的须要对环境进行批改,这里就挑一些比拟典型的点来比照各个框架之间对这些细节的解决。
参加比照的产品有(如有补充能够底下留言,我持续欠缺)
名称 | 官网 |
---|---|
VirtualApp | https://github.com/asLody/Vir… |
LBE 平行空间 | http://parallelspace-app.com/… |
SpaceCore | https://spacecore.dev/ |
360 分身巨匠 | http://fenshen.360.cn |
双开助手 | https://www.multiopen.cn/ |
别离比照一下以下的点:
办法 | 正常值 |
---|---|
Context#mBasePackageName | 本身包名 |
Context#mOpPackageName | 本身包名 |
ActivityThread.H#mCallback | null |
ActivityThread#mInstrumentation | android.app.Instrumentation |
PMS 检测 | android.os.BinderProxy@xxxx |
测试所用的 Demo 是轻易写的,目标就是读一下外面的对象其实很简略。
子利用包名:com.virtualchecker
检测
读取利用:Context#mBasePackageName 中的值
产品 | 期望值 | 理论值 |
---|---|---|
Android 零碎 | com.virtualchecker | com.virtualchecker |
VirtualApp | com.virtualchecker | ❌ io.busniess.va |
LBE | com.virtualchecker | ❌ com.lbe.parallel.intl.arm64 |
SpaceCore | com.virtualchecker | ✅ com.virtualchecker |
360 分身巨匠 | com.virtualchecker | ✅ com.virtualchecker |
双开助手 | com.virtualchecker | ❌ com.exceliance.dualaid |
读取利用:Context#mOpPackageName 中的值
产品 | 期望值 | 理论值 |
---|---|---|
Android 零碎 | com.virtualchecker | com.virtualchecker |
VirtualApp | com.virtualchecker | ❌ io.busniess.va |
LBE | com.virtualchecker | ❌ com.lbe.parallel.intl.arm64 |
SpaceCore | com.virtualchecker | ✅ com.virtualchecker |
360 分身巨匠 | com.virtualchecker | ✅ com.virtualchecker |
双开助手 | com.virtualchecker | ❌ com.exceliance.dualaid |
读取利用:ActivityThread#mInstrumentation
产品 | 期望值 | 理论值 |
---|---|---|
Android 零碎 | android.app.Instrumentation@ | android.app.Instrumentation@bfcc1e8 |
VirtualApp | android.app.Instrumentation@ | ❌ com.lody.virtual.client.h.a.c@fd146bf |
LBE | android.app.Instrumentation@ | ❌ com.doubleagent.client.e@a0aac44 |
SpaceCore | android.app.Instrumentation@ | ✅ android.app.Instrumentation@153bfc9 |
360 分身巨匠 | android.app.Instrumentation@ | ❌ com.morgoo.droidplugin.hook.handle.PluginInstrumentation@8e8d100 |
双开助手 | android.app.Instrumentation@ | ❌ com.exceliance.kxqp.platform.c.b.e.wy@38e16ce |
读取利用:ActivityThread.H#mCallback
产品 | 期望值 | 理论值 |
---|---|---|
Android 零碎 | null | null |
VirtualApp | null | ❌ com.lody.virtual.client.h.d.d.b@800e4de |
LBE | null | ❌ com.lbe.doubleagent.client.LocalActivityService$ActivityThreadCallback@3f40957 |
SpaceCore | null | ❌ com.fvbox.lib.client.hook.HCallbackHook@aa9ba7e |
360 分身巨匠 | null | ❌ com.morgoo.droidplugin.hook.handle.e@91b7b06 |
双开助手 | null | ❌ com.excelliance.kxqp.platform.c.b.e.wr@153bfc9 |
PMS 检测
产品 | 期望值 | 理论值 |
---|---|---|
Android 零碎 | android.os.BinderProxy@ | android.os.BinderProxy@eff05b8 |
VirtualApp | android.os.BinderProxy@ | ❌ com.lody.virtual.client.h.a.c@993b1e1 |
LBE | android.os.BinderProxy@ | ❌ com.lbe.doubleagent.client.hook.BinderProxy@f54e1fe |
SpaceCore | android.os.BinderProxy@ | ✅ android.os.BinderProxy@c846443 |
360 分身巨匠 | android.os.BinderProxy@ | ❌ com.morgoo.droidplugin.hook.newsolution.BinderHook$BinderWrapper@cf8d1da |
双开助手 | android.os.BinderProxy@ | ✅ android.os.BinderProxy@eff05b8 |
测试后果
产品 | mBasePackageName | mOpPackageName | mInstrumentation | PMS | H#mCallback |
---|---|---|---|---|---|
VirtualApp | ❌ | ❌ | ❌ | ❌ | ❌ |
LBE | ❌ | ❌ | ❌ | ❌ | ❌ |
SpaceCore | ✅ | ✅ | ✅ | ✅ | ❌ |
360 分身巨匠 | ✅ | ✅ | ❌ | ❌ | ❌ |
双开助手 | ❌ | ❌ | ❌ | ✅ | ❌ |
以上测试仅仅是拿出一些关键点进行检测,展现各个框架的实测状况,惟一一点全副不通过的是 ActivityThread.H#mCallback,其实这个中央并不是虚拟化才会用,很多 Android 上的黑科技都会用到,能够防止然而没必要为了这个就义掉兼容性。
论断
各个框架也浅浅的剖析过一遍,其实大部分框架都有比拟多的技术重合点,通过上方的测试能够看出,SpaceCore 对利用的入侵是比拟激进的,侧面反映了外部的解决逻辑更优,但具体实现细节未知。欢送各位前辈斧正,欢送各位交换。
本文关键词:Android 虚拟化, 多开框架, 虚构引擎, VirtualApp, LBE, SpaceCore, 360 分身巨匠, 双开助手, 360 DroidPlugin, VMOS, Android 沙箱, 插件化