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

22092 次点击
所在节点    Android
126 条回复
MaxLi77
2020-02-21 10:43:58 +08:00
支持大佬,有时候就是自己测试的时候用用,不需要上架模块,还是喜欢无限制的框架
mlgmxyysd
2020-02-21 11:02:31 +08:00
@weishu gitment 是手动点击生成的,生成时间是点击时间,和发布时间有关系吗?请问你用过吗?
weishu
2020-02-21 11:03:36 +08:00
本来好好把这个功能科普一下也是极好的,各自把各自的用户服务好就可以,但是你竟然为了用这个抹黑我,居然要去伪造博客时间做伪证,我真是万万没想到。
你要说你去年 12 月 28 有过这个想法,这个我信,毕竟这个 idea 更早的时候也有人跟我提过;但是你有没有想清楚,不论是 edxp 还是太极,最最重要的是用户,把用户服务好就可以了;你不去加功能,不去改 bug,天天顶个作者头衔没事找事来怼我有什么意义呢?
learningman
2020-02-21 11:14:31 +08:00
吃瓜,楼上二位继续不要停
mlgmxyysd
2020-02-21 11:25:18 +08:00
@weishu 呵呵,伪造博客时间有必要?我代码和博客同时发的,难不成我还能修改 github 的提交日期?
lxghost
2020-02-21 11:29:26 +08:00
围观
mlgmxyysd
2020-02-21 11:31:11 +08:00
@weishu 反倒是您,为了消灭自己商业化被实锤的证据,连公司官网都能删掉 https://sm.ms/image/8BZnSJMl9vxDt1f
weishu
2020-02-21 11:36:46 +08:00
对你来说是必要的啊,因为你为了黑我无所不用其极;伪造 commit 时间我觉得你肯定玩的很 6
https://github.com/tiann/hehe/commits/master
slwl123
2020-02-21 11:38:09 +08:00
这有什么好争的
github 看看 commit 不就清楚了

shut up and show me the code !!!
mlgmxyysd
2020-02-21 11:40:13 +08:00
@weishu 行,就算 commit 能伪造,我不和你争这个,那 b 站视频呢?
mlgmxyysd
2020-02-21 11:40:49 +08:00
@slwl123 commit 我早就发过了,b 站视频也在 12 月 28 日,然而这人故意不承认你有啥办法?
firesun
2020-02-21 11:54:35 +08:00
宣传新功能是好事 没实锤的情况下诋毁其他人的东西就没意思了

你要是个纯技术的人写篇分析文章分析该用啥框架我觉得挺好的,自己就是框架的作者且没有实锤的情况下写这种文章很让人反感
mlgmxyysd
2020-02-21 12:31:41 +08:00
weishu
2020-02-21 12:44:02 +08:00
既然这样,那我也回你一下:

1. 协议写了这个条款就是收集了?太极阴需要修改 APK 并重打包安装,签名的密钥在本地;重新安装需要卸载愿 APP,尽管我做了强提示,但还是有用户不看,导致微信等重要数据丢失;太极阴所有生成的 App 都使用同一个密钥,如果有人拿到了这个密钥它就有权限操作里面任意的 App,这本身就是一个安全隐患。太极阳刷机会导致数据丢失,面具包签名验证形同虚设,会导致别人再分发模块导致安全问题。再说,太极 App 连 IMEI 都没有收集,内部甚至联网都是简单的下载和请求文件,请问我拿锤子收集信息?
weishu
2020-02-21 12:46:04 +08:00
@weishu 太极群的管理把你踢了,或者太极群管理说错了话,这些都是我干么?太极群的管理与我都是素昧平生的陌生人,他们抽出自己的时间来管理群,给大家提供一个好的交流环境,没有任何回报,这已经很不容易了。很多也是还在读书的学生,人非圣贤,难道他们犯个错就要把责任怪罪到我头上?
weishu
2020-02-21 12:58:56 +08:00
@weishu 在太极阳刚发布的时候,我发现核心破解不支持 9.0,而这个功能非常重要因此我完全重写了对 9.0 的支持,这代码你可以在 CoderStory 之后发布的源码里面看到。当时 CoderStory 的 git 仓库是没有协议文件的,于是我加了一句“灵感来自于 coderstory”,还给出了对应的链接。对没有协议的仓库,原作者具有一切解释权。但是后来,CoderStory 给仓库添加了 GPL 协议,并在你的怂恿下,反编译了我针对 9.0 和 10.0 的代码,把我的代码原封不动地添加到了仓库,导致我和作者产生了误会;说到底,还是你这样的人在从中作梗,毕竟老实的程序员太好忽悠了。
weishu
2020-02-21 13:02:11 +08:00
@weishu 你这样混淆时间线,前后颠倒忽悠大众的事你做了多少次?当时群管把你踢出群的时候,你立马去说“被付费群踢出”,可是直到某人现在还呆在原来那个所谓的付费群吧?时候还 QQ 私聊我说被踢了,我当时都没确认先把入群费给你退了,最后发现是普通群清人。但是你是最后是怎么造谣的呢?
weishu
2020-02-21 13:09:20 +08:00
@weishu 至于公众号赚钱的问题,我明确告诉你,公众号如果不发文章,每天的广告费在 20~30 块钱左右;作为一个有几十万粉丝的大号,我每个月只会发寥寥数文,你去看看那些真正商业化的公众号,每天会发多少头条次条?用爱发电不可能持久,我这样做根本就不损害用户利益,用户、我、微信是一个三赢的结局,难道有什么不对吗?
我还是那句话,在如今的自媒体时代,通过自媒体吸引粉丝,保持 App 免费是一个很好的策略,至少我给大家开了一个好头。
weishu
2020-02-21 13:18:17 +08:00
@weishu 我的确在次元空间网络科技有限公司,但是如果你去办公司会发现有一个叫做“高新企业认证”的东西,需要 6 个著作权认证,可以享受税收减免等优惠。除此之外,太极 App 与公司没有任何瓜葛。难道我创业之后,就不能有自己的作品了?太极 App 这个东西,本质上就是在跟各大厂商做对,我实在想不通用这个产品去做公司有什么前途。
mlgmxyysd
2020-02-21 13:24:26 +08:00
@weishu 一条一条来
协议内前半句的明显和你说的没有关系啊,你说的都是用户行为,可是在协议里的后半句呢
所以为什么老用户看不到协议呢?解释一下?
联网,我直接贴网友的回复吧:“我记得,太极如果服务器不稳定,手机上太极就出错。酷安当时好多人问太极崩了?我觉得这种机制和应用控制器一样可怕。”
很好,开始撇清管理组的关系了,您的管理可是在酷安以整个管理组(包括您)的名义在造谣哦,建议自己看看?
您也承认您 fork 的时候是无协议吧,无协议可是不允许使用的哦,建议多去了解下 no-licence 哦
反编译代码不是我,也不是 Coderstory 来做的,而是热心群友来做的,若不是热心群友我们还在蒙在鼓里,自己被锤就开始肆意扣帽子,逮谁喷谁的行为不太好哦
付费群那个最后我可是在酷安说过我把大群当付费群了,不过,那个大群确实我是从付费群加进去的

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

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

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

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

© 2021 V2EX