V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
牛客网
mlgmxyysd
V2EX  ›  Android

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

  •  5
     
  •   mlgmxyysd · 249 天前 · 11550 次点击
    这是一个创建于 249 天前的主题,其中的信息可能已经有所发展或是发生改变。

    众所周知,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

    • ( DEV )模块开发者需要特殊适配这一功能吗?

    不需要

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

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

    • ( DEV )我该如何为我的框架分支添加这一功能?

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

    具体代码自行实现

    • ( DEV )为什么不像 Android 软件在 Manifest 中声明权限那样要求模块声明 hook 列表?

    在上文中我提到了兼容性

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

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

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


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

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


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


    附件:

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

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

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

    image_2020-02-17_13-05-35.png

    第 1 条附言  ·  248 天前

    忘了提了,文章撰写于 2019 年 12 月 28 日,与 XPatch 修改后的 demo 同时发布在个人 blog 上

    本来是懒得提个人 blog 的,某个小人照搬的太舒服了,还是提一下吧:http://mlgmxyysd.meowcat.org/2019/12/28/xposed-modules-activation-scope/

    122 条回复    2020-09-18 23:26:52 +08:00
    1  2  
    canyie
        101
    canyie   247 天前   ❤️ 1
    好了你们不要争了,我是梦境作者,我早就有这个想法了,所以我才是第一个想到的(手动滑稽)
    你们的争论点似乎是“谁先想到的这个 idea”个人,个人认为争这个完全没有意义,出发点都是为了让 xposed 更安全,何必去争呢?
    kenvix
        102
    kenvix   247 天前   ❤️ 1
    不太清楚这个争端全过程,就我目前看到的,发表一下个人的观点

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

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

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

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

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

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

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

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

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

    另外,你不能因为我论证的方法不对,而说明我的观点是错误的。
    lijialong1313
        117
    lijialong1313   246 天前
    @mlgmxyysd 现在来说的话好像在无法 root 的时候只有一个选择,比如像我的手机是华为还是专版……太极又不支持我的插件,我现在都直接用 vxp 了……说实话如果 ed 能出免解锁方案多好^-^
    lijialong1313
        118
    lijialong1313   246 天前
    @locoz 唉……最惨的是像我这样的,我想自己使用自己的模块,但是不支持 root。我是真滴没办法 QAQ
    mlgmxyysd
        119
    mlgmxyysd   246 天前
    @lijialong1313 用 XPatch 咯,现在测试版也支持安卓 10 了( xpatch 群里有 apk )
    locoz
        120
    locoz   246 天前
    @lijialong1313 #118
    @lijialong1313 #118
    emmmm 不是挺多其他的选择的嘛,你看主帖里的那张图
    FrankHB
        121
    FrankHB   244 天前
    @mlgmxyysd 兼容的问题,我理解的现状是没法排除风险(操作不当极端可能变砖,虽然不算直接是框架的原因)。
    技术上,这也不是单一框架能决定的东西(验证其它框架的侵入式修改不存在冲突,在计算复杂度上就不切实际)。
    因为许可证的 AS-IS/NO WARRANTY 条款,这里的后果是没法有谁兜底的。
    所以我至少想还要一个全局的非担保性描述:在不排除多个框架的影响的前提下,框架的开发者如何提示风险来明确界定到底某种共存的用法算不算是受到支持地兼容?
    zhz1237ok
        122
    zhz1237ok   37 天前
    2020 年了,回来看两家人的斗争,有股美国制裁华为的感觉,天龙人 mlgmxyysd VS 平民 weishu

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

    精彩,精彩,还是精彩

    老川普了
    1  2  
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3068 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 12:35 · PVG 20:35 · LAX 05:35 · JFK 08:35
    ♥ Do have faith in what you're doing.