如何确保 android 应用程序安装在物理设备而不是模拟器上?

信息安全 安卓
2021-09-06 12:13:03

我想避免人们在虚拟设备上安装应用程序。

有没有办法告诉这个?你能做的最好的事情是什么?

理想情况下,我想整体防止一个人或实体创建许多帐户以轻松分析我的服务。该应用程序只是一个门户,进程只是服务器。我在创建帐户和使用服务以确保人机交互时使用验证码。我还使用推送令牌和其他硬件和谷歌信息来尽可能确保帐户始终在同一设备上使用,以及密码等如果用户更改他的设备。换句话说,我想尽可能地最大化人类验证码解决成本。

2个回答

我不确定有没有办法。您可以检查硬件配置以查看它是否使用任何典型的仿真硬件,但如果有人修改了他们的仿真器,它可能被设置为看起来非常接近实际硬件。实际上,这就是模拟器的全部意义所在。我也不确定您要通过确保它在实际设备上运行来防止什么。没有什么特别是我能想到的,你可以用一个你不能用物理设备做的模拟器,除非你也检查 root 没有被启用,尽管一个老练的攻击者可能会绕过大多数检查也是根。

从根本上说,您无法保护您无法信任的硬件。如果这很关键,请将进程卸载到您可以控制的服务器上。如果你想对它做任何重要的事情,你必须信任你的用户和你的用户硬件。否则,您能做的最好的事情就是混淆,但这与 DRM 相同,并且提供的安全性非常低。如果设备可以做到这一点,用户就可以弄清楚设备在做什么。防止这种情况发生的唯一方法是阻止用户访问执行工作的设备。

这实际上是在 SO 上回答的:

https://stackoverflow.com/questions/2799097/how-can-i-detect-when-an-android-application-is-running-in-the-emulator

您实际上无法阻止它被安装,但是因为您的应用程序在安装之前不会启动,并且据我所知,安装时也无法运行某些东西,因此您必须等到您已通过某种意图安装和启动,然后再执行检查您是否在物理设备上。

我想是因为您在这里问它,尽管您可能正在寻找对此的安全影响的理解。问题是,如果您不希望您的应用程序在模拟器上运行,而只在物理设备上运行,因为您担心有人会查看您的应用程序的运行情况,那么恐怕您就不走运了。请记住,物理设备可以植根,然后你真的很不走运,因为真的没有办法知道幕后发生了什么。