3

在我的 Android 应用程序中,我只想为有根设备提供特定功能。检查的唯一方法是知道我是否可以运行超级用户命令?这张支票够吗?是否有更多方法可以检测越狱的安卓设备?

4

3 回答 3

3

对于那些仍然想知道如何检测有根设备的人来说,现在有一种方法可以做到这一点。

您现在可以使用SafetyNet Attestation API.

是文档的链接。

下面是如何使用从文档中获取的 API 的片段。

// The nonce should be at least 16 bytes in length.
// You must generate the value of API_KEY in the Google APIs dashboard.
SafetyNet.getClient(this).attest(nonce, API_KEY)
    .addOnSuccessListener(this,
        new OnSuccessListener<SafetyNetApi.AttestationResponse>() {
            @Override
            public void onSuccess(SafetyNetApi.AttestationResponse response) {
                // Indicates communication with the service was successful.
                // Use response.getJwsResult() to get the result data.
            }
        })
    .addOnFailureListener(this, new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            // An error occurred while communicating with the service.
            if (e instanceof ApiException) {
                // An error with the Google Play services API contains some
                // additional details.
                ApiException apiException = (ApiException) e;
                // You can retrieve the status code using the
                // apiException.getStatusCode() method.
            } else {
                // A different, unknown type of error occurred.
                Log.d(TAG, "Error: " + e.getMessage());
            }
        }
    });

要使用以下 API,您必须从 Google API 控制台生成 API 密钥。这个键是你传递给.attest()方法的。

还要添加 SafetyNet 依赖项。

implementation 'com.google.android.gms:play-services-safetynet:15.0.1'

有关最新的依赖版本,请参阅https://developers.google.com/android/guides/setup

API 返回以下内容:

{
  "nonce": "R2Rra24fVm5xa2Mg",
  "timestampMs": 9860437986543,
  "apkPackageName": "com.package.name.of.requesting.app",
  "apkCertificateDigestSha256": ["base64 encoded, SHA-256 hash of the
                              certificate used to sign requesting app"],
  "apkDigestSha256": ["base64 encoded, SHA-256 hash of
                  the APK installed on a user's device"],
  "ctsProfileMatch": true,
  "basicIntegrity": true,
}

设备的位置ctsProfileMatchbasicIntegrity完整性。

在此处输入图像描述

于 2018-07-12T01:59:34.527 回答
2

查看RootTools,这是一个很棒的库,旨在简化为 root 设备开发应用程序。

从他们的例子

if (RootTools.isRootAvailable()) {
    // su exists, do something
} else {
    // do something else
}
于 2013-07-30T15:56:20.000 回答
0

手机越狱的方法有很多种;大多数依赖于硬件和/或软件。默认情况下,有些手机甚至附带超级用户访问权限!检查所有这些方式是没有意义的,因为最终结果是相同的:您拥有超级用户访问权限。所以是的,最简单/最简单/最好的答案是尝试执行超级用户命令。

如果您担心这还不够,也许您可​​以解释更多关于您正在尝试做的事情。

于 2013-07-30T15:31:41.610 回答