Тестирование 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 хакеров помог мне.

Другие вопросы по тегам