在我的 Android 应用程序中,我只想为有根设备提供特定功能。检查的唯一方法是知道我是否可以运行超级用户命令?这张支票够吗?是否有更多方法可以检测越狱的安卓设备?
问问题
7322 次
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,
}
设备的位置ctsProfileMatch
和basicIntegrity
完整性。
于 2018-07-12T01:59:34.527 回答
0
手机越狱的方法有很多种;大多数依赖于硬件和/或软件。默认情况下,有些手机甚至附带超级用户访问权限!检查所有这些方式是没有意义的,因为最终结果是相同的:您拥有超级用户访问权限。所以是的,最简单/最简单/最好的答案是尝试执行超级用户命令。
如果您担心这还不够,也许您可以解释更多关于您正在尝试做的事情。
于 2013-07-30T15:31:41.610 回答