Как сделать приложение специфичным для устройства (блокировка устройства / учетной записи)? - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу запретить кому-либо просто рутировать устройство и копировать приложение для распространения.Как сделать загруженное устройство «заблокированным»?

Моя идея состоит в том, чтобы реализовать алгоритм шифрования (односторонний), который хэширует номер телефона пользователя, и при выполнении кода каждый раз выполняется проверка хеша.(так что если вы используете чужое приложение на своем телефоне, произойдет сбой).

Однако, поскольку приложение загружается таким же образом, если я использую хеширование номера телефона при первом запуске, злоумышленник просто не сможет запуститьприложение и сдирать базовую версию скачанного пакета.

Так что мой вопрос в том, есть ли способ в Google Play Store предоставить приложению одну из измененных переменных?Или умный способ гарантировать, что установленное приложение не будет работать где-либо еще, чтобы предотвратить обрыв пакета прямой копии?Может быть, принудительно запустить первый запуск, чтобы он настраивался сразу после загрузки?

1 Ответ

0 голосов
/ 21 сентября 2018

Есть короткий ответ по информатике и более длинный, более полезный ответ. Краткий ответ: «Если ваше приложение работает на сервере, то это легко. Если ваше приложение полностью работает на устройстве, это теоретически невозможно».

Если ваше приложение использует сервер, это простой процесс:

  1. Используйте Библиотеку проверки лицензий Google Play (LVL) , чтобы получить криптографический ответ от Google, подтверждающий, что этот аккаунт приобрел это приложение. Сделайте это в клиентском коде приложения.
  2. Отправьте этот ответ на ваш сервер и проверьте подпись. Если оно не совпадает, не отправляйте необходимую информацию в ваше приложение.

Поскольку пользователь не может вмешиваться в работу серверов Google или ваших серверов, а вашему приложению требуется реакция сервера на работу, это невозможно сломать.

Однако, если вы проверите ответ на стороне клиента, или ваше приложение может работать без ответа сервера, это не может быть сделано (теоретически). Злоумышленник всегда может удалить звонок в Google Play, код подтверждения или фальшивый ответ вашего сервера. В этом случае вы участвуете в гонке вооружений с нападающими. Большинство злоумышленников довольно ленивы. Если вы используете Google Play License License Verification Library (LVL) , чтобы проверить, что ваше приложение было куплено в Play, используйте ProGuard или другой оптимизатор и сделаете небольшую запутанность, чтобы скрыть ваш код, некоторые злоумышленники могут атаковать, но большинство не будет беспокоиться, если ваше приложение / игра не станет супер популярной. Другой полезной технологией является API аттестации SafetyNet , который сообщает вам, не было ли подделано ваше приложение. Но, опять же, если вы не проверяете сервер результатов, его можно победить, так что клиентская сторона - это просто гонка вооружений.

Осторожно, полагаться на что-то вроде номера телефона - очень плохая идея:

  • как насчет планшетов, у которых нет SIM-карты?
  • как насчет пользователей с двумя SIM-картами?
  • как насчет пользователей, которые меняют телефонные номера или сети?
  • а как насчет пользователей, которые владеют более чем одним телефоном, которым нужно купить ваше приложение только один раз?
...