Android Property (属性系统)可谓是 Android 中使用最广泛的进程间信息共享机制了,如 app 获取系统版本号,就是通过属性系统传递的信息;对于如此常用的底层机制,你可能知道 getprop SystemProperties __system_property_get 这些 API,但是,你真的了解它吗?这次,我们不但要会遵守规则用这些 API,我们还要成为规则的缔造者,让系统为我们服务!Let’s go!

当我写下这段文字时,时间是 2022 年 1 月 9 日,这个时候发上一年年终总结似乎晚了点;老实说,在这个博客刚创建的时候,我没有打算写这种记录性的内容,我的目标一直都是像 Weishu’s Notes 的高质量内容;但是昨晚看 weishu 直播写代码,他说了一句让我很触动的话:“人生不需要有意义,有意思就够了。”我的 2021 可能没什么意义,但如果我不做点什么纪念一下,它很有可能就消逝在时间的长河里,连我自己都回忆不起来,更别提有意思了。

2009年6月1日(UTC时间),法国航空447号班机(机型空中客车A330-203、注册号F-GZCP)在大西洋中部雷达盲区神秘失踪,后被证实坠毁,机上228人(乘客216人、机组成员12人)全数罹难。著名空难文献剧《Air Crash Investigation》(中文一般译为《空中浩劫》,以下简称ACI)在S12E13中收录了此事故,揭露了所谓的“空难真相”,将矛头直指副驾驶皮埃尔-塞德里克·博南(Pierre Cédric Bonin);同时,由于该片的知名度,让许多航空爱好者乃至真正的航空从业者认为该片所述即为事实。然而,真的是这样吗?

之前研究art的时候发现了native bridge,简单来说这东西是主要作用就是为了能运行不同指令集的so(比如x86的设备运行arm的app),而arm设备上这个东西一般都是关闭的,研究了一下后发现这东西挺适合动手脚的,刚好自己在用的Riru被针对了,所以有了这篇博客。把对应的示例代码传到了github:NbInjection,接下来我们聊一下这个小玩具。

2018年发布的Android 9中引入了对隐藏API的限制,这对整个Android生态来说当然是一件好事,但也严重限制了以往我们通过反射等手段实现的“黑科技”(如插件化等),所以开发者们纷纷寻找手段绕过这个限制,比如我曾经提出了两个绕过方法,其中一个便是几乎完美的双重反射(即“元反射”,现在来看叫“套娃反射”比较好);而在即将发布的Android R中把这个方法封杀了(谷歌:禁止套娃!),因此我重新研究了Android R中的限制策略。

大家应该还记得我上次介绍的Dreamland吧,忘记了也没事,简单介绍一下:这是一个类似Xposed的框架,可以注入应用进程并进行方法hook。进程注入上次已经说过了,另一个重点hook当时是使用了SandHook框架,这是一款非常优秀的hook框架,但是有点问题,不太适合Dreamland;在比较了其他hook框架之后,发现似乎都存在一些问题,最终决定自己动手写一个。已经开源,代码在这:Pine,接下来我会介绍它的具体实现。