Как обнаружить рутированное / взломанное устройство Android
В моем приложении для Android я хочу предоставить определенную функцию только для корневых устройств. Единственный способ проверить это - узнать, могу ли я запускать команды суперпользователя? Достаточно ли этого чека? Есть ли еще способы обнаружить взломанное устройство Android?
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, вам необходимо сгенерировать ключ API из консоли API Google. Этот ключ - то, что вы передаете .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
целостность устройства.
Есть много методов, используемых для джейлбрейка телефона; большинство из них зависят от аппаратного и / или программного обеспечения. Некоторые телефоны даже поставляются с доступом суперпользователя по умолчанию! Нет смысла проверять все эти способы, потому что конечный результат один и тот же: у вас есть права суперпользователя. Так что да, самый простой / самый простой / лучший ответ - попытаться выполнить команду суперпользователя.
Если вы обеспокоены тем, что этого недостаточно, возможно, вы сможете объяснить больше о том, что вы пытаетесь сделать.