Определить, установлено ли приложение из магазина Play
Я хочу проверить и разрешить использование моего приложения, только если оно было загружено из магазина Play и не было передано другим пользователем или из какого-либо другого источника. Как я могу запретить пользователю использовать приложение, если оно не было загружено из магазина Google Play?
5 ответов
Этот метод проверяет, установлено ли ваше приложение из Play Store.
boolean verifyInstallerId(Context context) {
// A list with valid installers package name
List<String> validInstallers = new ArrayList<>(Arrays.asList("com.android.vending", "com.google.android.feedback"));
// The package name of the app that has installed your app
final String installer = context.getPackageManager().getInstallerPackageName(context.getPackageName());
// true if your app has been downloaded from Play Store
return installer != null && validInstallers.contains(installer);
}
Несколько дней назад я выпустил библиотеку Android, PiracyChecker, которая защищает ваше приложение с использованием некоторых методов, таких как лицензирование Google Play (LVL), защита подписи APK и идентификатор установщика (этот).
Обойти проверку
Я хочу проверить и разрешить использование моего приложения только в том случае, если оно было загружено из магазина Play и не было передано другим пользователям или из любого другого источника.
Хотя эту проверку можно выполнить программно, ее также можно обойти, переупаковав приложение без проверки или используя инструментарий во время выполнения, чтобы обойти проверку. Пример такого фреймворка - Фрида:
Внедряйте свои собственные сценарии в процессы черного ящика. Перехватить любую функцию, шпионить за криптографическими API или отслеживать частный код приложения, исходный код не требуется. Отредактируйте, нажмите «Сохранить» и сразу увидите результаты. И все это без этапов компиляции и перезапуска программы.
Я написал статью, чтобы показать, как использовать Frida для обхода закрепления сертификата в приложении для Android, и тот же подход можно использовать для обхода этой проверки. Единственная разница в том, что вам нужно найти правильный сценарий Frida или написать его самому и использовать его вместо on, чтобы обойти закрепление. Фрида Code Share сайт как огромный набор скриптов и один может существовать для этого предложить или может быть использовано в качестве отправной точки , чтобы увидеть , как написать свой собственный сценарий.
Защитите чек
Как я могу запретить пользователю использовать приложение, если оно не было загружено из магазина Google Play?
Итак, если вы используете встроенный
context.getPackageManager().getInstallerPackageName(context.getPackageName());
или любым другим способом вы будете защищены от обычных пользователей, которые не устанавливают ваше мобильное приложение из магазина Google Play, но у любого, кто хочет атаковать ваше мобильное приложение, будет несколько способов обойти эту защиту, как я упоминал выше.
Возможным решением для защиты вашего мобильного приложения от злоумышленников, обходящих вашу проверку, является использование средств самозащиты во время выполнения или решения для аттестации мобильных приложений, и я рекомендую вам прочитать этот ответ , особенно разделы Укрепление и защита мобильного приложения, Защита API Сервер и возможное лучшее решение, чтобы узнать, как вы можете предотвратить правильную работу мобильного приложения, если оно не является вашим подлинным мобильным приложением.
Вы хотите пройти лишнюю милю?
В любом ответе на контрольный вопрос я всегда хотел бы сослаться на отличную работу фонда OWASP.
Для мобильных приложений
OWASP Mobile Security Project - 10 основных рисков
OWASP Mobile Security Project - это централизованный ресурс, предназначенный для предоставления разработчикам и командам безопасности ресурсов, необходимых для создания и поддержки безопасных мобильных приложений. В рамках проекта наша цель состоит в том, чтобы классифицировать риски мобильной безопасности и обеспечить контроль разработки, чтобы уменьшить их влияние или вероятность использования.
OWASP - Руководство по тестированию мобильной безопасности:
Руководство по тестированию безопасности мобильных приложений (MSTG) - это подробное руководство по разработке, тестированию и обратному проектированию безопасности мобильных приложений.
com.android.vending
это название пакета магазина воспроизведения,
context.packageManager.getInstallerPackageName(context.packageName)
получает имя исходного пакета.
Другой источник, например Huawei App Gallery, для загрузки приложения. Но я не уверен, что это за название пакета
Просто для полноты: клиент-серверные приложения (приложения, взаимодействующие с вашим собственным сервером) должны использовать проверку лицензии на стороне сервера , чтобы убедиться, что приложение было установлено из GP и является действительным - за это будет отвечать библиотека проверки лицензии (LVL).
Это можно использовать для защиты внутренних серверов от нелегитимных клиентов, таких как боты, которые должны сначала пройти проверку LVL, прежде чем получить доступ к другим внутренним функциям.
Это лучший ответ , чтобы напрямую проверить, заходят ли пользователи из игрового магазина или нет. Но не блокируйте пользователей на этом основании, поскольку на то есть много причин . Вы можете просто проверить.
Итак, я добавляю этот код в приложение и проверяю
output
во многих условиях.
// The package name of the app that has installed your app
final String installer = context.getPackageManager().getInstallerPackageName(context.getPackageName());
Условие 1: я устанавливаю приложение напрямую из Android Studio во время кодирования (например, тестирование через adb/wire).
Выход:
null
Условие 2: я собираю и устанавливаю на устройство
Условие 3: я делаю резервную копию
signed apk
в хранилище и переустановите егоВыход (тот же):
Условие 4: Я строю
signed abb
и обновитьPlayStore
Выход:
com.android.vending
Условие 5: я делаю резервную копию приложения, установленного с
playstore
в хранилище и переустановите егоВыход:
com.google.android.apps.nbu.files
..если кто-нибудь тестирует вывод в других условиях, например (вывод модифицированного приложения, загруженного из игрового магазина), обновите ответ.