
大家都知道,用 xposed 框架必须要 root,但现在 root 成功率越来越低,大大提高了使用门槛。看似无解的问题,其实可以通过沙箱技术解决。
大家都知道,用 xposed 框架必须要 root,但现在 root 成功率越来越低,大大提高了使用门槛。看似无解的问题,其实可以通过沙箱技术解决。
市面上典型利用沙箱技术的应用是双开类应用,今天介绍的这块应用,不仅稳定支持双能开,更支持运行 xposed 框架+插件,真正做到免 root,甚至不用安装 xposed 框架,就能玩转各种插件了。可谓是广大机友的福音。
下面这篇文章将分为功能介绍和技术原理两部分,由于技术原理比较深奥,对技术感兴趣的同学可以直接跳到文章后半部分观看。欢迎互相讨论!
首先说功能部分。该应用是<分身大师X版>,是基于分身大师提出的升级版本。据我所知也是市面上唯一一款大厂出品的 xposed 双开软件。
【演示视频】
http://v.youku.com/v_show/id_XMzM5MDc3MjU0OA==.html?spm=a2h3j.8428770.3416059.1
【版本功能】
1. 免 root 免刷机,甚至不用安装 xposed 模块,直接在分身大师内部运行 xposed 插件!
2. 首批支持的功能有:自动抢红包,本地修改余额,伪装地理位置,伪装设备信息等;
笔者亲测了几个功能,本地修改余额和自动抢红包都实现了,免去了 root 的烦恼,确实方便太多。
【使用步骤】
安装好的界面如下,
点击 xposed 插件,进入到列表页
注意:xposed插件只针对分身里的应用有效,对手机中的原生应用无效。这点请大家注意!
首次进去会有使用说明,说明 xposed 里的插件模块都是第三方开发者提供的,和分身大师本身没有关系。
点击同意后进入到 xposed 插件列表,选择一个模块比如自动抢红包,点击卡片进入到功能说明页面,点击下载。
在此必须说明一下,部分用户会担心是否会造成微信封号,风险确实是有的!!但是相比市面上其他同类 APP,风险是比较小的,请大家酌情使用。
这个是功能详情页的页面,在这里下载 xposed 插件。
4. 回到列表页,下载好之后点击启用,进入插件功能设置页面。抢红包功能不需要做任何更改直接就能用了。
5. 现在可以自动抢红包了!!亲测效果有效:
其他功能大家自己试试吧。整体看,大部分插件可以用,部分还不支持,估计后续还会继续优化。
好了,下面从技术层面阐述实现原理,阅读时间大概 7 分钟。
免root免刷机,用分身大师玩转Xposed插件
一、 初识Xposed
Xposed 开源代码网址是 https://github.com/rovo89。Xposed 代码工程结构如下图所示,
Xposed 实现基本原理是使用改造后的 app_process 替换 Android 系统中的 app_process(art 虚拟机还会替换 libart.so),这需要 root 权限或者刷机才能实现。不需要 root 或者刷机的情况下,能否实现在 Android 应用程序中运行 Xposed 插件? 下一章节将对此问题进行探讨。
二、 不root不刷机,在分身大师中运行Xposed插件
Xposed 插件大体可以分为两类,一类是修改 Android 系统的,比如重力工具箱;一类是修改 Android 应用的,比如微 X 模块。修改系统,无论从哪个实现路径来讲,都是需要 root 或者刷机的,本文不探讨此类插件。那么剩下的一类修改 Android 应用的插件是否可以在不 root 不刷机的情况下在应用中运行?
Xposed 插件需要运行在宿主应用进程中才能完成相应的功能。不 root 不刷机,支持 Xposed 插件在应用中运行,一个核心问题是如何注入 Xposed 插件代码到宿主应用进程中;另一个核心问题是在宿主应用进程中如何提供 Xposed 插件运行环境。
1. 应用双开
对于如何注入 Xposed 插件代码到宿主应用进程中的问题,从 Android 的进程沙箱隔离机制来看,两个 Android 应用之间,在不拥有 root 权限的情况下,一个 Android 应用是不可能把代码注入到另外一个 Android 应用进程。但是在一个 Android 应用内部或者是一个进程内部是可行的,不存在权限问题。
由此引申出,在一个 Android 应用内,如何运行另外一个 Android 应用(Xposed 插件的宿主进程)?应用双开 是一个很好的解决方案。分身大师是其中很经典的一款应用,核心是利用沙箱技术虚拟化一个 Android 系统。
所谓 Android 虚拟化技术,就是利用 Hook 技术和沙箱机制,在一个 Android 应用中模拟出一个 Android 系统。双开的 App 运行在虚拟化出来的 Android 系统中,与外部的 Android 系统完全隔离。
下图双开类应用的进程模型示意图,所有进程的 UID 是相同的。
解决了 Xposed 插件宿主应用的运行问题后,如何注入 Xposed 插件代码到宿主应用进程并在宿主应用进程中提供 Xposed 插件运行环境?
2. Xposed插件运行环境
首先,需要移植 Xposed 框架。Xposed 框架移植涉及到两部分,一部分是 Xposed 框架 C++部分的移植,具体是 Javahook native 库(libxposed_ dalvik.so 和 libxposed_art.so)的移植;一部分是 Xposed 框架 Java 部分的移植,具体是 XposedBridge.jar 的移植。
双开应用的进程(如微信的进程)是一个进程中双 Application 同时运行,一个 Application 是 Host Application(双开类应用自己的 Application),一个 Application 是双开应用(如微信)的 Application。将上图中的双开应用(如微信)的进程 1 放大细化,如下图所示,
在一个双开应用(如微信)进程中,首先启动的是 Host Application,在双开应用(如微信)的 Application 启动之前,我们可以通过 DexClassloader 将 XposedBridge.jar 代码注入到双开应用(如微信)进程中。将 XposedBridge.jar 代码注入后,调用其入口 main 函数,先准备 Xposed 插件运行环境(主要是 Java hook so 库载入),接着加载 Xposed 插件并调用其入口函数,Xposed 插件便开始启动运行在双开应用进程(如微信)中。
总结:
经过从技术角度的分析,探讨了不 root 不刷机情况下,在 Android 应用中运行 Xposed 插件的技术实现路径,给出了实现路径的理论支持。在市场上,已经出现了支持 Xposed 插件运行的应用「分身大师 xposed 专版」,它是 360 出品的双开类 App,其已实现在双开的应用中运行 Xposed 插件。从该产品来看,不 root 不刷机情况下,支持应用中运行 Xposed 插件完全具有可行性。
最后,Xposed 是一个依赖高超技术实现的工具,它不仅带来了效率的提升,而且还带来了一些意想不到的功能。应用双开是沙箱技术在 Android 系统上大胆探索,勇于创新取得的成果,其有效解决了 Android 应用的多帐户问题。相信二者的结合,定能给用户带来惊喜的功能。