浅谈 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 条回复
mlgmxyysd
2020-02-21 18:08:39 +08:00
@locoz
>1、我也是老用户,更新从来没看到过,后来卸载一次才看到,问其他老用户也说没看到过
>5、并非指代 weishu
mlgmxyysd
2020-02-21 18:19:31 +08:00
@locoz
>1、但是这条款在这摆着,如果哪天做点见不得人的事你想告都没门,已默认勾选同意协议
yu1222
2020-02-21 18:20:55 +08:00
@mlgmxyysd 你说的基本都是你的猜测,然后到处发文冷嘲热讽。既然你说太极手机用户隐私,那你拿到确实的证据了吗?按你这个黑太极的耐心我觉得抓包反编译看代码拿到证据都是分分钟的事吧。要黑拿出真凭实据来
locoz
2020-02-21 18:24:25 +08:00
@mlgmxyysd #81
1、那就不知道了
5、我说直接点吧...你正文部分大量提及到维术,被相关人员(比如你说的太极管理组的人)关联理解的概率很高,不管是不是被理解错误了都确实是你挑起的。
(话说到底指的谁,好奇
yu1222
2020-02-21 18:27:09 +08:00
附件:

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

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

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

这也是你在挑事不是?
而且公众号都能成为黑点吗?公众号发广告影响到太极 app 的体验了吗?
你是个高中生生活无压力用爱发电这完全 ok,但是不代表所有人都可以都必须用爱发电吧?
locoz
2020-02-21 18:32:45 +08:00
@mlgmxyysd #82 条款这种东西,各个大厂都有,比这更容易坑人、涉及内容更深的比比皆是,这种事情没啥别的办法,要么选择信任要么选择放弃,要么就用技术手段封杀可能搞事情的部分(就像限制模块作用域一样)。

如果事情发生了,你能拿出证据证明是这个 APP 干的,并且你可以肯定自己没有收到过协议的确认提醒或者是压根就没接受过协议,而开发者也拿不出已经给你展示过协议、你接受了协议的证明,那么你实际上是占了优势的,并不是“想告都没门”。
mlgmxyysd
2020-02-21 18:53:29 +08:00
@yu1222 8 好意思,这 8 是我说的,From 看到了马?
mlgmxyysd
2020-02-21 18:54:16 +08:00
@locoz 那我还是选择放弃,大厂起码有保障,小厂甚至个人的“口头保证”我肯定是不信的
mlgmxyysd
2020-02-21 18:56:28 +08:00
@yu1222 请吧
https://vip1.loli.net/2020/02/21/5BcGi13P2YDSa7h.png

公众号发广告影不影响我不知道,公众号发激活码倒是有影响
yu1222
2020-02-21 19:07:19 +08:00
@mlgmxyysd from 又怎样?引用了不就代表你的观点吗?你不想传播这事你会 from?
公众号发激活码倒是有影响??
啥影响???
影响用户拿码??
那又跟你何干,人家写的代码做的公众号要咋玩咋玩不是?
yu1222
2020-02-21 19:08:32 +08:00
@mlgmxyysd 就跟你转发了个谣言,跟警察说
8 好意思,这 8 是我说的,转发看到了马?
???
j137tt736CExzlfM
2020-02-21 19:26:52 +08:00
@yu1222
@locoz
@NTAULTzM
@weishu

最好的方式就是不要回复这个帖子
mlgmxyysd
2020-02-21 20:32:41 +08:00
@yu1222 所以这是谣言?不想和杠精争论,已 block
yu1222
2020-02-21 20:33:48 +08:00
@mlgmxyysd 我就成肝经了?服气呵呵
已 block too 不客气
bkmi
2020-02-22 00:05:44 +08:00
弱弱问一句太极开放第三方插件了吗,最早听说太极支持 Android 9 的 xposed 框架了,备份刷机升级一顿操作,兴高采烈装上自己写的插件发现竟然不让用…

幸亏 edxposed 救了我,小小捐助了一把以示支持。
lijialong1313
2020-02-22 01:33:50 +08:00
老实说,我无法理解为什么太极不支持第三方模块。我们有一些简单的专门用来黑我们学校软件的模块……然后不支持太极,完全没办法。
locoz
2020-02-22 05:19:59 +08:00
@lijialong1313 #96 我觉得最开始可能是考虑到这种重打包一下就能免刷机使用 xposed 的操作过于简单了,面对的用户群体也是五花八门,担心有那种只懂一点的小白装了之后导致安全隐患吧…
FrankHB
2020-02-22 07:28:32 +08:00
什么商业化不商业化的,功能残废还没给源码给用户改的余地就是无能,哪来那么多废话。
是 idea 的实现更有价值还是 idea 更有价值这个依赖三观的问题暂且不论,防止手贱 /用户友好的附加功能和项目存在的意义的来源哪个更重要,奉劝某些人分清主次。
Dk2014
2020-02-22 09:10:29 +08:00
阴阳怪气 vs 暴躁老哥
tearain
2020-02-22 10:29:25 +08:00
看了 @weishu 的话,新技能

片面谬误
当你的观点被证明是错误的时候,你用特例来给自己开脱。
人类都不喜欢被证明是错的,所以当他们被证明是错的时候总会想办法给自己开脱。人总是觉得自己以前觉得正确的东西必须是正确的吗,所以总能找到理由让自己阿 Q 一下。只有诚实和勇敢的人才能面对自己的错误,并且承认自己犯错了。

窃取论点
你采用循环论证的方法来证明一个被包含在前提里面的观点。
这是一种逻辑智商破产的谬误,因为你把你的前提假设默认为真的,然后利用循环论证的方式来证明它。

德克萨斯神枪手
你在大量的数据 /证据中小心的挑选出对自己的观点有利的证据,而不使用那些对自己不利的数据 /证据。
你先开了一枪,然后在子弹击中的地方画上靶心,搞得自己真是个神枪手一样。你先决定了自己的立场,然后才开始找证据,并且你只找对自己有利的,而对于那些对自己不利的就选择性忽略。

get

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

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

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

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

© 2021 V2EX