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

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

  •  5
     
  •   mlgmxyysd · 2020-02-20 14:26:43 +08:00 · 26987 次点击
    这是一个创建于 1740 天前的主题,其中的信息可能已经有所发展或是发生改变。

    众所周知,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 条附言  ·  2020-02-20 22:58:30 +08:00

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    精彩,精彩,还是精彩

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