安卓沙箱引擎360DroidPlugin,可广泛应用于应用多开、游戏免安装运行、隐私数据保护等业务场景,为开发者提供一套强大且稳定的“轻量级Android虚拟机”,让安卓移动应用在沙盒内独立运行。同时有效解决沙箱兼容问题,让开发者专注于业务开发

360DroidPlugin
首页
产品白皮书
接口文档


支持最新的安卓13系统,深度适配 全系手机厂商Rom,为开发者提供稳定流畅的沙箱环境

引擎可直接实现多开能力和Hook SDK,无需二次开发,即可满足多场景业务需求

引擎支持应用数据隔离、手机参数更改以及自动点击器等辅助能力,让业务创新快人一步

用户可选择订阅或终身授权等多类套餐,并提供源码集成、SDK嵌入等多种接入方式

引擎源于360千万级产品“分身大师”,可保证快速响应和持续更新,同时支持客户定制化服务

可搭配360完善的移动服务,提供安全加固、广告聚合、杀毒清理等扩展能力,实现服务灵活组合

360DroidPlugin可轻松实现APP双开或者多开,各类移动应用均可多账号同时在线,免去切换困扰

无论是大型游戏,还是轻量级小游戏,均可以免下载免安装,即点即玩。解决下载慢、高网耗、安装包占用内存大等问题

面对复杂多变的Android终端环境360DroidPlugin支持应用隐藏、图标伪装、名称修改和敏感权限管控,全面保护隐私和财产安全
近年来随着智能手机的普及,安卓系统逐步发展为最为广泛使用的手机操作系统。安卓系统为应用的开发提供了十分自由,开放的环境,可以针对性开发出许多功能强大且使用便捷的产品。但由此也带来了诸多隐患,许多应用程序可以通过漏洞在不被用户授权的情况下监控其他程序的运行,导致个人隐私甚至重要文件的泄露。 安卓沙箱引擎是解决上述问题的一个绝佳方案。沙箱引擎数据隔离的特性能够防止手机权限被应用程序恶意获取,同时也可以阻止应用程序读取隐私数据和文件。利用沙箱引擎的特性,还能做到应用分身,应用免安装运行等诸多意想不到的功能。360 公司深耕于沙箱引擎技术,并利用长期成熟的开发经验推出了功能强大的安卓沙箱引擎——360DroidPlugin。
360DroidPlugin是基于 360 核心安卓沙箱引擎技术,支持安卓应用程序在沙箱虚拟引擎内部运行的“轻量级安卓虚拟机”。对于引擎内部运行的应用,360DroidPlugin有着极高的权限。所有应用的运行,安装,卸载,消息处理,文件存储等操作都可以通过360DroidPlugin统一管理。
此产品接入简单且功能强大,适配市面主流厂商操作系统及安卓版本,方便中小微企业利用此技术,对自身业务进行提效和创新。360DroidPlugin广泛应用在“分身多开、游戏盒子、游戏手柄、隐私安全、政企安全、视频美颜“等业务领域,拥有运行稳定、兼容性好、Hook 能力强、扩展功能丰富等优点。
1.可以满足您的“双开/多开”需求
360droidplugin可以让您在同一部手机上安装多个微信/QQ/WhatsApp/Facebook等APP,实现一部手机,多个账号同时登录。
2.可以满足您的“移动安全”需求
360droidplugin提供了一整套内部与外部的隔离机制,包括但不限于(文件隔离/组件隔离/进程通讯隔离),简单的说360droidplugin内部就是一个“完全独立的空间”。 通过360droidplugin可将工作事务与个人事务安全的隔离,互不干扰。稍作定制即可实现应用行为审计、数据加密、数据采集、数据防泄漏、防攻击泄密等移动安全相关的需求。
2.1.应用行为审计
通过360droidplugin提供的HOOK能力可以实现实时监测用户使用行为,将违规信息上传到服务器;并能轻易实现诸如时间围栏(在某个时间段内能否使用应用的某个功能)、地理围栏(在某个区域内能否使用应用的某个功能)、敏感关键字过滤拦截等功能需求。
2.2.数据加密
通过360droidplugin提供的HOOK能力可以实现对应用的全部数据/文件加密,保证数据/文件落地安全。
2.3.数据采集
通过360droidplugin提供的HOOK能力可以实现应用数据的实时无感上传需求,如聊天记录、转账记录等,防止事后删除无法追溯。
2.4.数据防泄漏
通过360droidplugin提供的HOOK能力可以实现应用防复制/粘贴、防截屏/录屏、防分享/转发、水印溯源等需求。
2.5.防攻击泄密
通过360droidplugin提供的应用管控能力可以将APP获取短信/通讯录/通话记录/后台录音/后台拍照/浏览历史/位置信息等隐私相关的行为完全控制在沙盒中,防止木马/恶意APP获取到用户真实的隐私数据,造成泄密等严重后果。
3.可以满足您的“免ROOT HOOK”需求
360droidplugin提供了Ja360droidplugin与Native的Hook能力,通过360droidplugin,您可以轻易实现诸如APP监控管理、移动安全等各种场景需要的功能。
4.可以满足您的“APP静默安装”需求
360droidplugin提供了APP静默安装,静默升级,静默卸载的能力。如应用商店或游戏中心在集成360droidplugin后可以避免需要用户手动点击确认安装的操作,做到下载后立即安装到360droidplugin内,给用户带来“小程序”搬的体验,彻底避免了应用不易被用户安装上的问题。
5.可以满足您的“APP管控”需求
您可以通过360droidplugin清楚的掌握APP访问了哪些系统API,哪些敏感数据,哪些设备信息等。比如APP是否访问了联系人,相册,通话记录,是否访问了用户的地理位置等信息。 当然,您还可以通过360droidplugin控制或者构造自定义的信息给这些APP。不仅于此,您还可以获取到APP的私有数据,比如聊天数据库等。总之通过360droidplugin提供的应用管控能力,您可以轻易控制APP的一切行为,甚至修改APP与服务器交互内容等。
6.可以满足您的“VR程序移植”需求
可以通过360droidplugin的Hook能力拦截VR设备的API,让您无需改动代码即可将VR程序移植到新的设备。
7.可以满足您“几乎一切能想到”的需求
360droidplugin对于内部的App具有完全的监管和控制能力,几乎能满足您的一切需求!
360DroidPlugin支持应用程序在引擎内部运行的功能。360DroidPlugin由三个主要部分组成,分别为APP层,Framework层,Native层。
其中APP 层是由引擎提供的内部空间,在这个空间中统一管理所有由引擎内部运行的应用程序。引擎对内部的应用程序有着最高管理权限,可用于安装和管理需要在其内部运行的应用程序,包括但不仅限于应用列表、应用版本、应用路径、应用签名等。因为APP 层在引擎内部创造了一个内部空间,因此APP 层内运行的应用程序完全和系统是隔离的。
360DroidPlugin中运行的应用程序需要与手机系统产生交互,才能保证应用程序内的各项功能正常使用。然而引擎内部运行的应用程序和系统是隔离的,因此需要提供一个中间结构用于链接内部应用与手机系统。Framework层主要包含一套模拟Android framework的框架,主要给Android Framework 和APP层做代理,处于APP层和Android framework之间,充当App层访问Android framework的桥梁。DP Framework层在内部应用程序以及手机系统间的主要工作内容如下:
1. APP 的“去”:这部分工作主要是内部应用程序对系统发出请求。APP层中的应用程序访问的所有系统的Service首先会被Framework接收。所有接收的请求全部被Framework代理,它会修改应用程序的请求参数,将其中与应用程序相关的参数全部修改成为宿主(引擎产品接入方)的参数。这样系统就能够正确识别这些请求,修改之后的请求之后再发送给Android framework,系统校验无误后会进一步处理上述请求。经过Framework的处理,虽然APP层内运行的应用程序完全和系统是隔离的,但系统仍顺利处理了内部应用程序对系统发出的请求。
2. APP 的“回”:内部应用程序发送请求给系统后,还需要从系统接收处理后的结果。系统校验参数无问题后,会将请求处理的结果返回给Framework。此时返回的结果是针对引擎的, Framework接收到返回的结果后还需要再将修改过的参数还原成APP层发出请求的参数。通过Framework的处理, APP层和Android系统都能够成功识别发出的请求以及返回的结果。这样交互就通过Framework搭建的桥梁跑通了。
Native层主要完成IO重定向和APP层与安卓系统交互的参数修改。IO重定向是通过将APP层的所有IO访问的路径全部修改成引擎内部的存储路径,通过IO HOOK的方式,完成路径的替换。安卓系统的很多系统函数和参数需要通过Native层来做HOOk完成修改,完成系统数据的校验。
基于上述原理,360DroidPlugin可以对应用程序进行全面控制,可以实现多种突破安卓系统限制的能力,并广泛应用在多种场景中。360DroidPlugin目前广泛应用在如下领域:
1. 应用分身/应用多开
2. 应用静默下载/安装
3. 应用统一管理
4. 应用运行环境修改
5. 隐私安全保护
6. 政企安全
由于安卓系统会对安装的应用进行校验,因此相同包名的应用无法在同一个手机中安装多个。360DroidPlugin有对内部运行应用统一管理的能力,因此可以突破这一限制。通过在应用安装过程中调整userid参数,可以快捷简单实现应用的多开能力。目前一些手机厂商在系统中提供了应用分身的能力,360DroidPlugin与之相比有如下优势。 1. 适配能力强:手机厂商只支持微信,QQ等极少部分主流应用的分身。相比之下,360DroidPlugin支持几乎所有安卓应用程序的分身。另外,360DroidPlugin可支持最新的安卓13,兼容各个手机厂商的操作系统。 2. 分身能力强大:手机厂商仅支持应用程序双开,360DroidPlugin 理论上支持无限分身。整个分身流程十分迅速,真正意义上实现点击即用的效果。所有分身的应用程序可以自主选择是否在手机桌面上展示,可实现分身隐藏在产品内部的能力。 3. 分身之间可关联:所有内部运行的应用与系统中应用一样可以相互调用。分身应用可通过分身微信完成登录,淘宝可通过支付宝进行支付等等。整体使用体验与系统应用一致。 4. 相同分身数据隔离:在使用微信,淘宝等应用时,不同分身登录不同账号,分身之间不会相互影响。不同分身数据相互隔离,真正实现多个账号同时在线,避免频繁切换的良好使用体验。
360DroidPlugin 支持应用静默下载安装的功能。通常用户在应用下载完成后,需要经过系统安装过程。很多手机厂商在安装过程中加入了许多限制,引导用户到自己厂商的应用市场下载应用程序。对于未在应用市场上架的应用,厂商会展示“风险提醒”,还有些厂商要求用户输入密码等其他一系列繁琐操作阻止用户进行安装。
360DroidPlugin中的应用程序运行在引擎内部,因此下载到360DroidPlugin内部的应用无需经过系统安装的过程。下载完成后点击即可直接启动,整个应用的下载使用过程十分流畅。在用户需要短时间内安装大量应用程序的场景,此能力显得更为突出,这个功能也被广泛应用于
“游戏盒子”场景,允许用户对大量游戏进行试玩体验,提升了游玩的效率。除了应用的下载,应用的升级同样可以静默完成。此能力保证用户升级到最新的版本,可以对应用新版本的及时部署提供重要帮助,与应用市场中的应用更新体验一致。
360DroidPlugin提供了对应用统一管理的能力。可以实现应用批量安装,启动,停止,升级,卸载等操作。上述操作均可通过一行代码实现,使用简单快捷。支持给应用添加应用锁,确保指定应用加密安全使用。可以自定义修改应用的图标,名称,轻松管理所有内部应用。
360DroidPlugin可将应用程序向系统请求的信息进行拦截,并把修改 后的参数返回给应用程序,以此达到应用运行环境修改的目的。产品支持机型伪装功能,针对特定应用不显示本机的机型,有多种主流手机品牌及型号可以伪装。除此之外,更支持手机唯一识别码,安卓ID,手机序列号,SIM卡号,WIFI连接名称,Mac地址等参数的修改。
360DroidPlugin提供了一个完全独立的内部空间,因此可以实现文件数据,隐私数据的隔离和保护。产品可以对应用程序的运行进行实时监控,并对应用数据的请求及接收消息进行拦截。在应用程序请求读取文件,相册等数据时,引擎可以将请求重定向到内部空间,防止系统中的资料被应用程序读取。当应用程序通过后台读取短信/通讯录/通话记录/后台录音/后台拍照/浏览历史/位置信息等隐私信息时,360DroidPlugin完全可以将此类行为拦截,或返回给应用程序虚拟信息,防止应用程序恶意获取用户真实隐私数据,造成隐私泄露等严重后果。另外,产品还可以防止应用程序复制粘贴内容,防止录屏截屏等等。应用程序运行在内部能够好地进行应用隐藏,结合图标名称修改,运行环境修改等系列能力可以最大程度保护用户隐私安全。
360DroidPlugin的特性能够很好地应用在政企安全场景。通过在产品中预置应用程序,能够保证使用应用程序的安全稳定性。同时,通过引擎能力的管理,限制引擎中应用程序的下载和使用。上述能力保证了引擎独立空间的纯净,从源头上保证内部应用数据和系统隔离。此外,360DroidPlugin还可以实现应用行为审计。通过HOOK能力实时监测用户使用行为,第一时间将违规行为或违规信息上报。HOOK能力还可以实现应用数据的无感知上传,保证使用记录可追溯。前面提到的隐私安全保护能力,也能够保证政企机密信息防泄漏,防攻击,可广泛应用于政府、军队、企业对移动安全合规和审计的需求。
minSdkVersion 16 targetSdkVersion 26
### # keep msdocker begin ### # android -keep class android.** { *; } -keep class com.android.** { *; } -keep class com.dopen.** { *; } -keep class com.morgoo.** { *; } -keep class com.qihoo.msdocker.** { *; } -keep class com.qihoo.plugin.** { *; } -keep class com.qihoo.sdk.** { *; } -keep class msdocker.** { *; } -keep class com.morgoo.droidplugin.hook.handle.PluginInstrumentation** { public *; } -keep class com.morgoo.droidplugin.client.LocalJobManager$* { *; } -keep class com.morgoo.droidplugin.client.LocalPackageInstallService$* { *; } -keep class com.morgoo.droidplugin.service.packageinstaller.DockerPackageInstallService$* { *; } -keep class com.morgoo.helper.MySingvaron { *;} -keep class com.morgoo.helper.Log { public static; } -keep class com.qihoo.droidplugin.**{ *; } -keep public class com.qihoo360.ld.sdk.** {*;} -keep class com.morgoo.helper.Utils{ public *; } -keep @com.qihoo.SdkProtected.DroidPluginEngine.Keep class **{*;} -keep,allowobfuscation @interface com.qihoo.SdkProtected.DroidPluginEngine.Keep ### # keep msdocker end ###
1、配置 maven源 maven { url 'http://maven.geelib.360.cn/nexus/repository/360droidplugin/'} 2、配置 maven依赖(版本号填写最新版本) implementation 'com.qihoo:droidplugin:1.0.0.1005@aar'
1、配置 maven源 maven { url 'http://maven.geelib.360.cn/nexus/repository/360droidplugin/'} 2、配置 maven依赖(版本号填写最新版本) implementation 'com.qihoo:droidplugin:1.0.0.1005@aar'
1、拷贝aar文件至libs文件夹下

2、配置build.gradle文件
在 build.gradle 文件的 dependencies 中配置
implementation(name: 'droidPlugin', ext: 'aar')。

3、在appconf.properties中配置 appkey,secret,exclusive必须将appconf.properties放到assets中的dpsdk下

在appconf.properties中配置参数

注意:
1,appconf.properties必须放在dpsdk目录下,必须是properties文件
2,DEBUG运行项目也需要配置签名信息,必须和申请签名一致
buildTypes { debug { signingConfigs.xxxSign } release { signingConfigs.xxxSign } }
类别 | 方法 |
初始化 | init |
安装 | installPackageFromFile installPackageFromSys |
启动分身 | launchApp launchAppActivity |
卸载分身 | uninstallPackage |
分身是否安装 | isInstalled |
获取分身ApplicationInfo | getApplicationInfo |
获取分身PackageInfo | getPackageInfo |
获取当前包名和userId下正在运行的进程 | getRunningAppProcesses |
获取当前userId下安装的分身 | getInstalledPackages |
清除数据 | clearDataStorage clearCacheStorage |
杀死分身应用 | forceStop |
注册全局Activity生命周期回调 | registerActivityLifecycleCallbacks |
类别 | 方法 |
初始化 | init |
安装 | installPackageFromFile installPackageFromSys |
启动分身 | launchApp launchAppActivity |
卸载分身 | uninstallPackage |
分身是否安装 | isInstalled |
获取分身ApplicationInfo | getApplicationInfo |
获取分身PackageInfo | getPackageInfo |
获取当前包名和userId下正在运行的进程 | getRunningAppProcesses |
获取当前userId下安装的分身 | getInstalledPackages |
清除数据 | clearDataStorage clearCacheStorage |
杀死分身应用 | forceStop |
注册全局Activity生命周期回调 | registerActivityLifecycleCallbacks |
package com.qihoo.droidplugin; public class DPCore { /** * 初始化方法 * @param context 全局context * @throws IllegalArgumentException context为null */ public static void init(Context context) {} /** * 通过文件路径安装分身应用 * @param filePath apk路径 * @param userId 分多个情况下通过userId做区分,和Android中多用户类似 * @param callback 结果回调 * @throws PackageManager.NameNotFoundException filePath文件不存在 */ public static void installPackageFromFile(String filePath, int userId, IPackageCallback callback) {} /** * 安装系统应用列表中的apk * @param packageName 包名 * @param userId 分多个情况下通过userId做区分,和Android中多用户类似 * @param callback 结果回调 * @throws PackageManager.NameNotFoundException packageName未找到 */ public static void installPackageFromSys(String packageName, int userId, IPackageCallback callback) {} /** * 启动分身应用 * @param packageName 包名 * @param userId 分多个情况下通过userId做区分,和Android中多用户类似 * @param callback 启动回调 */ public static void launchApp(String packageName, int userId, IAppCallback callback) {} /** * 启动分身应用内部Activity * @param intent Activity intent * @param userId 分多个情况下通过userId做区分,和Android中多用户类似 */ public static void launchAppActivity(Intent intent, int userId) {} /** * 卸载分身 * @param packageName 包名 * @param userId 分多个情况下通过userId做区分,和Android中多用户类似 * @param callback 结果回调 */ public static void uninstallPackage(String packageName, int userId, IPackageCallback callback) {} /** * 分身是否安装 * @param packageName 包名 * @param userId 分多个情况下通过userId做区分,和Android中多用户类似 * @return 已安装:true,未安装:false */ public static boolean isInstalled(String packageName, int userId) {} /** * 获取分身ApplicationInfo * @param packageName 包名 * @param flags 和系统PackageManager.getApplicationInfo一致 * @param userId 分多个情况下通过userId做区分,和Android中多用户类似 * @return ApplicationInfo */ public static ApplicationInfo getApplicationInfo(String packageName, int flags, int userId) {} /** * 获取分身PackageInfo * @param packageName 包名 * @param flags 和系统PackageManager.PackageInfo一致 * @param userId 分多个情况下通过userId做区分,和Android中多用户类似 * @return PackageInfo */ public static PackageInfo getPackageInfo(String packageName, int flags, int userId) {} /** * 获取当前包名和userId下正在运行的进程 * @param packageName 包名 * @param userId 分多个情况下通过userId做区分,和Android中多用户类似 * @return 返回RunningAppProcessInfo列表 */ public static ListgetRunningAppProcesses(String packageName, int userId) {} /** * 获取当前userId下安装的分身 * @param flags 和系统PackageManager.PackageInfo一致 * @param userId 分多个情况下通过userId做区分,和Android中多用户类似 * @return 返回PackageInfo列表 */ public static List getInstalledPackages(int flags,int userId) {} /** * 清除data数据 * @param packageName 包名 * @param userId 分多个情况下通过userId做区分,和Android中多用户类似 */ public static void clearDataStorage(String packageName, int userId) {} /** * 清除cache数据 * @param packageName 包名 * @param userId 分多个情况下通过userId做区分,和Android中多用户类似 */ public static void clearCacheStorage(String packageName, int userId) {} /** * 杀死分身应用 * @param packageName 包名 * @param userId 分多个情况下通过userId做区分,和Android中多用户类似 * @return */ public static int forceStop(String packageName, int userId) {} /** * 注册全局Activity生命周期回调 * @param callback 回调callback */ public static void registerActivityLifecycleCallbacks(IActivityLifecycleCallback callback) {} }
a. 安装回调 package com.qihoo.droidplugin; public interface IPackageCallback { /** * 开始安装 * @param packageName */ void onStarted(String packageName); /** * 安装进度 * @param packageName * @param progress 1-100 */ void onProgress(String packageName, int progress); /** * 安装完成 * @param packageName * @param status 返回状态值 */ void onFinished(String packageName, int status); } b. 启动回调 package com.qihoo.droidplugin; public interface IAppCallback { /** * 冷启动回调 * @param isCold 是否为冷启动 * @param intent 启动intent * @param pkgName pkg * @param processName Activity目标进程 */ void onAppLaunch(boolean isCold, Intent intent, String pkgName, String processName); /** * Activity onCreate回调 */ void onActivityCreate(); /** * Activity onResume回调 */ void onActivityResume(); /** * 错误回调 * @param status 错误状态值 */ void onError(int status); } c. Activity全局生命周期回调 package com.qihoo.droidplugin; public interface IActivityLifecycleCallback { void onApplicationOnCreate(Application app, int userId); void onActivityOnCreate(Activity activity, int userId); void onActivityOnStart(Activity activity,int userId); void onActivityOnResume(Activity activity,int userId); void onActivityOnPause(Activity activity,int userId); void onActivityOnStop(Activity activity,int userId); void onActivityOnDestroy(Activity activity,int userId); } 4. 状态值 package com.qihoo.droidplugin; public class DPConstant { // 安装成功 public final static int INSTALL_SUCCESS = 0; // 无效的apk public final static int INSTALL_FAILED_INVALID_APK = -1; // 已存在更高版本的apk public final static int INSTALL_EXISTS_HIGHER_VERSION = -2; // 其它 public final static int INSTALL_FAILED_UNKNOWN = -3; // 启动成功 public final static int LAUNCH_ACTIVITY_SUCCESS = 0; // 正在升级中 public final static int LAUNCH_ACTIVITY_PACKAGE_UPGRADING = 1; // 正在安装中 public final static int LAUNCH_ACTIVITY_PACKAGE_INSTALLING = 2; // 启动失败 public final static int LAUNCH_ACTIVITY_FAILED = -1; // ipc失败等原因 public final static int LAUNCH_ACTIVITY_UNKNOWN = -2; // package未找到 public final static int LAUNCH_ACTIVITY_PACKAGE_NOT_FOUND = -3; }