Будет ли эта реализация политики Google LVL достаточно безопасной?

ServerManagedPolicy по умолчанию, который Google предоставляет в своей библиотеке проверки лицензий полагается на ответы сервера для определения интервала повторной проверки лицензии. Это приводит к необходимости повторной проверки каждые несколько дней на неограниченный срок. Это не только неприятность для пользователей, но и может стать серьезной проблемой для пользователей, которые длительное время не могут подключиться. (Мы только что получили запрос от пользователя, который ожидает, что будет без подключения к Интернету в течение нескольких недель, что и мотивирует этот вопрос.)

Таким образом, я ищу алгоритм, который выполнит две вещи:

  1. резко снизить требования к подключению по сравнению с ServerManagedPolicy;
  2. обеспечить такой же уровень защиты от пиратства.

В ответе на этот вопрос предлагается Алгоритм политики заключается в том, чтобы игнорировать время, указанное в ответе от сервера Google, и вместо этого использовать срок действия ЛИЦЕНЗИИ, равный примерно месяцу, с попытками проверки лицензии каждые несколько дней (чтобы продлить срок действия, если получен ответ ЛИЦЕНЗИИ).

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

Следующий алгоритм достигает первой цели, но я не знаю о второй. Приветствуются любые комментарии, указывающие на недостатки этого алгоритма, или предложения по другому подходу.

  1. При первом запуске выполните проверку лицензии и настаивайте на ответе LICENSED, прежде чем предоставлять полную функциональность. После получения установите относительно короткий срок действия (но дольше, чем период возврата, который предоставляет Google Play, в настоящее время 15 минут). Также зарегистрируйте льготный период на несколько дней сверх этого.
  2. Приложение начнет проверку снова после истечения срока действия лицензии. Если не удалось подключиться (режим полета и т. д.), он все равно будет работать до истечения льготного периода.
  3. По истечении льготного периода настаивайте на втором ответе LICENSED, прежде чем разрешить нормальное функционирование приложения.
  4. После получения второго ответа LICENSED, включите все функции приложения навсегда и никогда больше не проверяйте.
  5. Если в какой-либо момент получен ответ UNLICENSED, полностью отключите полную функциональность. (Конечно, пользователь может вернуться к шагу 1, удалив все данные приложения.)

Дополнительные пункты:

  • Было предложено отказаться от первой проверки лицензии и дождаться истечения периода возврата, прежде чем выполнять проверку лицензии. Цель настаивания на первом ответе LICENSED состоит в том, чтобы предотвратить эксплойт, когда после сбоя проверки лицензии пользователь просто останавливает процесс приложения, очищает данные приложения и перезапускает приложение. (Приложение приносит пользу, даже если его можно использовать всего 15 минут за раз.)
  • Цель настаивания на втором ответе LICENSED состоит в том, чтобы обойти эксплойт buy-run-backup-return-restore.
  • Я не спрашиваю, является ли проверка лицензии с обратным вызовом хорошей идеей или нет (это то, что Google предлагает вместо своего устаревшего механизма защиты от копирования). Я также хорошо знаю, что никакая защита от пиратства не является надежной и весь механизм лицензирования Google можно обойти (в этом случае все вопросы о разработке алгоритма политики неуместны). Суть этого вопроса заключается в относительных рисках (для нас) и преимуществах (для пользователя) описанного выше алгоритма по сравнению с другими политиками (такими как ServerManagedPolicy).

person Ted Hopp    schedule 27.07.2012    source источник
comment
Невидимый переход от покупки по-прежнему требует проверки к покупке, проверка больше не требуется, есть проблемы. Вам нужно отразить это где-то в вашем приложении, хотя бы в каком-то диалоге настроек. (Лицензия: где-то временная, что если щелкнуть после закрытия окна возврата, принудительно будет выполнена проверка прямо тогда, с созданием сообщения об ошибке, если еще слишком рано получать бессрочную лицензию. После проверки во второй раз (автоматически, или вручную), становится Лицензия: бессрочная.)   -  person Yakk - Adam Nevraumont    schedule 19.06.2015
comment
@Yakk - я не уверен, какую проблему вы видите. Дело в том, что пользователю нужно предложить контроль над временем второй проверки?   -  person Ted Hopp    schedule 19.06.2015
comment
Итак, кто-то покупает ваш продукт, зная, что он работает в автономном режиме. Потом скачивают, запускают, работает. Затем они теряют связь (нет данных, Wi-Fi отключен по какой-либо причине). Через 3 дня их приложение перестает работать с небольшой диагностикой. Дело в том, чтобы иметь возможность сказать, что приложение работает в автономном режиме, как только оно говорит о бессрочной лицензии. Это (очевидно) важное изменение состояния для ваших клиентов: тогда важно сделать это изменение состояния видимым для клиентов.   -  person Yakk - Adam Nevraumont    schedule 19.06.2015
comment
@Yakk - А, я понимаю твою точку зрения. Клиентский опыт имеет первостепенное значение, поэтому эта политика все еще нуждается в некоторой настройке. Прошло три года с тех пор, как я задал этот вопрос, и мы фактически приняли вариант, в котором клиент никогда не видит ничего неблагоприятного, если только приложение не получает определенный ответ NOT_LICENSED (или аналогичный). В частности, после первой проверки лицензии невозможность связи с сервером никак не влияет на пользователя. Это уязвимо для эксплойта «всегда запускать это приложение в автономном режиме», но из-за характера нашего приложения мы считаем это приемлемым риском.   -  person Ted Hopp    schedule 19.06.2015
comment
Я бы посоветовал вместо «навсегда отключить все функции» просто вывести всплывающее окно, настаивающее на оплате и регистрации. Ваша цель на самом деле не в том, чтобы предотвратить использование, а в том, чтобы собрать доход.   -  person user207421    schedule 21.06.2015
comment
@EJP - Да, это, очевидно, имеет смысл, и я не имел в виду постоянное отключение. В конце концов, задача класса политики состоит в том, чтобы просто сообщить двоичный результат: разрешить или запретить. В случае отказа остальная часть приложения должна решить, как представить новости пользователю. (Запуск в демо-режиме — очевидный выбор.) Однако необходимо предусмотреть возможность повторения запроса к серверу Google, если пользователь продолжит и совершит платеж. Политика никогда не должна просто полагаться на предыдущий ответ NOT_LICENSED (если только сервер Google недоступен).   -  person Ted Hopp    schedule 21.06.2015


Ответы (1)


Что касается пиратства, всегда будет риск, и ничто из того, что вы делаете, не предотвратит его полностью.

В отличие от других рисков, вы рискуете расстроить своих клиентов приложением, которое они не смогут использовать.

Я ожидаю много 0 * отзывов от недовольных клиентов, которые не могут даже использовать оплаченное ими приложение, поскольку оно было отключено, тогда как у людей, которые получили приложение бесплатно, скорее всего, не будет перерывов. Это все равно, что купить DVD и получить на лицо предупреждения об авторских правах, когда пираты получают непрерывный просмотр.

Я бы настаивал на лицензированном ответе при покупке приложения и не беспокоился бы о втором ответе. Если кто-то может найти способ обойти один ответ, он найдет свой путь вокруг второго.

Редактировать: я согласен с kcoppock в том, что лицензионный чек через 20 минут после покупки вызовет наименьшие помехи для клиентов и позволит избежать ошибки возврата, о которой вы упомянули.

person Alex    schedule 27.07.2012
comment
Разовое одобрение связано с очень простым и хорошо известным эксплойтом: 1) купить приложение; 2) запустить его и получить ЛИЦЕНЗИОННЫЙ ответ; 3) сделайте резервную копию вашего устройства; 4) вернуть приложение (в течение 15-минутного окна возврата); 5) восстановить приложение из резервной копии. Вуаля — не купленное приложение, которое думает, что оно лицензировано. Чтобы этого не произошло, после закрытия окна возврата должна быть хотя бы одна проверка лицензии. Я должен добавить, что вопрос заключается в том, имеет ли предлагаемая политика больше пиратских или других рисков, чем политика по умолчанию, которая поставляется с LVL (которая требует проверок каждые несколько дней, навсегда). - person Ted Hopp; 27.07.2012
comment
Почему бы просто не отложить проверку лицензии (чтобы обеспечить полную функциональность) примерно на 20 минут после первого запуска? Тогда вы вне окна возврата. - person Kevin Coppock; 27.07.2012
comment
@kcoppock - Да, наверное, это хорошая идея. Это соответствует рекомендациям, опубликованным здесь. Реальный вопрос заключается в том, подвергает ли нас одиночный ЛИЦЕНЗИРОВАННЫЙ ответ, доставленный после истечения срока действия, большему риску, чем, например, поведение по умолчанию ServerManagedPolicy. - person Ted Hopp; 28.07.2012
comment
На самом деле, я должен согласиться с @Alex - люди, которые хотят заниматься пиратством, будут заниматься пиратством, и они будут идти на крайние меры, чтобы защититься от этого, только усугубят ситуацию с вашими платежеспособными клиентами. Я ничего не знаю о ServerManagedPolicy, поэтому я не могу ничего сказать для сравнения, но как только вы получите один лицензированный ответ в течение периода времени после возврата, я просто отпущу его в этот момент. - person Kevin Coppock; 28.07.2012
comment
@kcoppock - я не прошу впадать в крайности. Я спрашиваю о том, каким дополнительным рискам пиратства мы подвергаемся, если мы ослабляем защиту от реализации по умолчанию, которую Google предоставляет с LVL. - person Ted Hopp; 29.07.2012
comment
Возможно, вам будет интересно прочитать следующий блог: androidcracking.blogspot.co.il/search/ label/antilvl и особенно тот пост: androidcracking. blogspot.co.il/2011/01/ или вот этот: взлом Android. blogspot.co.il/p/antlvl_01.html - person Muzikant; 03.07.2013