浅谈 Xposed 新概念 [模块作用域]

2020-02-20 14:26:43 +08:00
 mlgmxyysd

众所周知,Xposed 是一个系统级别的软件框架,它与 Cydia Substrate 不同,Xposed 仅可 hook app_process 中的 java 函数,不过对于大部分的 Android 应用来说已经足够了;

它所提供的 API 可以供模块开发者在不修改目标应用字节码的前提下修改目标应用的行为,甚至是将自定义的代码注入进目标应用中,由目标应用代为执行。

Xposed 模块开发起来也非常简单,简单来说,获取目标应用的源码或者反编译出伪代码,找到目标方法,将相关逻辑写入模块,编译,完成。

于是,一种新的安全风险也随之出现了

某“步数模块”对 [桃饱] 应用插入淘口令

某“后台管理模块”做了一堆根本不应该它去做的功能

......

更有甚者利用 [巨信] 的公众号功能,为自己的帖子刷流量

而当你想要禁止掉这种滥用行为的时候,你会发现,也许它根本就没有申请正常情况下做这些事情需要的权限,更别谈禁止了

这是因为它将代码注入到了 [巨信] 应用中,所有的工作都是由 [巨信] 来完成的,如果你使用抓包软件来抓取流量包的话,你会发现所有的相关流量都是由 [巨信] 发送和接收的

应该庆幸的是,目前所抓到类似行为的模块都是使用 java (或 kotlin 等 jvm 语言)层来编写的,反编译还算比较容易

可是如果模块使用 native ( C/C++)层编写(据我所知已经有一些模块使用 native 层来编写),或者使用了一堆非常恶心人的加固 /混淆呢?

要求所有模块必须开源一定是不可能的事情,第一这会大大打击模块开发者的积极性,第二即使开源也不能确保一定是安全的

(更何况某个自诩“安全”的 Xposed 框架商业化分支也还是闭源的,何谈模块开源?)

我相信 Xposed 的作者 rovo89 (等一下,Xposed 停更的最后一个版本号是 89,我好像发现了什么 zzz )一定也注意到了这个问题,只是因为某些原因最终弃坑掉了整个 Xposed 项目

于是,我们提出了一个新的概念

我将它称为

[模块作用域] (Modules Activation Scope)

简单来说,用户可以自主选择某个模块只对某些应用生效(或某个应用只激活某些模块,这个根据不同 Xposed 框架分支开发者的喜好自由安排)

这样虽说不可能完全解决 Xposed 模块滥用行为的安全问题,至少可以防止 Xposed 模块跨域对非目标应用进行 hook 操作

当前(截至发稿)已经有多种 Xposed 框架分支的开发者响应了这一概念

EdXposed 此功能正在开发中

应用转生 已发布

还有其他分支未收集

用户需要做的就是等待当前使用的分支更新这一功能

同时,我修改了开源分支 XPatch 的代码以支持这一功能,高级用户可以尝试使用一下

演示视频: https://www.bilibili.com/video/av80958793

源代码(已修改): https://github.com/MlgmXyysd/xposed_module_loader

不需要

为 Xposed 框架分支添加新功能一定应该是建立在兼容原版 API 的基础上的(当然某个 Xposed 分支妄图分裂 Xposed 生态从而创建自己由 Xposed API 魔改而来的 TxxCxx API 我是不敢恭维,也不想在这里过多提及)

模块开发者唯一需要做的就是告知用户你的模块 hook 了哪个应用的包名,供用户来参考

为单独的应用存储模块列表(推荐使用目标应用包名作为标识符),并设立全局列表(无法读取当前应用的列表时可读取全局列表)

具体代码自行实现

在上文中我提到了兼容性

除此之外,要求模块适配自己的 API 同样是一种不可能的行为

一味的要求开发者适配自己的 API 会导致对其他 Xposed 框架分支的兼容性下降,或者同时兼容多个分支的难度上升 同时,保留原版 Xposed API 也是对 Xposed 原开发者 rovo89 的一种尊重

换一种问法,框架完全可以做到的事情为什么非要模块开发者来做呢?


这一概念经过测试完全是可行的(已有经由 XPatch 修改的 demo 测试成功,见上文)

但是,概念也有它本身的一个漏洞,它仅封堵掉了模块对于跨域应用的滥用行为,并没有从根本上杜绝滥用行为的发生(如,针对正常的目标应用的滥用行为),用户在选择模块时仍需谨慎


我是 MlgmXyysd,希望更多 Xposed 框架分支可以响应这一概念,同时也希望更多的开发者可以开发出自己的 Xposed 框架开源分支


附件:

目前已知的几种 Xposed 实现方案的「作者是个人还是公司、是否开源、是否商业化」的总结

鉴于阻止运行的前车之鉴「 2.3.2 之后(不含 2.3.2 )的阻止运行你敢用嘛?」( From @LetITFlyW

如果你没为服务付钱,那可能你就是产品。免费商业化比收费商业化更可怕。建议各位有使用 Xposed 的需求的朋友在条件适宜的情况下拥抱开源或者虽闭源但非商业化的实现方案。另:在任何情况下均不建议关注「某个 Xposed 实现方案的作者」的「推送过多次广告文章」的微信公众号。

21340 次点击
所在节点    Android
126 条回复
huijige
2020-02-20 22:57:01 +08:00
@mlgmxyysd 安啦,安啦,没必要吵起来都和气点嘛
huijige
2020-02-20 23:06:42 +08:00
@weishu 我记得你爆出应用控制器那件事之后第二天出现了一些抨击搞机圈的文章来着,还有一堆啥都不懂的人在那瞎说
Johnny168
2020-02-20 23:09:34 +08:00
xposed 还是 EDx,貌似是同一个吧
mlgmxyysd
2020-02-20 23:12:44 +08:00
@jdgui 太极 和 应用转生 在文章发布后都更新了这一功能
mlgmxyysd
2020-02-20 23:13:17 +08:00
@Johnny168 不是,Xposed 在 Android Pie 之后就停更了,EdXposed 是 Xposed 的正统接任者
mlgmxyysd
2020-02-20 23:22:17 +08:00
@Buges 有可能,但是短期内应该是不会的,目前 Frida 的使用方式还较为繁琐,用来供开发者调试还行,不适合普通用户使用,除非有人能封装成类似 Xposed 这样的简易使用框架
unfly
2020-02-20 23:48:42 +08:00
不管是啥,能让手机用起来更舒服,都是好事啊
locoz
2020-02-21 00:39:55 +08:00
这个功能好啊,能稍微提升一些使用他人开发的闭源模块时的安全性。不过对更深层的恶意操作还是没啥办法,可能还是得对不信任的模块进行断网和禁止文件读写处理,虽然效果也不会好到哪去...
weishu
2020-02-21 00:42:04 +08:00
@mlgmxyysd 太极在上周六已经发布了,请问你的文章是什么时候发的,说这话要脸不?
yu1222
2020-02-21 00:46:15 +08:00
@mlgmxyysd 正统接任者是 xp 作者封的吗
weishu
2020-02-21 00:52:35 +08:00
太极的这个功能,源于去年年底一位热心用户的建议;我只不过是把他的 idea 给实现了罢了。你推广 EdXp 我很赞同,但是请你也不要把用户、把旁人当傻子忽悠。
weishu
2020-02-21 00:57:49 +08:00
在我实现了用户建议的这个功能之后,你赶紧发文章大肆宣扬,宣称是自己首创;更颠倒是非,说太极在你发文之后加了这个功能,你真当别人都是瞎子不成?
mlgmxyysd
2020-02-21 08:03:34 +08:00
@weishu 你要点脸不? github 更新记录 19Dec28 看不懂?
chenyue
2020-02-21 08:11:51 +08:00
限制模块,需要申请,就因为这个很不喜欢太极。
jy02201949
2020-02-21 08:41:33 +08:00
前排小凳子瓜子咯
WebKit
2020-02-21 08:55:44 +08:00
太极确实是这样的,不开源有点不敢用。不过对于没有 root 的用户,太极还是有点用的
WanzizZ
2020-02-21 09:28:48 +08:00
关键是用这些,微信容易被封号 - - 哈哈
leafleave
2020-02-21 09:31:56 +08:00
@weishu 求个无极邀请码啊,我邮箱 taiji#xxoo365.cn 问你公众号邮箱都没回复
mlgmxyysd
2020-02-21 09:38:08 +08:00
@yu1222 xp 在 xda 的开发团队
weishu
2020-02-21 10:32:46 +08:00
我怎么觉得这时间有点不对呢 https://imgchr.com/i/3nQYmn

2019/9/14 建站,gitment 2019/9/18 第一篇文章出现;刚好就在 14 个小时前,连续出现了三篇文章,但是这个文章的时间是 2019 年,你说巧不巧?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/646108

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX