查看原文
其他

太极新版本,翻车了

维术 虚拟框架 2024-03-23

前段时间太极发了个新版本,然后顺便给版本号来了个大跃进,直接蹦到了 14.0;当时的说法是:

以后太极版本号规则会追随 Android 系统的版本,比如说现在支持了 Android 14,那我就会把版本号改为 14.x.x

没想到,这才没几天就要翻车了。

事情是这样的,前几天西大师(LSPosed 开发者)扔了一个链接 ,这链接是 Android 主线代码的一个提交,它把 libart.so 这个 ELF 中的 .strtab 和 .symtab 给删了;这会导致咱们的 hook 库无法查找的一些私有的符号。

可能有些童鞋不明白技术细节,我跟大家简单科普一下。所有 Xposed 框架及其衍生版,最核心其实分为两个部分,进程注入ART hook 框架(ART 指 Android Runtime,也被称之为 Android 虚拟机)。进程注入让我们有机会在任意的 Java 进程执行任意代码,ART hook 框架让我们有能力去修改进程内部 Java 函数的执行逻辑。比如:


进程注入ART hook 框架
Xposedapp_process 替换libart 替换
VirtualXposedVirtualAppepic
EdXposedRiruYAHFA
太极阳Zygisk / app_process 替换epic
太极阴Apk 字节码植入epic
LSPosedZygisk / RiruLSPlant
LSPatchApk 字节码植入LSPlant

其中,原版 Xposed 的 ART hook 框架的实现原理为,直接修改 art 的源代码然后二进制替换 libart.so 及其相关组件;这种侵入式地修改使得其维护成本极高。后来,所有现代的 Xposed 框架都抛弃了这个做法,改为了将 ART hook 框架作为一个单独的部分外置(这其实是一种解耦),Root 版本和免 Root 版本,实际上就是外置这部分所采用的方法不同。

虽然 ART hook 框架外置了,但由于它本质上还是对 libart.so 的修改,因此它极度依赖 libart.so 的内部实现;我打个比方:如果把 ART 比作一栋房子里面的供电线路,正常情况下,打开某个 开关 A 可以保证 灯 A 亮起来,ART hook 框架所做的事情就是:把房子里面的某一部分墙凿开,然后把里面的某些线路改造一下,其结果就是,打开 开关 A 的时候可以先让 灯 B 亮一下,至于 灯 A 亮不亮可以看心情。

不同的 Android 版本,房子里面的供电线路都不一样,任何一个细微的地方发生变化都可能导致整个框架不正常;有时候 Google 会搞大装修,有时候又只是换个皮;如果 Google 装修后,你把旧的凿法直接用在新版本上,导致的后果可能不仅仅是灯不亮,而是房子直接塌了(比如之前 太极的 ART hook 框架被迫重写 )。每次 Android 大版本升级,只要 ART hook 框架搞定,基本上就可以喜大普奔了。所以,在看到在鸿蒙系统 2.0 到 4.0 上太极都可以无缝运行的时候,我只能感叹真的是遥遥领先。

那这次 Google 又搞了啥装修呢?它把明线改成了暗线。本来线路一眼就能看到,只需要找准了一锤子抡下去就行了,现在找这个线路还得花一番工夫。因此毫无疑问:太极 14.0.0 在 Android 14 即将发布的时候翻车了。

以后我会吸取教训,只有在 Android 大版本正式发布的时候才更新版本号,不能半场开香槟。不过眼下就非常尴尬了,难道,我要把版本号给改回 13.9.99 吗?

最后,大家晚安!

推荐阅读


欢迎关注我的公众号“虚拟框架”,原创技术文章第一时间推送。


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存