浅谈 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 实现方案的作者」的「推送过多次广告文章」的微信公众号。

32425 次点击
所在节点    Android
126 条回复
canyie
2020-02-22 10:36:47 +08:00
好了你们不要争了,我是梦境作者,我早就有这个想法了,所以我才是第一个想到的(手动滑稽)
你们的争论点似乎是“谁先想到的这个 idea”个人,个人认为争这个完全没有意义,出发点都是为了让 xposed 更安全,何必去争呢?
kenvix
2020-02-22 11:38:15 +08:00
不太清楚这个争端全过程,就我目前看到的,发表一下个人的观点

太极作为一个拥有系统最高权限的 App,却不开放源代码且背靠商业公司显然是有比较大的潜在风险的,作者没有显著地告知用户这一点确实不太合适。楼主挑明了这一点并明确告知大家可能存在的风险,虽然有些偏激,甚至有点给 Edxposed 打广告的意思,但也没有什么值得指责的。我本人直到看到这个帖子前都以为太极是个普通开发者的个人作品。

但太极直到目前也没有做出任何出格的事情,也没有显著的证据能够表明太极有后门,虽然原作者确实有够暴躁,直接根据用户协议就说太极十分危险是不是有点过分了?

另外争“模块作用域”这个 idea 是谁的首创有意思吗?
learningman
2020-02-22 12:13:36 +08:00
我站 weishu,另外一位有一股家里有矿的圣贤气,穷人接受不能
love4taylor
2020-02-22 12:18:05 +08:00
其他你们慢慢撕,不过这种权限极高能干一切的东西还闭源那真的是没法用(虽然我已经很多年不用 xposed 类工具了。
ArianX
2020-02-22 12:46:57 +08:00
高一大佬,太强了吧
BBCCBB
2020-02-22 12:49:39 +08:00
老哥,这个安装步骤有点麻烦.
lijialong1313
2020-02-22 15:34:36 +08:00
@locoz 我个人觉得,仅仅是我个人觉得。 我们可以提高使用这个软件的门槛,但是降低它的限制。比如说,需要自行设置证书才可以使用。如何生成一个合法的证书也列出来。但是呢,生成这个一般都是基础开发者了。或者说,对应用进行限制,比如限制必须手动输入应用包名才可以进行打包。我个人是觉得这样一刀切都要“审查”的行为真的不好。当然了,我觉得更关键的是作为开源社区应该 Ed 和太极可以互相兼容,减少城墙。
gz911122
2020-02-22 15:44:53 +08:00
weishu 有点满地打滚
locoz
2020-02-22 16:40:35 +08:00
@lijialong1313 #107 emmm 自行设置证书和手动输入包名其实还是会有同样的安全问题。虽然说可以通过把证书加密存放之类的方式简单粗暴地提升这方面的安全性,但是毕竟操作变复杂了,而且有忘记密码的风险。从太极面对的用户群体来看,我觉得加这些会导致流程变复杂的操作不太合适,而且维术应该也考虑过这些。(不排除他是一开始就冲着把用户群体做大,然后通过引流到公众号赚广告费)

就现在这个情况来看,有明确区分其实挺好的,不懂技术、懒得折腾、手机折腾不了的人用太极(请自动忽略太极·阳),懂技术、愿意用折腾换来更好的体验和安全性的人用 EdXposed,两者不冲突。
huaxianyan
2020-02-22 17:17:31 +08:00
@Love4Taylor 赞同你的观点
mlgmxyysd
2020-02-22 18:09:21 +08:00
@lijialong1313 提高使用门槛是没有必要的
topjohnwu 说过:想一想,我們現在不是要 root 嗎,限制人家做什麼好像有點反其道而行了

关于审查呢,我觉得,审查应该是在“下载”这一步来进行的,比如模块商店之类的,而不是在使用上来进行审查
其次审查应该是去做实事,而不是“随便过”(管理组的某个人和我说的)

“开源社区”。。。很显然太极并不在里面(因为他是闭源的,至于闭源的真正目的不清楚),兼容的话 EdXposed 是一直就可以兼容其他框架,反倒是太极那边不允许和其他框架共存
mlgmxyysd
2020-02-22 18:10:34 +08:00
@canyie 并没有在争“谁先想到的这个 idea”,是被一个打着管理组旗号的“开发者”给故意带了节奏(也是他提起的 weishu 究竟有没有抄袭我的创意)
mlgmxyysd
2020-02-22 18:20:55 +08:00
@locoz 我个人觉得,重打包的这种操作违背了 Xposed 的初衷(见 19 楼)
locoz
2020-02-22 18:45:38 +08:00
@mlgmxyysd #113 😂初不初衷的其实已经不太重要了,毕竟连三观这种东西都是会随着时间的推移而变化的,对于使用者来说能用、效果好就好了。
marcomarco
2020-02-22 22:12:36 +08:00
莫吵莫吵,你们都是大神,我们景仰膜拜的大神
weishu
2020-02-22 23:10:39 +08:00
@tearain

说我收集隐私就要拿出我收集的证据来,而不是说我的协议里面写了存在这种可能。因为协议写了这些而说我收集隐私,这是滑坡谬误。我后面说的那些情况,是为了解释我协议为什么要这么写,而不是证明我没有收集隐私。我没有收集隐私,所以也不存在承认错误。

公众号那个观点?那些都是观点,我没有证明。

有些我没提的,自己验证就可以证明是伪证;其他的如果你关心,我可以回复。

另外,你不能因为我论证的方法不对,而说明我的观点是错误的。
lijialong1313
2020-02-23 12:53:00 +08:00
@mlgmxyysd 现在来说的话好像在无法 root 的时候只有一个选择,比如像我的手机是华为还是专版……太极又不支持我的插件,我现在都直接用 vxp 了……说实话如果 ed 能出免解锁方案多好^-^
lijialong1313
2020-02-23 12:54:55 +08:00
@locoz 唉……最惨的是像我这样的,我想自己使用自己的模块,但是不支持 root。我是真滴没办法 QAQ
mlgmxyysd
2020-02-23 14:26:04 +08:00
@lijialong1313 用 XPatch 咯,现在测试版也支持安卓 10 了( xpatch 群里有 apk )
locoz
2020-02-23 16:12:33 +08:00
@lijialong1313 #118
@lijialong1313 #118
emmmm 不是挺多其他的选择的嘛,你看主帖里的那张图

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

https://ex.noerr.eu.org/t/646108

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

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

© 2021 V2EX