【问题标题】:Google Licensing Service - Understanding the conceptGoogle 许可服务 - 理解概念
【发布时间】:2011-09-02 14:34:12
【问题描述】:

我不明白 Google 的 Licensing Service 的概念

场景: 用户 A 在设备 X 上购买了一个应用程序。 然后,用户 A 通过他的另一台设备 Y 访问 Android 市场来安装该应用程序,他不必再次付费,因为他在两台设备上使用相同的帐户。

应用发出许可证检查请求,其中包括设备特定数据或安装期间生成并存储在设备上的随机数据。

据我了解,设备 X 和 Y 上的额外数据会有所不同,因此同一用户和应用的许可证检查请求不同,但仍被认为是有效的。

所以在从 Android 市场下载期间,额外的请求数据也会存储在每个用户/应用程序/设备的许可服务器上吗?

用户 A 无法将应用程序从设备 X 复制到设备 Y,许可证检查将失败,因为该设备或安装特定数据仅在从 Android 市场安装应用程序时存储在服务器上?

【问题讨论】:

标签: android android-lvl


【解决方案1】:

某些信息保存在本地。例如:ServerManagedPolicy 将上次响应、有效性时间戳、重试直到、最大重试次数和重试次数保存为本地设备数据。

特别是由于 Last Response 存储在本地,因此鼓励您混淆本地数据(否则恶意用户可以输入他们自己的本地数据,表明许可证有效)并且 AESObfuscator 类提供为:

使用 AES 加密数据的混淆器。

当您构造AESObfuscator 时,您提供了byte[] salt, String applicationId, String deviceIdPBEKeySpec 的密码基于applicationIddeviceId(您可以在提供的源代码中看到)。

com.example.android.market.licensing.MainActivity 中的注释表明您可以提供的不仅仅是Secure.ANDROID_ID 作为deviceId。您需要确保它的安全性取决于您的判断 - 它可以像在您的应用程序中硬编码一个值 (new String(byte[]{(byte) 75, (byte) 12}) + Secure.ANDROID_ID) 或其他一些加密方案(其讨论可能更适合加密论坛)一样简单。

【讨论】:

  • 非常感谢您花时间写一个答案。这是否意味着设备或安装特定数据不会发送到仅用于存储响应数据的服务器?
  • 答案已更新以描述示例代码中DEVICE_ID 的使用,如果这回答了您的问题,请检查复选标记大纲。
  • 再次,非常感谢。关于这个问题的最后一点说明:我有一个设备 - Motorola Milestone,Android 2.2.1 - 它没有提供设备标识符(使用 IMEI 对我来说不是一个选项),所以我必须使用随机数据,没有连接到硬件,因此可以将安装文件复制到任何其他设备,您只需共享曾经合法购买该应用程序的帐户。我很确定这些warez 网站的管理员确切地知道如何做到这一点。
  • Google 建议不要使用还需要后端服务器的设备限制器。
  • DeviceLimiter 不同于我所描述的使用ANDROID_ID 作为您的AESObfuscator 的密码。
猜你喜欢
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多