本文介绍 3 种检测 Android 设备 SELinux 状态的方法, Java 层检测Selinux已经没有太多意义,因为不是很靠谱,随便一个hook代码就能绕过,所以我要告诉你如何在 C 层完成检测。这几种方法在效率和抵抗mock SELinux State 的技术方面都不相同,因此在使用之前你需要知道每种方法的背景及其局限性。
这三种检测方法分别为:
- 读取
build.selinuxAndroid
属性 - 读取
boot.selinuxAndroid
属性 - 读取
enforce
文件
为了更容易看懂,我会在每个方法中,把使用的代码将和示例一起写出来。为了更容易理解,本文中的示例代码会尽可能简单,有测试截图的话我也会贴出来并截取屏幕截图。我这里用的测试程序简单,从 JNI 调用一个随机数,在按下按钮时显示该随机数。
好了,我们开始吧。
Android Build属性
前面两种方法都是读取的属性,原理相同,所以就放在一起说了。
首先要搞懂这些 android build属性是干什么的?
你可以理解为一个文件,这个文件里面以字符串键值对的形式保存有关当前构建和其他系统属性的信息。不过这里有一点要注意的是,A设备存在的属性B设备不一定有,比如一些厂商定制的属性,又或者厂商出厂时对属性做了定制。
由于前面