反射一度被认为是java开发者得福音而被广泛应用,但是在Android9之后,Google系统对开发者通过反射进行非官方得api接口调用做了限制。也就是说,一些隐藏的接口开发者无法正常访问了。我们可以在Androi系统的源码中看到系统那些地方做了api隐藏,以Android10为例,位于hiddenapi-greylist-max-o.txt
,当然,谷歌此举旨在提升软件的用户体验,降低崩溃,但是对于攻防者来说,关注点却不太一样。
我们知道Android系统上跑的应用并不是一个像linux进程一样,而是一个沙盒,这个沙盒里面能干什么不能干什么安排得明明白白,但是软件开发者可不这么认为,因为软件领域不仅仅是写软件这么简单,写一款商业化的软件,还需要关注是否会被攻击者破解,或造假,或者修改。而这些技术手段里面最重要的就是各种各样的设备指纹,也就是能标识这台机器的标识。但由于存在hook技术和系统定制,导致沙河里面跑的应用并不安全。因此沙河里面的应用需要尽可能地拿到一些攻击者不容易修改的或者不容易察觉到的字段作为指纹,来提高自身的安全性,而反射,就是其很重要的一种途径。
为什么Google系统会区分标准api和费标准api呢?这除了规范开发者对隐私访问以外,还有