我正在开发一个从外部服务器检索数据的Android应用程序。此应用程序安装在 20 台平板电脑上。但是,当设备被盗时,应阻止对此外部服务器的所有访问,因此无法从此外部服务器检索任何数据。
我想通过唯一设备 ID 阻止设备,因此服务器拒绝设备发送到服务器的标识符。我最终得到了所谓的Android ID。但是,有时已知它是空的,它被记录为"恢复出厂设置后可以更改"。它也可以很容易地在有根手机上更改。
我知道一些银行应用程序会阻止植根于过去的设备,因此它们会使用某种方式来阻止设备。我想知道他们是怎么做到的。
是否有推荐的方法来实现此设备阻止?
假设:
- 该应用程序不在谷歌播放中
- 直接安装在平板电脑上
- 您可以控制在哪些设备中安装它。
最好的方法可能是:
- 在后端中包含安装该应用程序的所有平板电脑的哈希设备 ID 白名单。
- 在向后端发出的每个请求中,应用程序都会发送经过哈希处理的设备 ID,并根据白名单执行检查,并且仅在正匹配时提供请求。
因此,如果您控制安装该应用程序的设备,则可以确保仅将其安装在不返回null
ANDROID_ID的设备中。
针对您的问题的更好解决方案是使用一个外部服务,该服务可以在运行时验证应用程序的完整性,后端可以检测每个请求是否不是来自篡改的应用程序或 root 设备。您可以在 Approov 中看到此类服务的示例。
在此博客系列中,您可以看到 Approov 解决方案的工作原理演示,同时了解其他技术来保护没有 Approov 解决方案的应用程序,该解决方案使用集成在应用程序和云服务中的 SDK 来验证应用程序和设备的完整性,并发出使用只有云服务和后端知道的机密签名的 JWT 令牌, 从而无法在安装应用程序的设备中或由中间人攻击进行逆向工程。
免责声明:我为Approov工作