无需 Root 也能使用 Xposed!

Xposed是Android系统上久负盛名的一个框架,它给了普通用户任意 DIY 系统的能力;比如典型的微信防撤回、自动抢红包、修改主题字体,以及模拟位置等等等等。不过,使用Xposed的前提条件之一就是需要Root。随着Android系统的演进,这一条件达成越来越难了;那么,能不能不用Root就可以享用Xposed的功能呢?

我们想一下,Xposed为什么需要Root?从现在的实现来看,因为Xposed需要修改系统文件,而这些文件只有root权限才能修改;但是这只是当前实现的特性(修改系统分区文件),而非根本原因。Xposed要实现的最终目的是在任意App进程启动之前能任意加载特定Xposed模块的代码;这些特定的Xposed模块中能在App进程启动之前有机会执行特定代码,从而控制任意进程的行为。归根结底,Xposed需要控制别的进程,而没有高级权限(Root),越俎代庖是不行的。

有没有别的实现方式?

虽然没有办法控制别的进程,但是在本进程内,几乎是可以为所欲为的;如果换个方式,把别的App放在自己的进程里面运行,然后Hook自己不就打到目的了嘛?「把别的App放在自己的进程里面运行」这种机制是容器,或者通俗点叫双开;「Hook自己」这是典型的Dexposed的思路,不过Dexposed不支持ART——但前不久 epic 的出现完成了这最后一块拼图。(关于epic在ART上实现AOP Hook可以参考 我为Dexposed续一秒——论ART上运行时 Method AOP实现(http://weishu.me/2017/11/23/dexposed-on-art/)

双开的典型实现是lody的 VirtualApp(https://github.com/asLody/VirtualApp),那么我们来一看 VirtualApp 与 epic 结合会产生什么样奇妙的化学反应。

我们的思路很清晰:用 VirtualApp 去启动别的App,在启动过程中通过 epic Hook本进程,从而控制被启动的App。同时,由于Xposed模块已经比较成熟,而且有成千上万的插件生态,最好能够直接复用Xposed 的模块,使得在双开环境下,Xposed模块就跟运行在Root手机中的Xposed环境中一样。为此,我写了一个 双开环境下的Xposed兼容层:Exposed(https://github.com/android-hacker/exposed);同时,修改了 VirtualApp 的部分实现,使得它能够在进程的启动的时候加载 Exposed 这个兼容层,代码在这:VAExposed(https://github.com/android-hacker/VAExposed)。这样,在双开环境中,可以直接加载已有的Xposed模块进而实现非Root模式下的Xposed的功能。更有趣的是,你还可以直接使用 XposedInstaller 安装和管理任意的Xposed模块,就跟你使用真正的Xposed一样!

具体的代码就不详细讲了,可以直接去看源码Exposed,VAExposed 我们以微信防撤回为例,看看具体的效果:

首先安装VAExposed这个修改版的双开APK,你可以clone源码直接build,也可以使用我编译好的版本 Github下载(https://raw.githubusercontent.com/android-hacker/VAExposed/master/VirtualApp/VAExposed_0.1.5.apk),百度网盘:https://pan.baidu.com/s/1qXB9qtY 密码: i45e

然后安装微信防撤回模块:微信巫师,发布的主页在这:WeChat Magician(http://xposed.appkg.com/2558.html);直接下载链接:http://dl-xda.xposed.info/modules/com.gh0u1l5.wechatmagicianv301387ce.apk

接下来需要确保你手机上的微信是微信巫师所支持的,目前支持微信的版本为 6.5.8~6.5.16;如果不是的话需要去下载一个支持的版本,比如 微信_6.5.8.apk。

最后,你需要打开VAExposed这个双开软件,添加微信和微信巫师为双开模块,如下图:

这样,使用双开中的微信,就能享受Xposed模块的防撤回功能了!

另外,你还可以直接在双开中使用 XposedInstaller,然后就可以方便滴下载和管理Xposed模块了:

就这样,我们在非Root手机下,就能享用Xposed模块的功能,Have Fun :)

不过,在实现完这个功能之后,我不寒而栗:千万不要在Root环境或者双开环境下运行关键App,不然你的微信登录密码,支付宝支付密码,银行卡账号,很有可能被尽收眼底。

PS:目前 Exposed 层的实现处于初级阶段,个人精力非常有限(一般都是凌晨写代码);如果你对 实现非Root模式下的Xposed 感兴趣,非常欢迎跟我一起组队 :)

项目地址在这:https://github.com/android-hacker/exposed。

觉得本文对你有帮助?请分享给更多人。

关注「程序员宝库」公众号,直接获取各种编程资料!

本文来自企鹅号 - 程序员宝库媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

WiX和DTF介绍

Windows Installer XML(WiX) 这里所介绍的是Wix 3.0版本,目前还是beta. Wix 是 Windows Installer XM...

20680
来自专栏张善友的专栏

CentOS 7.2下安装Mono 5.0

微软Build2017大会期间.NET领域的.NET core之外,就是Visual Studio For Mac,大家都知道Visual Studio For...

22950
来自专栏程序员与猫

.NET Core全面扫盲贴

标签: .NETCore Asp.NETCore 1. 前言 .NET发行至今已经过了十四个年头。随着版本的不断迭代更新,.NET在Windows平台上的表现也...

36870
来自专栏张善友的专栏

CentOS 7.2下安装Mono 5.0

Mono 5.0是一个非常重要的里程碑版本,支持Windows 64位部署,还有支持PowerPC等,Mono 5.0 和微软的.NET 的可操作性,兼容性也得...

75800
来自专栏张善友的专栏

ASP.NET Identity V2

Microsoft.AspNet.Identity是微软在MVC 5.0中新引入的一种membership框架,和之前ASP.NET传统的membership以...

25480
来自专栏葡萄城控件技术团队

你应该知道的15个Silverlight诀窍

我热爱Silverlight,并且身体力行写了很多Silverlight程序,也讨论了很多关于Silverlight的技术。对于刚刚接触Silverlight的...

21060
来自专栏张善友的专栏

为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 webservice/API

25690
来自专栏施炯的IoT开发专栏

Windows Phone 8 API一览

    Windows Phone 7平台不支持Native语言的开发,这困扰了许多游戏和底层应用的开发者。Windows Phone 8 SDK的推出,改善了...

17980
来自专栏walterlv - 吕毅的博客

新 csproj 对 WPF/UWP 支持不太好?有第三方 SDK 可以用!MSBuild.Sdk.Extras

发布于 2018-05-22 07:07 更新于 2018-07...

38120
来自专栏程序员与猫

.NET Core全面扫盲贴

14310

扫码关注云+社区

领取腾讯云代金券