Служба лицензирования Google - понимание концепции - PullRequest
0 голосов
/ 02 сентября 2011

Я не понимаю концепцию службы лицензирования Google

Сценарий: пользователь A покупает приложение на устройстве X. Затем пользователь A обращается к Android Market через другое устройство Y, чтобы установить приложение, и ему не нужно платить второй раз, поскольку он использует одну и ту же учетную запись на обоих устройствах.

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

Насколько я понимаю, дополнительные данные будут отличаться на устройстве X и Y, поэтому запрос проверки лицензии различен для одного и того же пользователя и приложения, но все еще распознается как действительный.

Так что дополнительные данные запроса также хранятся на сервере лицензирования для каждого пользователя / приложения / устройства во время загрузки с рынка Android?

Пользователь A не может скопировать приложение с устройства X на устройство Y, проверка лицензии не удастся, поскольку данные, относящиеся к этому устройству или установке, сохраняются только на сервере при установке приложения с Android Market?

1 Ответ

0 голосов
/ 02 сентября 2011

Определенная информация сохраняется локально.Например: ServerManagedPolicy сохраняет последний ответ, временную метку достоверности, повторную попытку до, максимальное количество повторных попыток и количество повторных попыток как данные локального устройства.

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

Обфускатор, который использует AES для шифрования данных.

Когда вы создаете AESObfuscator, вы предоставляете byte[] salt, String applicationId, String deviceId.Пароль PBEKeySpec основан на applicationId и deviceId (вы можете увидеть в предоставленном исходном коде).

Комментарий в com.example.android.market.licensing.MainActivity указывает, что вы можетепредоставить больше, чем Secure.ANDROID_ID как deviceId.Насколько вам нужно это сделать, зависит от вашего усмотрения - это может быть так же просто, как жесткое кодирование значения в вашем приложении (new String(byte[]{(byte) 75, (byte) 12}) + Secure.ANDROID_ID) или какой-либо другой криптографической схеме (обсуждение которой может быть более подходящим для форума по криптографии).

...