Тестирование SafetyNetClient.listHarmfulApps()
Я пишу приложение для Android, которое сообщит пользователю (среди прочих данных SafetyNet), если на его / ее устройстве установлено какое-либо PHA (потенциально опасное приложение).
Для этого я использую API SafeNet Verify Apps. Мой звонок isVerifyAppsEnabled()
работает нормально, но звонит listHarmfulApps()
ничего не дает
Оба синтаксически идентичны, так что я верю, что мой код в порядке, но в любом случае это так:
SafetyNetClient safetyNetClient = SafetyNet.getClient(this.getContext());
safetyNetClient.listHarmfulApps()
.addOnCompleteListener(new OnCompleteListener<SafetyNetApi.HarmfulAppsResponse>() {
@Override
public void onComplete(@NonNull Task<SafetyNetApi.HarmfulAppsResponse> task) {
Log.d("FragmentSafetyNet", "Received listHarmfulApps() result");
if (task.isSuccessful()) {
SafetyNetApi.HarmfulAppsResponse result = task.getResult();
List<HarmfulAppsData> appList = result.getHarmfulAppsList();
if (appList.isEmpty()) {
Log.d("FragmentSafetyNet", "There are no known potentially harmful apps installed.");
} else {
Log.e("FragmentSafetyNet", "Potentially harmful apps are installed!");
for (HarmfulAppsData harmfulApp : appList) {
Log.e("FragmentSafetyNet", "Information about a harmful app:");
Log.e("FragmentSafetyNet", " APK: " + harmfulApp.apkPackageName);
Log.e("FragmentSafetyNet", " SHA-256: " + harmfulApp.apkSha256);
Log.e("FragmentSafetyNet", " Category: " + harmfulApp.apkCategory);
}
}
} else {
Log.d("FragmentSafetyNet", "An error occurred. " +
"Call isVerifyAppsEnabled() to ensure " +
"that the user has consented.");
}
}
})
.addOnSuccessListener(new OnSuccessListener<SafetyNetApi.HarmfulAppsResponse>() {
@Override
public void onSuccess(SafetyNetApi.HarmfulAppsResponse harmfulAppsResponse) {
Log.d("listHarmfulApps()", "Sucess! Received listHarmfulApps() result");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e("listHarmfulApps()", "Error: " + e.getMessage());
}
});
Код на самом деле не так уж и много: это в основном код на странице Google, адаптированный для использования новых вызовов API в GMS 11.0.2 (все примеры на вышеупомянутой странице используют устаревшие вызовы), но он не работает в все. Ни один из слушателей не срабатывает.
Либо я что-то испортил, либо на устройстве, которое я тестирую, просто нет PHA.
Итак, мои 3 вопроса:
1) мой код правильный?
2) Есть ли какая-либо PHA, которую я могу установить, которая будет в черном списке, появится в списке, но на самом деле не вредна? (например, вирус EICAR, используемый для тестирования антивирусного программного обеспечения).
3) Наконец, если (1) и (2) невозможны, есть ли какой-либо PHA, который я могу установить? В этом случае я буду использовать контролируемую одноразовую среду, такую как эмулятор с правами root, который потом просто протираю.
Заранее спасибо.
1 ответ
Для тех, кто заинтересован в результате этой проблемы, вот как я ее решил:
1) В моем коде было несколько ошибок, которые вызывались из v4.Fragment. Так как мое приложение имеет активность, эта строка:
SafetyNetClient safetyNetClient = SafetyNet.getClient(this.getContext());
Должен прочесть:
SafetyNetClient safetyNetClient = SafetyNet.getClient(this.getActivity());
(обратите внимание на изменение от getContext () -> getActivity ())
2) Это НЕ РАБОТАЕТ НА ЭМУЛЯТОРАХ. Период. Причина в том, что listHarmfulApps()
работает только если приложение Apps Verify включено и не может быть включено в эмуляторе.
3) Мне пришлось временно пожертвовать одним из моих телефонов на Android (Galaxy S3) и заразить его некоторыми примерами вредоносного ПО (которые являются настоящими APK), присланными мне другим разработчиком. Для этого я удалил память и SIM-карту, удалил с нее любую личную информацию (включая учетную запись Google... я использовал одноразовую) и подключил ее к своему гостевому Wi-Fi, изолированному от моего домашнего Wi-Fi., Вредоносный APK был установлен через ADB, я открыл несколько банковских приложений, чтобы его можно было "активировать", а затем отсканировал его. Жаль, что я забыл сделать принт-экран.
4) Позже я узнал, что использовал неправильный шаблон поиска в Google, чтобы найти тестирующее вредоносное ПО. Существует довольно много сайтов, которые позволят вам загрузить примеры вредоносных программ. Некоторые из них требуют бесплатной регистрации.
5) Важно отметить, что на этапах (4) и (5) я имел дело с реальным вредоносным ПО, а не с тестовыми файлами (такими как EICAR), поэтому они представляли реальную опасность и могли причинить реальный вред, если позволили. Это было похоже на работу с заряженным пистолетом, с легким спусковым крючком и без предохранителей!
6) GS3 должен был быть перепрошит со стандартным ПЗУ, чтобы быть сертифицированным без вредоносных программ.
7) Приложение было завершено и опубликовано в магазине Play Store: https://play.google.com/store/apps/details?id=com.alxdroiddev.gs3identity
Спасибо тем, кто из группы 2600 хакеров помог мне.