代码之家  ›  专栏  ›  技术社区  ›  Ying Li

如何使应用程序设备特定(设备/帐户锁定)?

  •  -1
  • Ying Li  · 技术社区  · 6 年前

    我想防止有人只是根设备和复制应用程序重新分发。如何使下载的设备“帐户锁定”?

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

    然而,由于应用程序的下载方式是相同的,如果我在第一次启动时实现电话号码哈希,攻击者可能根本无法启动应用程序并窃取下载包的基本版本。

    所以我的问题是,在googleplay商店里有没有一种方法可以为应用程序提供一个改变了的变量?或者一个聪明的方法来确保安装的应用程序不会在其他任何地方工作,以防止直接拷贝包被窃取?可能会强制第一次启动,以便在下载后立即进行自我配置?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Nick Fortescue    6 年前

    有一个简短的计算机科学答案,还有一个较长的更有帮助的答案。简单的回答是“如果你的应用程序依赖于服务器来运行,那么就很容易了。如果你的应用程序完全在设备上运行,理论上是不可能的。”

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

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

    因为用户不能干扰Google服务器或你的服务器,而你的应用程序需要服务器响应才能正常工作,这是不可破坏的。

    但是,如果您在客户端检查响应,或者您的应用程序可以在没有服务器响应的情况下工作,那么这是无法做到的(理论上)。攻击者总是可以删除对googleplay的调用、验证码或伪造服务器响应。 Google Play许可证验证库(LVL) 要检查你的应用程序是从Play购买的,请使用ProGuard或其他优化器,并进行一些模糊处理以隐藏代码,一些攻击者可以攻击,但大多数不会打扰,除非你的应用程序/游戏非常受欢迎。另一个有用的技术是 SafetyNet attestation API

    注意,依赖电话号码之类的东西是一个非常糟糕的主意:

    • 没有SIM卡的平板电脑呢?
    • 如果用户拥有一部以上的手机,他们只需要购买你的应用一次呢?
    推荐文章