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

32428 次点击
所在节点    Android
126 条回复
FrankHB
2020-02-25 13:02:13 +08:00
@mlgmxyysd 兼容的问题,我理解的现状是没法排除风险(操作不当极端可能变砖,虽然不算直接是框架的原因)。
技术上,这也不是单一框架能决定的东西(验证其它框架的侵入式修改不存在冲突,在计算复杂度上就不切实际)。
因为许可证的 AS-IS/NO WARRANTY 条款,这里的后果是没法有谁兜底的。
所以我至少想还要一个全局的非担保性描述:在不排除多个框架的影响的前提下,框架的开发者如何提示风险来明确界定到底某种共存的用法算不算是受到支持地兼容?
zhz1237ok
2020-09-18 23:26:52 +08:00
2020 年了,回来看两家人的斗争,有股美国制裁华为的感觉,天龙人 mlgmxyysd VS 平民 weishu

Xposed 框架说的一切都是天龙人活着的依赖,只要一切不按 Xposed 框架的来,便是异端,需要铲除,为此,利用春秋笔法,无证据(目前所示的证据基本为 0 [什么时候 QQ 聊天记录也能当证据了,代码呢,抓包记录呢] )地污蔑一个软件开发者

精彩,精彩,还是精彩

老川普了
ThinkPeach
2020-11-23 10:24:25 +08:00
年轻人很有冲劲和批判精神,充满理想主义和自由主义这很好。但同时容易被煽风点火,缺少冷静思考,容易立场化、片面化、极端化。
闭源和模块审核的原因作者说了是减少黑产和滥用,有利有弊,但这样做也无可厚非,除非作者违反了 license 的条例。
公司、公众号的行为我认为没有什么问题,公司是法人,享有一些政策上的福利,国家也是支持中小企业的呀,美国不遍地都是公司吗,多少人用公司名义购入财产避税等等,这也没有违反法律。(只是用来证明公司会有一些好处,不是说一定是这样操作的)。公众号更没啥问题了,这和推广个人博客、微博不是一样的道理吗,多少自媒体天天鼓吹公众号是流量入口,多么多么重要。那么多主播把自己各个平台甚至网易云的联系方式推广出去,这也是合理的啊。用这个赚钱也挺好的啊,变现也没什么问题吧。
无极码也是,通过加大获取难度的方式,抑制黑产和滥用,但对普通用户基本没有什么影响。况且软件著作权属于作者,也没有任何强制力绑架用户在这款软件上吧。不像微信那样不用就会丧失社交圈,不用太极还有那么多的 alternative 。
从法理上说,不能因为存在可能就给人定罪,法律是为了不让一个好人蒙冤,不是为了惩罚所有的罪犯。公司的商业角度、用户条款之下会存在一定操作的可能,但没有真实的证据的时候,不能去随随便便审判,否则就是在诽谤了。
为什么非要去争是不是正统 Xposed 呢?不太明白。
从 argue 的过程来看,楼主用太多调动人情绪的语气词了,最好就事论事,摆事实讲道理,用一些阴阳怪气的语气词和*阴阳怪气的*反问真的不是明智之举。btw 我不是来 judge 任何人的,只是一个旁观者看到的辩论的过程引发的感想。
lz 真的感觉 唉 太 aggressive 了... #87 楼 你引用了就是你的观点了啊...这为什么还要用这种语气把人骂一顿然后说是杠精+拉黑...
SekiBetu
2021-07-21 13:19:01 +08:00
edxp 最新测试版闭源了 sandhook(罗盒科技),在其 TG 官方频道下发布了闭源的 riru,笑嘻了
ysy950803
2021-08-31 22:48:21 +08:00
@SekiBetu 唉,其实看了这个历史帖子挺感慨的。我曾经也是在大学的时候开源过很多东西,对商业化嗤之以鼻,但工作后,内心还是希望开源有点回报。要次饭得嘛 /狗头
SekiBetu
2022-04-23 03:39:45 +08:00
@ysy950803 楼主装作清高,一定要别人开源,结果自己开始闭源了,还把不是自己的作品 riru 给魔改了一下闭源了,自相矛盾,现在基本都在用 LSPosed 了,edxposed 早死了,楼主只不过是一个写前端的,他对 xposed 框架一无所知,以至于原作者走了之后他不更新 edxposed 了

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

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

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

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

© 2021 V2EX