Android的属性文件是Android系统攻防中重要的一环,属性中的一些只读字段(以ro开头)通常会被当作大厂的指纹而加入检测,于是如何mock和检测mock成了安全中举足轻重的知识。属性的检测有几种方案:
- 通过java标准接口的Build类读取
- 通过shell的getprop [属性key]的方式读取
- 通过shell扫描getprop的方式读取
- 通过framework c代码的android_os_SystemProperties.cpp 下的nativeget读取
- 通过内核的libc库中的system_properties.cpp读取
- 通过读取prop文件读取
实际上,除了上述列出的方式以外,我们还能读取的地方有很多,为什么会有那么多。熟悉朋友就会发现,上述列出来得方案,基本是从代码调用侧跟踪,一步步往下跟踪调用,就能发现上述所有得调用方式。而不管是做逆向还是做安全,要想达到更保险得目的,就要从更加根源得地方去修改或者检测,这种思维是一般做正向开发的人不具备的,而我从业之初也遇到过这个问题,一开始都是从表面上解决问题,结果都是一些皮毛,起不到实质性的作用,而最后时间花了,但是并没有结果。
不过这种思路并没有错,因为我们通常都是先看到表面,需要一步步的抽丝剥茧,才能逐渐接近真相,看到事物的本质,而这个抽丝剥茧的过程,很繁琐,但通常无法避免,道理是道理,实践是实践,时间过验证的道理才会真正被自己接受