前言

在目前Android大环境下,虚拟化技术曾经很遍及。对于虚拟化的运行原理,网上文章曾经有一大堆。本篇文章就从实测角度来比照一下各家虚拟化产品技术的差别。

本文波及到Android的相干知识点,我尽量用本人了解的大白话去讲,如有不对请前辈们不吝赐教。

一些术语

简称全称解释
宿主宿主原利用,即利用自身
子利用子利用被运行的利用
PMSPackageManagerServiceAndroid中的安装包治理服务
AMSActivityManagerServiceAndroid中的利用流动的治理服务
NMSNotificationManagerServiceAndroid中的利用告诉治理服务

虚拟化是如何运作?

对于这个问题网上曾经有N + 1的相似文章,这里有几个能够看一下

  • https://juejin.cn/post/696467...
  • https://blog.csdn.net/ganyao9...
  • https://juejin.cn/post/702812...

通过原理剖析,咱们能够看出,实现虚拟化一个利用,要做的外围事件只有一件:在运行子利用时,坑骗零碎让零碎误以为正在运行的是宿主,否则零碎会毫不犹豫的将你杀死!!

测试的切入点

首先此文章技术细节求教了这方面的大佬,再依据我本人对这方面的钻研。现针对以下几个虚拟化“重灾区”进行测验一下,为什么会这样说呢,因为依据虚拟化的技术原理或多或少不可避免的须要对环境进行批改,这里就挑一些比拟典型的点来比照各个框架之间对这些细节的解决。

参加比照的产品有(如有补充能够底下留言,我持续欠缺)

名称官网
VirtualApphttps://github.com/asLody/Vir...
LBE平行空间http://parallelspace-app.com/...
SpaceCorehttps://spacecore.dev/
360分身巨匠http://fenshen.360.cn
双开助手https://www.multiopen.cn/

别离比照一下以下的点:

办法正常值
Context#mBasePackageName本身包名
Context#mOpPackageName本身包名
ActivityThread.H#mCallbacknull
ActivityThread#mInstrumentationandroid.app.Instrumentation
PMS检测android.os.BinderProxy@xxxx

测试所用的Demo是轻易写的,目标就是读一下外面的对象其实很简略。
子利用包名:com.virtualchecker

检测

读取利用:Context#mBasePackageName中的值

产品期望值理论值
Android零碎com.virtualcheckercom.virtualchecker
VirtualAppcom.virtualchecker❌ io.busniess.va
LBEcom.virtualchecker❌ com.lbe.parallel.intl.arm64
SpaceCorecom.virtualchecker✅ com.virtualchecker
360分身巨匠com.virtualchecker✅ com.virtualchecker
双开助手com.virtualchecker❌ com.exceliance.dualaid

读取利用:Context#mOpPackageName中的值

产品期望值理论值
Android零碎com.virtualcheckercom.virtualchecker
VirtualAppcom.virtualchecker❌ io.busniess.va
LBEcom.virtualchecker❌ com.lbe.parallel.intl.arm64
SpaceCorecom.virtualchecker✅ com.virtualchecker
360分身巨匠com.virtualchecker✅ com.virtualchecker
双开助手com.virtualchecker❌ com.exceliance.dualaid

读取利用:ActivityThread#mInstrumentation

产品期望值理论值
Android零碎android.app.Instrumentation@android.app.Instrumentation@bfcc1e8
VirtualAppandroid.app.Instrumentation@❌ com.lody.virtual.client.h.a.c@fd146bf
LBEandroid.app.Instrumentation@❌ com.doubleagent.client.e@a0aac44
SpaceCoreandroid.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零碎nullnull
VirtualAppnull❌ com.lody.virtual.client.h.d.d.b@800e4de
LBEnull❌ com.lbe.doubleagent.client.LocalActivityService$ActivityThreadCallback@3f40957
SpaceCorenull❌ 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
VirtualAppandroid.os.BinderProxy@❌ com.lody.virtual.client.h.a.c@993b1e1
LBEandroid.os.BinderProxy@❌ com.lbe.doubleagent.client.hook.BinderProxy@f54e1fe
SpaceCoreandroid.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

测试后果

产品mBasePackageNamemOpPackageNamemInstrumentationPMSH#mCallback
VirtualApp
LBE
SpaceCore
360分身巨匠
双开助手

以上测试仅仅是拿出一些关键点进行检测,展现各个框架的实测状况,惟一一点全副不通过的是ActivityThread.H#mCallback,其实这个中央并不是虚拟化才会用,很多Android上的黑科技都会用到,能够防止然而没必要为了这个就义掉兼容性。

论断

各个框架也浅浅的剖析过一遍,其实大部分框架都有比拟多的技术重合点,通过上方的测试能够看出,SpaceCore对利用的入侵是比拟激进的,侧面反映了外部的解决逻辑更优,但具体实现细节未知。欢送各位前辈斧正,欢送各位交换。

本文关键词:Android虚拟化, 多开框架, 虚构引擎, VirtualApp, LBE, SpaceCore, 360分身巨匠, 双开助手, 360 DroidPlugin, VMOS, Android沙箱, 插件化