如何确定Android设备的安全补丁级别?

10
通过API或其他机制如何确定Android设备的安全补丁级别?我要查找手动单击设备上的 "设置->关于" 菜单中可以找到的相同安全补丁信息。 谷歌每个月发布安全补丁,例如 2016-12-01

enter image description here

5个回答

16

在Android SDK 23(棉花糖)及更高版本中,你可以从android.os.Build.VERSION.SECURITY_PATCH检索安全补丁日期。该日期是一个YYYY-MM-DD形式的字符串值。

在棒棒糖中,您可以使用getprop命令读取ro.build.version.security_patch的值。请参见此S/O问题以了解如何使用ProcessBuilder执行getprop

自2015年10月以来,安全补丁每月发布一次,请查看Android安全公告获取更多详细信息。


你在Android 5.0或以下的版本中是否找到了“ro.build.version.security_patch”的任何值? - Ando Masahashi
我认为,对于任何不支持 android.os.Build.VERSION.SECURITY_PATCH 的设备,甚至尝试确定其安全补丁级别都没有意义。所有不支持该API的设备都应被视为过时/不安全。 - Mikko Rantalainen

3
我认为没有root权限是不可能的,因为安全补丁级别存储在build.prop文件中的ro.build.version.security_patch字段中,该文件位于/system/路径下。如果您拥有root权限,只需读取该文件并查找上述提到的字段即可。
编辑:正如@v6ak所提到的那样,即使没有root权限,也可以访问属性的值。

我无法测试它,因为我没有root过的安卓设备。但这是有道理的,因为这是一种安全问题,每个简单的恶意应用都可以找出安全补丁级别,然后只使用最简单的安全漏洞来进行恶意操作。 - tardis
1
它可以在未root的情况下运行。/system目录中的大多数(也许全部)文件都是公开可读的,因此只需运行以下命令即可完成操作:cat /system/build.prop | grep security - v6ak

2

这个值存储在/system/bin/getprop系统文件中。您可以通过以下方式读取它:

最初的回答:

try {
    Process process = new ProcessBuilder()
            .command("/system/bin/getprop")
            .redirectErrorStream(true)
            .start();

    InputStream is = process.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String line;

    while ((line = br.readLine()) != null) {
        str += line + "\n";
        if (str.contains("security_patch")) {
            String[] splitted = line.split(":");
            if (splitted.length == 2) {
                return splitted[1];
            }
            break;
        }
    }

    br.close();
    process.destroy();

} catch (IOException e) {
    e.printStackTrace();
}

1
你可以在adb shell中执行getprop ro.build.version.security_patch命令。希望这些属性对于Android上的非root进程是可用的。
因此,在C/C++中,我会尝试使用: system("getprop ro.build.version.security_patch");
或者在Java中使用类似以下代码:
import android.os.Bundle;
public static final String SECURITY_PATCH = SystemProperties.get(
            "ro.build.version.security_patch");

0

你也可以使用以下的adb命令

adb shell getprop | egrep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接