如何使App设备特定(设备/帐户锁定)?

时间:2018-09-18 03:44:53

标签: android security google-play google-play-developer-api

我想防止有人简单地将设备植根并复制应用程序以进行重新分发。如何使下载的设备“帐户已锁定”?

我的想法是实现一种加密算法(单向),该算法对用户的电话号码进行哈希处理,并且每次执行该代码都会执行一次哈希检查(因此,如果您在手机上使用其他人的应用程序,它将失败)

但是,由于以相同的方式下载了该应用程序,因此,如果我在首次启动时实施电话号码哈希处理,攻击者就永远不会启动该应用程序并剥夺已下载软件包的基本版本。

所以我的问题是Google Play商店中是否可以提供一种方法来更改其变量之一?还是一种聪明的方法来确保已安装的应用程序无法在其他地方使用,以防止直接复制软件包被盗用?也许会强制首次启动,以便它在下载后立即进行自我配置?

1 个答案:

答案 0 :(得分:1)

计算机科学答案很短,而有用的答案则更长。简短的答案是“如果您的应用程序依靠服务器运行,那很容易。如果您的应用程序完全在设备上运行,从理论上讲是不可能的。”

如果您的应用依赖服务器,这是一个简单的过程:

  1. 使用Google Play License Verification Library (LVL)获得Google加密签名的回复,说该帐户购买了此应用。在应用程序的客户端代码中执行此操作。
  2. 将该响应发送到您的服务器,然后检查签名。如果不匹配,请不要将所需的信息发送到您的应用。

由于用户不能干扰Google服务器或您的服务器,并且您的应用需要服务器响应才能运行,因此这是坚不可摧的。

但是,如果您在客户端检查响应,或者您的应用程序可以在没有服务器响应的情况下运行,那么这将无法完成(理论上)。攻击者始终可以删除对Google Play的呼叫,验证码,或伪造您的服务器响应。 在这种情况下,您将与攻击者进行军备竞赛。大多数攻击者都很懒惰。如果您使用Google Play License Verification Library (LVL)来检查您的应用是从Play购买的,请使用ProGuard或其他优化程序,并进行一些混淆处理来隐藏您的代码,则某些攻击者可以攻击,但大多数攻击者都不会打扰,除非您的应用/ game非常受欢迎。 SafetyNet attestation API是另一种有用的技术,它可以告诉您您的应用程序是否已被篡改。但同样,如果不检查结果服务器端,它可能会被击败,因此客户端只是一种混淆军备竞赛。

当心,依靠电话号码之类的东西真是个坏主意:

  • 没有SIM卡的平板电脑怎么样?
  • 使用双SIM卡的用户怎么办?
  • 更改电话号码或网络的用户如何?
  • 拥有一部以上手机的用户又只需要购买一次您的应用程序呢?